Copie automatique fichier excel à heure fixe - VB/VBA/VBS - Programmation
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 :
|
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.
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.
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.
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
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
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...
Marsh Posté le 23-06-2010 à 14:09:12
ReplyMarsh 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)
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 ?
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 :
|
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
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 ?
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...
Marsh Posté le 25-06-2010 à 15:49:45
ReplyMarsh 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 |
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
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).
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
Marsh Posté le 25-06-2010 à 21:29:10
il doit aussi t'indiquer un numéro de ligne où ca plante
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
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
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 ?
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" ))
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)
Marsh Posté le 30-06-2010 à 12:25:09
Excel 2007.
Je n'ai pas de liaisons.
Et rien dans le WorkBook_Open.
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 ?
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 ?
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
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 ?
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 :
|
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
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) ?
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
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
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