Copie automatique fichier excel à heure fixe

Copie automatique fichier excel à heure fixe - VB/VBA/VBS - Programmation

Marsh Posté le 23-06-2010 à 10:04:19    

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

Reply

Marsh Posté le 23-06-2010 à 10:04:19   

Reply

Marsh Posté le 23-06-2010 à 10:30:54    

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 !
Reply

Marsh Posté le 23-06-2010 à 10:30:59    

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
Reply

Marsh Posté le 23-06-2010 à 10:43:22    

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.

Reply

Marsh Posté le 23-06-2010 à 10:45:27    

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.

Reply

Marsh Posté le 23-06-2010 à 10:46:18    

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

Reply

Marsh Posté le 23-06-2010 à 10:47:33    

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

Reply

Marsh Posté le 23-06-2010 à 10:56:20    

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


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-06-2010 à 12:15:08    

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...

Reply

Marsh Posté le 23-06-2010 à 14:09:12    

Quel os ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-06-2010 à 14:09:12   

Reply

Marsh Posté le 23-06-2010 à 14:17:36    

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

Reply

Marsh Posté le 23-06-2010 à 14:22:54    

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 !
Reply

Marsh Posté le 25-06-2010 à 11:11:15    

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

Reply

Marsh Posté le 25-06-2010 à 11:16:39    

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


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 25-06-2010 à 11:25:50    

Windows XP

Reply

Marsh Posté le 25-06-2010 à 11:32:49    

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

Reply

Marsh Posté le 25-06-2010 à 12:16:11    

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 !
Reply

Marsh Posté le 25-06-2010 à 15:03:24    

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

Reply

Marsh Posté le 25-06-2010 à 15:21:03    

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


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 25-06-2010 à 15:45:51    

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...

Reply

Marsh Posté le 25-06-2010 à 15:49:45    

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


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 25-06-2010 à 15:57:36    

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
Reply

Marsh Posté le 25-06-2010 à 16:09:20    

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

Reply

Marsh Posté le 25-06-2010 à 16:34:57    

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
Reply

Marsh Posté le 25-06-2010 à 17:23:57    

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

Reply

Marsh Posté le 25-06-2010 à 21:29:10    

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


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 26-06-2010 à 18:34:10    

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

Reply

Marsh Posté le 29-06-2010 à 14:37:51    

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

Reply

Marsh Posté le 30-06-2010 à 09:07:33    

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 !
Reply

Marsh Posté le 30-06-2010 à 10:46:02    

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" ))

Reply

Marsh Posté le 30-06-2010 à 10:53:29    

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 !
Reply

Marsh Posté le 30-06-2010 à 12:25:09    

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

Reply

Marsh Posté le 30-06-2010 à 12:28:29    

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 !
Reply

Marsh Posté le 30-06-2010 à 14:07:01    

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

Reply

Marsh Posté le 30-06-2010 à 14:26:39    

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 !
Reply

Marsh Posté le 30-06-2010 à 16:35:37    

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

Reply

Marsh Posté le 30-06-2010 à 16:59:41    

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 !
Reply

Marsh Posté le 30-06-2010 à 18:01:06    

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) ?

Reply

Marsh Posté le 30-06-2010 à 19:39:52    

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 !
Reply

Marsh Posté le 01-07-2010 à 11:37:53    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed