[Résolu] VBA - Un batch qui ne s'ouvre pas

Croonical

XLDnaute Nouveau
Bonjour à tous !

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.

Cordialement,
Cro.
 
Dernière édition:

jmps

Nous a quitté
Repose en paix
Re : VBA - Un batch qui ne s'ouvre pas

Bonjour,

Bienvenue sur le forum.

As-tu essayé en faisant un "net use" plutôt qu'en utilisant le chemin UNC ?
Je sais que dans certains cas, le chemin UNC pose problème.
 

Staple1600

XLDnaute Barbatruc
Re : VBA - Un batch qui ne s'ouvre pas

Bonsoir et bienvenue itou

C'est extrêmement rare que je vienne poster un problème sur un forum
Faut pas avoir peur de le faire ;)

Le forum est là pour cela:

poser des questions, les lire, et y répondre si possible.

Ps: à ta place, j'utiliserai un script VBscript plutôt qu'un batch.
Mais ce n'est que mon avis.
 

Croonical

XLDnaute Nouveau
Re : VBA - Un batch qui ne s'ouvre pas

Merci de vos réponses.

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

Encore merci de votre aide :)
 

jmps

Nous a quitté
Repose en paix
Re : VBA - Un batch qui ne s'ouvre pas

Bonsoir,

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.
 

Staple1600

XLDnaute Barbatruc
Re : VBA - Un batch qui ne s'ouvre pas

Re

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.

Maintenant c'est une affaire de gout.
 
Dernière édition:

jmps

Nous a quitté
Repose en paix
Re : VBA - Un batch qui ne s'ouvre pas

Re


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.

Maintenant c'est une affaire de gout.

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.
 

Staple1600

XLDnaute Barbatruc
Re : VBA - Un batch qui ne s'ouvre pas

Re

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 :eek:
(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.
 
Dernière édition:

Croonical

XLDnaute Nouveau
Re : VBA - Un batch qui ne s'ouvre pas

Bonjour bonjour !

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 :

Code:
Shell ("Net Use Z: " & path)
    SetCurrentDirectory ("Z:\EnvoiFTP")
    ChDir ("Z:\EnvoiFTP")
    Shell ("MonFichier.bat")

Seulement ça ne marche pas.
Mais presque !

Si je saisis en console moi-même, et avant que la macro ne démarre :
Code:
Net Use Z: "\\chemin\réseau\etc" (équivalent à ma variable path)
Un lecteur se crée bien, et la macro fonctionne bien.


Une idée ?
:)


PS : j'utilise le batch pour justement avoir le terminal qui s'ouvre et ainsi récupérer les sorties du programme java :)
 

jmps

Nous a quitté
Repose en paix
Re : VBA - Un batch qui ne s'ouvre pas

Peut-être comme ça :
Code:
Shell ("Net Use Z: " & path)
ChDrive ("Z:")
    SetCurrentDirectory ("Z:\EnvoiFTP")
    ChDir ("Z:\EnvoiFTP")
    Shell ("MonFichier.bat")
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.
 

Croonical

XLDnaute Nouveau
Re : VBA - Un batch qui ne s'ouvre pas

Non :(

Ç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".
 
Dernière édition:

Croonical

XLDnaute Nouveau
Re : VBA - Un batch qui ne s'ouvre pas

Bonne nouvelle !

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 :D


Edit : Résolu. J'ai rajouté Net Use Z: /delete /YES

Merci beaucoup !
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 489
Messages
2 110 136
Membres
110 684
dernier inscrit
kihel