Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Je suis actuellement confronté à un soucis qui m'embête beaucoup car, peu importe les tests que j'ai réalisés, je n'arrive pas à en trouver la cause. J'espère donc que je ne me suis pas trompé de forum. Mais avant toute chose, je vous explique la situation.
J'ai une macro excel qui tourne correctement.
Celle-ci, à la fin de son exécution, va appeler un .bat.
Ce fichier batch quant à lui, va exécuter un fichier java.
Tout marche très bien en local, jusqu'à ce que cette macro (et les autres fichiers) soit en réseau. En effet, selon l'ordinateur du réseau, cela peut bien fonctionner ou non. Quand ça ne fonctionne pas, le terminal de commande s'ouvre et se ferme en une milliseconde.
Voici mes lignes VBA importantes :
Code:
Private Declare Function SetCurrentDirectory Lib "Kernel32" _
Alias "SetCurrentDirectoryA" (ByVal lpszCurDir As String) As Long
Code:
SetCurrentDirectory (path & "\EnvoiFTP")
path étant un string qui contient une chaine de caractère type : \\serveur\dossier\etc
Code:
Shell ("MonFichier.bat")
C'est extrêmement rare que je vienne poster un problème sur un forum, mais là je n'ai absolument aucune idée du pourquoi du comment.
Voici les tests que j'ai réalisés :
- En local cela fonctionne sur toutes les machines
- En ouvrant directement le .bat en local ça fonctionne.
- En ouvrant le .bat sur le réseau, il y a un problème de chemin UNC (tous les ordis)
- En changeant le nom du fichier en n'importe quoi, il dit qu'il est introuvable (sinon rien)
- La macro continue de tourner après l'appel de la ligne "Shell (.."
- En passant par un lecteur réseau cela fonctionne sur tous les ordis.
- ..
J'en ai fais pas mal d'autre mais je ne me souviens plus. L'important est là.
-Ce n'est pas un problème java.
-Le fichier est bien trouvé.
-Aucun message d'erreur.
Voilà, je suis perdu.
Merci d'avoir lu mon pavé, et merci à ceux qui tenteront d'y répondre.
Je connais pas le Net Use, je viens de tester en vitesse :
Code:
Shell ("Net Use Z: " & path & "\EnvoiFTP\MonFichier.bat")
Mais ça ne marche pas. L'invite de commande s'ouvre et se referme directement (à nouveau) sauf que cela se passe sur un ordi qui fonctionne avec ce que j'avais écris, et qu'en remplaçant le nom du fichier bat par un nom de fichier qui n'existe pas, il se passe strictement la même chose (pas d'erreur du style 'fichier introuvable').
Pour le VBS, je tenterai demain, mais est-ce vraiment cela le problème (si oui pourquoi ?) ?
J'ai simplement dis qu'à ta place, j'utiliserai VBscript
(car plus puissant à mon sens et avec plus de possibilités en ce qui concerne le "réseau")
C'était une suggestion.
Tu dois utiliser le net use en deux temps.
D'abord lui affecter une lettre comme tu le fais au début de ta commande mais ne pas lancer le batch dans la foulée.
Code:
Shell ("Net Use Z: " & path)
Shell ("Z:EnvoiFTP\MonFichier.bat")
Tu peux avoir la syntaxe en ouvrant une ligne commande et en tapant net use /?
Quant au Vbscript, je ne vois pas ce qu'il apporterait de plus.
Voila ce que je vois entre autres choses.
-le fait de nécessiter que le bloc-notes pour créer un script (pas besoin d'excel)
-d'être autonome
-de pouvoir se combiner avec le planificateur de tâches.
Voila ce que je vois entre autres choses.
-le fait de nécessiter que le bloc-notes pour créer un script (pas besoin d'excel)
-d'être autonome
-de pouvoir se combiner avec le planificateur de tâches.
Je ne conteste en rien mais tout ça est vrai aussi pour un fichier .bat (ou .cmd pour être plus moderne).
Le VBScript est effectivement plus puissant mais ça suppose de se pencher sur un langage supplémentaire un peu plus compliqué que des commandes DOS.
Ne sachant pas ce que fait l'applet java, *.bat ou *.vbs
pour le moment je ne peux rien dire de plus.
(VBScript étant cousin de VBA, il n'est pas si compliqué que cela)
Un dernier avantage : un script VBS le lance pas de fenêtre MSdos lors de son éxécution.
PS1 : Dans mon Windows\System32
Il y un winrm.vbs pas un winrm.bat ou winrm.cmd 😱
(et c'est Microsoft qui l'a mis là 😉 )
Et effectivement c'est un exemple de la puissance d'un script VBS.
PS2: Encore une fois c'est une question de gout.
Et c'est un avis personnel qui n'engage que moi.
Bon, mon problème n'est toujours pas résolu mais on tient une piste.
Code:
Shell ("Net Use Z: " & path)
Shell ("Z:EnvoiFTP\MonFichier.bat")
Ce code n'a pas fonctionné (même en rajoutant le \ qui manque). "Chemin introuvable".
J'ai fais des tests en console, et de toute façon ça ne me convient pas, car le programme doit se situer dans le dossier du batch avant de ne l'exécuter (sinon il y a des gros problèmes d'arborescence derrière).
Je pense qu'il est nécessaire d'utiliser SetCurrentDirectory et/ou ChDir.
J'ai donc rajouter ces deux lignes dans mon code :
Ton SetCurrentDirectory et ton ChDir font double emploi.
De plus une fois le ChDrive exécuté, plus besoin de préfixer les autres commandes avec Z:, c'est ton disque par défaut.
Ça plante là : Shell ("MonFichier.bat") - Chemin d'accès introuvable.
Et je croyais que SetCurrentDirectory était l'équivalent du ChDrive mais sur un réseau.
Ça craint, si je ne trouve pas la solution aujourd'hui, on va devoir installer des lecteur réseau spécifiques juste pour cela sur chaque postes du service.
Edit : J'ai testé plein de trucs et maintenant ça plante à un autre endroit -.-
ChDrive ("Z:") - Périphérique non disponible (alors qu'aucun lecteur existant ne porte ce nom)
Edit 2 : Ah bah ça ne le fait plus. Décidément je ne comprends pas tout. Sinon toujours le même problème : si je crée moi même le lecteur à la main ça fonctionne, sinon ça plante sur la ligne du .bat avec "Chemin introuvable".
Maintenant ça marche presque ! En fait j'ai rajouté des doubles quotes autour de ma variable path avec Chr(34). Je pense que c'est à cause de certains noms de dossier qui contiennent des espaces que ça plantait.
Il y a un néanmoins un petit soucis. Le shell qui appelle le .bat est appelé trop rapidement après la création du lecteur réseau, ce qui fait que ça plante. Dans mon cas j'ai beaucoup de calculs entre les deux, donc je n'ai pas ce problème, mais je tiens quand même à le souligner.
Il me reste quand même une question. Comment déconnecter le lecteur réseau que l'on vient de créer ?
Merci 😀
Edit : Résolu. J'ai rajouté Net Use Z: /delete /YES
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD