Automatisation en VBS qui ne fonctionne plus
Salut tout le monde, je suis nouveau sur le forum.
En général je trouve une solution à mes problèmes en cherchant un peu, mais là...
Je vous explique. Au taf, on utilise un ERP tout pourri. Tellement pourri, qu'on a du développer un tableau de bord à part sous Excel pour avoir quelques fonctions de statistiques. Donc mon fichier a une liaison ODBC avec la base de données de l'ERP, en lecture seule pour ne pas tout casser.
J'ai un script qui tourne sur un PC depuis des années sans soucis, qui ouvre le fichier pendant la nuit et va mettre à jour les données via l'ODBC. Ainsi le matin, mon fichier est actualisé et toute l'entreprise peut repartir avec des données toutes fraîches. Mais depuis quelques jours, j'ai des soucis. Parfois, le script VBS de l'automatisation ne peut pas ouvrir le fichier pour faire le job. Mais parfois oui...
Il n'y a entre temps aucune modification majeure du fichier Excel.
Voici mon script VBS
Option Explicit
REM On Error Resume Next
ExempleMacroExcel
Sub ExempleMacroExcel()
Dim ApplicationExcel
Dim ClasseurExcel
Set ApplicationExcel = CreateObject("Excel.Application")
Set ClasseurExcel = ApplicationExcel.Workbooks.Open("C:\tmp\2023-03-12 - 10h21 - ERREUR.xlsm")
ApplicationExcel.Visible = True 'les actions seront visibles. Pour tout lancer en arrière-plan, remplacer True par False
ApplicationExcel.Run "MajOdbc" 'va lancer la macro "MajOdbc"
WScript.Sleep 300000 ' Temps de sleep en millisecondes 900000 = 900 secondes = 15 minutes
ApplicationExcel.Run "TrierUrgence" 'va lancer le tri
WScript.Sleep 300000 ' Temps de sleep en millisecondes 900000 = 900 secondes = 15 minutes
ApplicationExcel.DisplayAlerts = False
ClasseurExcel.Save
ClasseurExcel.Close True
ApplicationExcel.DisplayAlerts = True
ApplicationExcel.Quit
End SubIl me dit qu'il ne peut pas ouvrir le fichier et renvoie une erreur 800A03EC
Le même fichier, daté du 12 mars 2023 à 01h55 fonctionne, alors que celui de 10h21 et les suivants plantent le script. Je sais que certaines versions plantaient également le script la semaine dernière.
Mon fichier Excel pèse environ 20Mo. Ce n'est pas la version la plus lourde qui plante.
J'ai essayé sur 3 PC différents et le souci est le même partout. Testé sous Windows 10 avec Office 2019 ou Office 2021.
Pour des raisons de confidentialité, il m'est impossible de partager le fichier Excel publiquement. Je ne sais pas si c'est toléré sur le forum, je n'ai pas relevé d'info à ce propos dans le règlement, mais je suis prêt à payer une prestation à qui saura me résoudre le soucis via anydesk. Maintenant si vous avez des pistes, je suis preneur aussi.
D'avance merci !
Bonjour
En VBS comme en VBA lorsqu'un nom de fichier comporte des espaces il faut l'entourer de caractères double quotes supplémentaires , j'ajoute que je préfére ajouter systématiquement un test d'existence de fichier
nom_de_fichier = "C:\tmp\2023-03-12 - 10h21 - ERREUR.xlsm"
Set oFSO = CreateObject("Scripting.FileSystemObject")
if oFSO.FileExists(nom_de_fichier) then
WScript.Echo "Fichier " & nom_de_fichier & " absent"
end if
Set ClasseurExcel = ApplicationExcel.Workbooks.Open(Chr(34) & nom_de_fichier & Chr(34))
....Salut Scraper, je te remercie pour ta réponse.
Il y a déjà des doubles quotes autour du chemin complet (chemin + nom) du fichier. Tu voudrais dire qu'il faudrait en mettre d'autres en plus ? Je ne vois pas comment et rien dans ton code ne semble aller dans ce sens non plus. Je pense que je n'ai pas compris ce que tu voulais dire.
Pour le test tu as raison d'une manière générale. Mais le contexte de ce fichier particulier est si spécial, que la vérification en devient inutile. En tous cas merci pour le morceau de code que tu as partagé, je ne connaissais pas. Le VBA est un monde tellement vaste !