Problème pour passer des paramètres à la fonction shell de VBA

NirtiMareti

XLDnaute Nouveau
Bonjour à tous,

Tout d'abord je m'excuse si je ne suis pas dans la bonne section, c'est mon tout premier post sur ce forum ^^

Je vous expose mon problème, j'ai une macro vba qui a un moment exécute la commande Shell afin qu'elle exécute à son tour un fichier .bat :
Shell (ThisWorkbook.Path & "\fichier.bat " & "toto")

Le .bat doit simplement créer un fichier texte du nom du paramètre passé:
echo %1>%1.txt
pause


Le problème, a l'exécution rien n'est fait, alors que si le .bat est lancé manuellement ou sans paramètre (donc par exemple avec un simple echo toto.txt), tout fonctionne très bien...:confused:

Quelqu'un aurait-il une idée du problème ?
 

NirtiMareti

XLDnaute Nouveau
Re : Problème pour passer des paramètres à la fonction shell de VBA

Bonjour,

J'ai testé les 2 lignes de codes mais le problème est que après la virgule pour la fonction shell, vb attend un paramètre concernant la taille de la fenetre de commande ouverte :/
 

MJ13

XLDnaute Barbatruc
Re : Problème pour passer des paramètres à la fonction shell de VBA

Bonjour NirtiMareti, Hippolite

Tu peux créer ton fichier .txt directement en VBA.

Exemple:

Code:
Open "c:\Toto.txt" For Output As #1
close
 

8pafpaf8

XLDnaute Nouveau
Re : Problème pour passer des paramètres à la fonction shell de VBA

Bonjour à tous, je pense que le problème n'est pas pour créer un fichier mais bien pour passer les paramètres.

Si c'est bien le cas, voici une solution que je viens de tester et qui fonctionne :

Code:
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Sub test()
ThisWorkbook.Activate
Dim retour
retour = ShellExecute(0, "open", ThisWorkbook.Path & "\test_bat.bat", "titi tata tutu", vbNull, 0)
End Sub
 

tototiti2008

XLDnaute Barbatruc
Re : Problème pour passer des paramètres à la fonction shell de VBA

Bonjour à tous,

Personnellement, je n'ai pas de soucis à faire fonctionner

Code:
Rep = Shell (ThisWorkbook.Path & "\fichier.bat toto")
ça m'écrit bien dans le fichier toto.txt, s'il existe et qu'il est au même emplacement que le fichier .bat
 

NirtiMareti

XLDnaute Nouveau
Re : Problème pour passer des paramètres à la fonction shell de VBA

Bonjour/Re,

Ton code écrit quelque chose dans le fichier toto.txt, qui est un fichier texte déjà existant ?

Parce que si c'est le cas, mon fichier .bat a pour but de créer le fichier toto.txt en question, pas d'écrire dessus ^^
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Problème pour passer des paramètres à la fonction shell de VBA

Bonjour,

Moi, à ta place, je ferais une recherche sur mon disque pour voir s'il n'y a pas un fichier toto.txt qui serait généré à un endroit improbable, car tu ne spécifie pas le chemin de toto.txt (mais je ne suis pas un spécialiste des .bat)
A moins que ça ne plante carrément chez toi ?
 

NirtiMareti

XLDnaute Nouveau
Re : Problème pour passer des paramètres à la fonction shell de VBA

Bonjour,

Avec mon collègue nous avions regardé déjà en plaçant la pause. La console de commande indiquait que le .bat créait les fichiers dans le répertoire Mes Documents tout simplement... mais jamais aucune trace de toto.txt ...

Peut-être un problème de version ou de paramétrage des versions (puisque ça ne fonctionnait pas non plus sur son poste)...
Je regarderai ça et viendrai vous informer si je trouve la raison du non-fonctionnement de la fonction shell...

En attendant ShellExecute fonctionne très bien et est une bonne alternative, peut-être même plus fiable.
 

Discussions similaires