Bonjour,
je me prends la tête depuis plusieurs jours pour une tâche planifiée toute simple sous Windows 7 et je sollicite votre aide pour comprendre ce qui se passe et comment contourner le problème.
Le but de la manipulation est :
1. copier des fichiers présents sur un serveur
2. Ouvrir une base Access
3. Lancer une procédure de cette base Access, qui va créer un fichier
4. Déposer ce fichier sur un autre serveur.
J'avais commencé par faire un script vbs que je pensais appeler directement. Devant les erreurs obtenues, j'ai compris qu'il fallait un .bat qui lance le script vbs.
Le script fonctionne correctement (je vous passe les déboires pour arriver a faire que le script attende la fin du traitement Access pour continuer), appelé directement ou via le .bat.
J'ai donc créé ma tâche planifiée, qui ne démarre pas... si je choisi l'option "Exécuter même si aucun utilisateur n'a ouvert de session". A force de lecture et de recherches, j'ai cru comprendre que les tâches planifiées ne pouvaient s'exécuter sur des disques mappés.
J'ai donc rapatrié base et dossiers sur un disque local, adapté légèrement bat et vbs, mais cela ne change rien.
Tant que cette option est cochée, rien ne se passe. La première instruction du 1er .bat est un "echo Go ! > trace.log", que je ne vois même pas. J'en conclue que, même si la tâche apparaît comme "En cours", en fait rien ne se passe.
Autant je comprends que certaines instructions ne passent pas (dans le cas où les lecteurs réseau ne sont pas mappés), mais pourquoi l'ensemble ne produit rien ? Comment-être sûr que quelque chose à démarré ?
Question subsidiaire : pour des raisons de sécurité et de backups et de facilité d'échange, les fichiers et bases importantes sont stockés sur le réseau. Comment dois-je procéder pour arriver à planifier une tâche en mode "session fermée" travaillant avec des ressources sur le réseau ?
Merci d'avance pour vos aides, lumières et liens
Le .bat
le vbs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 c: cd C:\Users\Public\Documents\Projet echo ********************************************************************************************* >> trace.log C:\Windows\syswow64\wscript.exe "C:\Users\Public\Documents\Projet\Traitement_Base.vbs" echo ********************************************************************************************* >> trace.log
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 Const ForReading = 1, ForWriting = 2, ForAppend = 8 Dim oFSO, oFl, Log dim stRep dim stRepDest dim stProj dim bMsg Dim objShell dim d, m, dateExtract Dim appAccess if month(Date)<10 then m = "0" & month(date) else m = month(date) end if if day(Date)<10 then d = "0" & day(date) else d = day(date) end if dateExtract = year(Date) & m & d Set oFSO = CreateObject("Scripting.FileSystemObject") stRep = oFSO.GetAbsolutePathName(".") 'Current pathname Set log = oFSO.OpenTextFile(stRep & "\trace.log", ForAppend,true) log.write(vbcrlf & Date() & " - " & Time() & " - -------------------------------------------------------------------------------------------------------") If oFSO.FolderExists(stRep) Then ' 'WScript.Echo "FSO.FolderExists" log.write(vbcrlf & Date() & " - " & Time() & " - Copie des fichiers.") 'Ouverture de la base de données (ne doit pas avoir d'autoexec) Set appAccess = CreateObject("Access.Application") appAccess.Visible = True appAccess.OpenCurrentDatabase stRep & "\BASE_DE_DONNEES.accdb" 'Lancement de la procédure (ne doit pas contenir la fermeture de la base) '(testé avec Run ou Exec => la suite est exécutée sans attendre la fin de la procedure Access) appAccess.run "start" set appAccess = nothing ' oFSO.CopyFile stRep & "\Output\Ctrls_" & DateExtract & ".xls" , stRepdest & "\Output\Ctrls_" & DateExtract & ".xls"" ,True Set objShell = Nothing set FSO = nothing else 'WScript.Echo "FSO.FolderExists PAS" log.write( vbcrlf & stRep & " inexistant.") Wscript.quit end if log.write(vbcrlf & Date() & " - " & Time() & " - Traitement terminé" & vbcrlf & vbcrlf) set oFSO = Nothing
Partager