Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1545 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Copie automatique fichier excel à heure fixe

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Copie automatique fichier excel à heure fixe

n°2003997
owl_vba
Posté le 23-06-2010 à 10:04:19  profilanswer
 

Bonjour,
 
Je travaille avec un fichier excel dont les données sont modifiées en temps réel et en continu.
J'aurais souhaité :
- soit faire une copie de ce fichier excel tous les jours à une heure précise (17h). Cette copie s'enregistrerait sur le disque dur.  
 
- soit avoir un programme qui générerait un nouvel fichier semblable au fichier de référence, mais qui ne s'actualiserait pas.
 
En résumé, je veux pouvoir trouver le fichier avec les données disponibles à 17h, même si je ne suis pas devant mon poste à ce moment.
 
J'ai quelques connaissances en vba, donc je pensais faire cela grâce à vba, mais je n'y arrive pas.
 
Merci d'avance

mood
Publicité
Posté le 23-06-2010 à 10:04:19  profilanswer
 

n°2004017
SuppotDeSa​Tante
Aka dje69r
Posté le 23-06-2010 à 10:30:54  profilanswer
 

Hello
 
Le fichier est il ouvert a 17h ?
Si oui en VBA, fanchement... C'est un peu chiant. Et bonjour les ressources pour verifier l'heure ou utiliser un Timer...
 
A mon avis un petit script vbs avec le planificateur des taches qui copie/colle le fichier extcel et roulez jeunesse...
 

Code :
  1. Dim FichierSource, FichierDest, DateFichier, objFSO
  2.     'Variables du fichier a copier et du dossier de destination
  3.     FichierSource = "c:\Classeur1.xls"
  4.     FichierDest = "C:\SauveFichierExcel\"
  5.     DateFichier = FormatDate(Date(), "-" )
  6.     Set objFSO = CreateObject("Scripting.FileSystemObject" )
  7.     objFSO.Copyfile FichierSource, FichierDest & "Sauv du " & DateFichier  & ".xls"
  8. Function FormatDate(ValDate, Caractere)
  9. Dim MoisDate, JourDate
  10. ValDate = CDate(ValDate)
  11. Caractere = CStr(Caractere)
  12. MoisDate = Month(ValDate)
  13.  JourDate   = Day(ValDate)
  14. FormatDate = CStr(Year(ValDate)) & Caractere
  15. If MoisDate < 10 Then
  16.  FormatDate = FormatDate & "0"
  17. End If
  18. FormatDate = FormatDate & CStr(MoisDate) & Caractere
  19. If JourDate < 10 Then
  20.  FormatDate = FormatDate & "0"
  21. End If
  22. FormatDate = FormatDate & CStr(JourDate)
  23. End Function


Message édité par SuppotDeSaTante le 23-06-2010 à 10:31:41

---------------
Soyez malin, louez entre voisins !
n°2004018
olivthill
Posté le 23-06-2010 à 10:30:59  profilanswer
 

Faire quelque chose en VBA exigerait que Excel soit lancé, ce qui est contraignant.
 
Mais, il existe le "plannficateur de tâches" de Windows.
Voir dans le panneau de contrôle.
 
Il lance ce que l'on veut à l'heure que l'on veut, et avec la fréquence que l'on veut. C'est assez pratique. On peut donc créer un petit script de copie, et planifier son lancement avec ce planificateur.
 
Edit: dje69r propose aussi l'utilisation du planificateur, les grands esprits se rencontrent.


Message édité par olivthill le 23-06-2010 à 10:32:40
n°2004031
owl_vba
Posté le 23-06-2010 à 10:43:22  profilanswer
 

Merci pour votre rapidité.
 
Le 'petit script vbs', je le mets où et comment ?
Dans le planificateur de tâches ?
Dans un fichier dans lequel le planificateur de tâches ira chercher le programme à exécuter ?
 
D'avance merci.

n°2004034
olivthill
Posté le 23-06-2010 à 10:45:27  profilanswer
 

Quand on ouvre le planificateur de tache, il y a un champ où tu donnes le nom du fichier .vbs qui contient le script de copie.
On peut aussi spécifier l'utilisateur qui fait le lancement, et son mot de passe de connexion si nécessaire.

n°2004035
owl_vba
Posté le 23-06-2010 à 10:46:18  profilanswer
 

Et pour répondre à vos questions, le fichier excel est ouvert à 17h.
 
Si le script permet de copier/coller le fichier excel, est ce que ça veut dire que le nouveau fichier (fichier 'bis') créé comportera les mêmes formules excel ?
Si c'est le cas, ça n'ira pas, car dès que je vais ouvrir ce fichier 'bis', il va se mettre à jour en temps réel

n°2004037
owl_vba
Posté le 23-06-2010 à 10:47:33  profilanswer
 

D'accord.
 
Et comment créer un fichier .vbs ?

n°2004041
SuppotDeSa​Tante
Aka dje69r
Posté le 23-06-2010 à 10:56:20  profilanswer
 

Tu ouvres notepad, tu colles le code, tu enregistres et tu changes le .txt en .vbs


---------------
Soyez malin, louez entre voisins !
n°2004099
owl_vba
Posté le 23-06-2010 à 12:15:08  profilanswer
 

D'accord.
 
Le problème, c'est que dans le menu 'actions' du plannifacteur de tâches, je sélectionne 'démarrer un programme' ('exécuter un programme' n'existe pas), donc cela m'ouvre le fichier .vbs, mais n'exécute pas ce qu'il y a dedans...

n°2004131
SuppotDeSa​Tante
Aka dje69r
Posté le 23-06-2010 à 14:09:12  profilanswer
 

Quel os ?


---------------
Soyez malin, louez entre voisins !
mood
Publicité
Posté le 23-06-2010 à 14:09:12  profilanswer
 

n°2004139
olivthill
Posté le 23-06-2010 à 14:17:36  profilanswer
 

Si, cela va le lancer. Vous avez fait l'essai ?

n°2004144
SuppotDeSa​Tante
Aka dje69r
Posté le 23-06-2010 à 14:22:54  profilanswer
 

Tu as bien changé l'extension ?
Et non pas ajouté "vbs" à un fichier texte dont tu ne vois pas l'extension ? (Decocher "Masquer les extension dont le type est connu" dans les options de dossier)


---------------
Soyez malin, louez entre voisins !
n°2004708
owl_vba
Posté le 25-06-2010 à 11:11:15  profilanswer
 

Tout à fait, c'est bien un fichier .vbs

n°2004711
SuppotDeSa​Tante
Aka dje69r
Posté le 25-06-2010 à 11:16:39  profilanswer
 

j'ai aucun souci pour lancer un vbs avec le planificateur des taches...
 
Je repose la question : Quel os ?


---------------
Soyez malin, louez entre voisins !
n°2004717
owl_vba
Posté le 25-06-2010 à 11:25:50  profilanswer
 

Windows XP

n°2004725
owl_vba
Posté le 25-06-2010 à 11:32:49  profilanswer
 

Non, c'est Windows Vista en fait.
Désolé

n°2004751
SuppotDeSa​Tante
Aka dje69r
Posté le 25-06-2010 à 12:16:11  profilanswer
 

Bon bah je viens de faire l'essai, que ca soit XP ou Vista aucun souci avec ce fichier vbs :
 

Code :
  1. Dim FichierSource, FichierDest, DateFichier, objFSO
  2.     'Variables du fichier a copier et du dossier de destination
  3.     FichierSource = "c:\Classeur1.xls"
  4.     FichierDest = "C:\SauveFichierExcel\"
  5.     DateFichier = FormatDate(Date(), "-" )
  6.     Set objFSO = CreateObject("Scripting.FileSystemObject" )
  7.     objFSO.Copyfile FichierSource, FichierDest & "Sauv du " & DateFichier  & ".xls"
  8. Function FormatDate(ValDate, Caractere)
  9. Dim MoisDate, JourDate
  10. ValDate = CDate(ValDate)
  11. Caractere = CStr(Caractere)
  12. MoisDate = Month(ValDate)
  13.  JourDate   = Day(ValDate)
  14. FormatDate = CStr(Year(ValDate)) & Caractere
  15. If MoisDate < 10 Then
  16.  FormatDate = FormatDate & "0"
  17. End If
  18. FormatDate = FormatDate & CStr(MoisDate) & Caractere
  19. If JourDate < 10 Then
  20.  FormatDate = FormatDate & "0"
  21. End If
  22. FormatDate = FormatDate & CStr(JourDate)
  23. End Function


Message édité par SuppotDeSaTante le 25-06-2010 à 12:16:36

---------------
Soyez malin, louez entre voisins !
n°2004807
owl_vba
Posté le 25-06-2010 à 15:03:24  profilanswer
 

Pour ma part, le fichier source n'est pas sur le disque dur (C:), il est sur un emplacement réseau (P:).
Ensuite, mon fichier excel (toujours le fichier source) accepte les macros (.xlsm).
 
Est ce que ça change quelque chose ?
 
Merci

n°2004810
SuppotDeSa​Tante
Aka dje69r
Posté le 25-06-2010 à 15:21:03  profilanswer
 

Hum, tu as bien mis un utilisateur qui a le droit sur le reseau dans ta tache planifiee ?


---------------
Soyez malin, louez entre voisins !
n°2004821
owl_vba
Posté le 25-06-2010 à 15:45:51  profilanswer
 

Tout à fait.
 
Je répéte ce que j'avais précédemment expliqué : à l'heure définie, le planificateur de taches ouvre le fichier .vbs (qui est un bloc note contenant le programme que tu m'as fourni -modifié avec les noms de fichiers corects). Ce qui est normal puisque le planificateur a pour instruction de 'démarrer un programme'.
Mais cela ne s'exécute pas et reste ouvert sur mon écran sans qu'il ne se passe rien ensuite...

n°2004824
SuppotDeSa​Tante
Aka dje69r
Posté le 25-06-2010 à 15:49:45  profilanswer
 

Désolé je ne peux pas plus t'aider là.


---------------
Soyez malin, louez entre voisins !
n°2004830
olivthill
Posté le 25-06-2010 à 15:57:36  profilanswer
 

C'est bizarre. C'est peut-être un problème avec l'extension du fichier, comme cela avait déjà été évoqué, mais sur le point duquel, vous ne nous avez pas donné de retour. Il faut absolument que le fichier s'appelle quelquechose.vbs, et non quelquechose.vbs.txt . Comme l'explorateur de Windows cache les extensions connues par défaut, et que ".txt" est une extension connue, vous voyez peut-être "quelquechose.vbs", alors qu'en réalité, vous avez "quelquechose.vbs.txt". Pour éviter cela, il faut aller dans les options de l'explorateur Windows, comme indiqué précédemment.
 
Pour faire un test, pourriez-vous créer un fichier test.vbs qui contient uniquement une ligne :

Wscript.Echo "Le script VBS s'est bien lancé !"


Ensuite, cliquer sur le fichier.
S'il se lance, c'est bon. S'il s'ouvre dans un éditeur de texte, c'est qu'il a une mauvaise extension ou que son extension est mal associée.
 
Au pire, au peut créer un fichier "lance_le_vbs.bat" qui fera un appel à votre fichier "quelquechose.vbs"
Dans ce "lance_le_vbs.bat", vous écrirez :

cscript //Nologo quelquechose.vbs


Message édité par olivthill le 25-06-2010 à 15:58:49
n°2004834
owl_vba
Posté le 25-06-2010 à 16:09:20  profilanswer
 

Quand je lance ce fichier : Wscript.Echo "Le script VBS s'est bien lancé !", il ne se passe rien : il s'ouvre en effet dans un éditeur de texte (alors qu'il est enregistré en .vbs, sans aucune autre extension.
 
Quand je lance : "lance_le_vbs.bat", cela s'exécute dans une fenêtre de commande, mais il ne se passe rien ensuite

n°2004844
olivthill
Posté le 25-06-2010 à 16:34:57  profilanswer
 

Il vous manquerait donc le fichier cscript.exe, où bien vous n'auriez pas le droit de l'utiliser.
Il est habituellement dans c:\WINDOWS\system32
 
Edit : Quand je fais un clic droit (pas gauche) sur le fichier test.vbs, et que je choisis "propriétés", je vois une boite de dialogue, et dans l'onglet "Général", en dessous, du nom et du type de fichier, j'ai "S'ouvre avec Microsoft (r) Windows Based Script Host", et un bouton "Modifier..." à côté (je suis sous Windows XP, pas Vista, mais ça doit être à peu près la même chose).
Si l'ouverture se fait avec un autre logiciel, il faudrait cliquer sur le bouton "Modifier..." pour faire l'association avec c:\WINDOWS\system32\cscript.exe (ou avec un autre chemin, si le programme est tailleur).


Message édité par olivthill le 25-06-2010 à 16:43:25
n°2004858
owl_vba
Posté le 25-06-2010 à 17:23:57  profilanswer
 

J'ai bien le fichier cscript.exe.
 
Quand je lance le fichier test.vbs, maintenant cela fonctionne.
Par contre le fichier qui premet de copier le fichier excel ne fonctionne toujours pas.
Quand je le lance, cela indique :  
Erreur : Instruction attendue
Code : 800A0400
Source : Erreur de compilation Microsoft VBScript

n°2004894
SuppotDeSa​Tante
Aka dje69r
Posté le 25-06-2010 à 21:29:10  profilanswer
 

il doit aussi t'indiquer un numéro de ligne où ca plante


---------------
Soyez malin, louez entre voisins !
n°2004977
owl_vba
Posté le 26-06-2010 à 18:34:10  profilanswer
 

En effet.
Grâce à ça j'ai réussi à trouver ce qui posait problème. Merci.
 
Maintenant, le programme se lance correctement, la sauvegarde s'effectue.
 
Par contre, comme le fichier source est un fichier en temps réel avec des macros (.xlms), la sauvegarde créée est aussi mise à jour en temps réel.
Donc dès que j'ouvre cette sauvegarde, les valeurs enregistrées sont remplacées par les données de l'instant.
J'ai essayé de régler cela en enregistrant le fichier en .xls (sans macros) mais cela n'a pas l'air de fonctionner

n°2005725
owl_vba
Posté le 29-06-2010 à 14:37:51  profilanswer
 

Une petite réponse pour le problème de mise à jour en temps réel de la copie (histoire de finir le programme et que ça fonctionne) ???
 
Grâce à vous, j'ai bien avancé, mais il manque la fin...
D'avance, merci

n°2005915
SuppotDeSa​Tante
Aka dje69r
Posté le 30-06-2010 à 09:07:33  profilanswer
 

Ton fichier se met a jour de quelle maniere ?
Macro au demarrage ? Ou part les options mise a jour des liens ?


---------------
Soyez malin, louez entre voisins !
n°2005964
owl_vba
Posté le 30-06-2010 à 10:46:02  profilanswer
 

En fait, le fichier excel est connecté en temps réel à Bloomberg (mise à jour en temps réel du cours des actions...).
 
Donc dans les cellules excel, il y a les formules permettant de récupérer ces données (par exemple =BDP("ticker"; "PRICE" ))

n°2005967
SuppotDeSa​Tante
Aka dje69r
Posté le 30-06-2010 à 10:53:29  profilanswer
 

Quelle version d'Excel ?
Et dans le WorkBook_Open tu as quoi ?
Tu as des liaisons ? (<2007 tu vas dans Edition, Liaisons)


Message édité par SuppotDeSaTante le 30-06-2010 à 10:55:40

---------------
Soyez malin, louez entre voisins !
n°2006002
owl_vba
Posté le 30-06-2010 à 12:25:09  profilanswer
 

Excel 2007.
 
Je n'ai pas de liaisons.
Et rien dans le WorkBook_Open.

n°2006006
SuppotDeSa​Tante
Aka dje69r
Posté le 30-06-2010 à 12:28:29  profilanswer
 

Soit, il faut enlever le calcul automatique, soit copier/coller valeur les feuilles sur un autre fichier et le sauver.
 
Tu as combien de feuille sur ton fichier ?


---------------
Soyez malin, louez entre voisins !
n°2006028
owl_vba
Posté le 30-06-2010 à 14:07:01  profilanswer
 

1 seule feuille sur le fichier.
 
Enlever le calcul automatique ? Sur quel fichier ?
Copier/coller les valeurs sur un autre fichier ?

n°2006037
SuppotDeSa​Tante
Aka dje69r
Posté le 30-06-2010 à 14:26:39  profilanswer
 

Enlever le calcul auto sur le fichier qu'on copie a 17h
Ca evite les mise a jour par les fonctions.
 
Copier coller les valeurs de ton fichier Excel dans un nouveau fichier, comme ca tu es sur que le fichier copié ne contiendra aucune liaison. Et c'est ce nouveau fichier qu'on met en tant que copie


Message édité par SuppotDeSaTante le 30-06-2010 à 14:27:14

---------------
Soyez malin, louez entre voisins !
n°2006105
owl_vba
Posté le 30-06-2010 à 16:35:37  profilanswer
 

Merci.
 
Ca me parait pas mal un copier/coller des valeurs dans un fichier.
Comment fait on ça ?

n°2006125
SuppotDeSa​Tante
Aka dje69r
Posté le 30-06-2010 à 16:59:41  profilanswer
 

Je le fais comme ca directement ici, pas sur que ca roule de suite. Ca roule :
 

Code :
  1. Dim AppExc
  2. Set AppExc = CreateObject("Excel.application" )
  3. AppExc.Workbooks.Open ("C:\Classeur1.xls" )
  4. AppExc.Cells.Select
  5. AppExc.Selection.Copy
  6. AppExc.Workbooks.Add
  7. AppExc.Cells.Select
  8. AppExc.ActiveSheet.Paste
  9. AppExc.CutCopyMode = False
  10. AppExc.ActiveWorkbook.SaveAs ("C:\Classeur2.xls" )
  11. AppExc.Quit
  12. Set AppExc = Nothing


 
Les chemins sont forcément a définir mais tu dois déjà avoir les variables dans ton vbs.
 
Ceci, meme si c'est pour Excel, c'est a mettre dans un vbs hein ;)


Message édité par SuppotDeSaTante le 30-06-2010 à 17:13:58

---------------
Soyez malin, louez entre voisins !
n°2006144
owl_vba
Posté le 30-06-2010 à 18:01:06  profilanswer
 

Merci
 
C'est à mettre obligatoirement dans un 2ème vbs ?
Ou je peux l'intégrer avec le premier ?
 
Si ce n'est pas le cas, il faudra que dans le planificateur de tâches, je lance 2 tâches à exécuter (copie des valeurs dans un fichier et ensuite copie de ce fichier) ?

n°2006149
SuppotDeSa​Tante
Aka dje69r
Posté le 30-06-2010 à 19:39:52  profilanswer
 

Non non tu fais un mix entre ce que j'ai mis et le 1er vbs.
Reellement le 1er vbs ne sert plus, puisque la copier est geree par le enregistrer sous...
 
Fais voir ton 1er vbs


---------------
Soyez malin, louez entre voisins !
n°2006271
owl_vba
Posté le 01-07-2010 à 11:37:53  profilanswer
 

Le 1er vbs, c'était ça :
 
1.Dim FichierSource, FichierDest, DateFichier, objFSO
2.
3.
4.    'Variables du fichier a copier et du dossier de destination
5.    FichierSource = "c:\Classeur1.xls"
6.    FichierDest = "C:\SauveFichierExcel\"
7.    DateFichier = FormatDate(Date(), "-" )
8.
9.    Set objFSO = CreateObject("Scripting.FileSystemObject" )
10.    objFSO.Copyfile FichierSource, FichierDest & "Sauv du " & DateFichier  & ".xls"
11.
12.
13.
14.
15.Function FormatDate(ValDate, Caractere)
16.
17.Dim MoisDate, JourDate
18.
19.ValDate = CDate(ValDate)
20.
21.Caractere = CStr(Caractere)
22.
23.MoisDate = Month(ValDate)
24. JourDate   = Day(ValDate)
25.
26.FormatDate = CStr(Year(ValDate)) & Caractere
27.
28.If MoisDate < 10 Then
29. FormatDate = FormatDate & "0"
30.End If
31.
32.FormatDate = FormatDate & CStr(MoisDate) & Caractere
33.
34.If JourDate < 10 Then
35. FormatDate = FormatDate & "0"
36.End If
37.
38.FormatDate = FormatDate & CStr(JourDate)
39.
40.End Function

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Copie automatique fichier excel à heure fixe

 

Sujets relatifs
Création formulaire de recherche très simple depuis données excelVBA et Excel aller chercher des données sur d'autres fichiers
numerotation croissante de commande pour fichier xmlRécupérer les notes (tonalité+vélocité+durée) d'un fichier Midi
Chargement d'un fichier .emx en JAVA sous EclipseComment protéger les listes déroulantes sur excel 2000
Copie de lignes avec format dans VBAouverture d'un fichier en C
tester si un fichier à subit une modificationRechercher un fichier dans les sous répertoires
Plus de sujets relatifs à : Copie automatique fichier excel à heure fixe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR