[Résolu] VBA dans excel pour lancer deux lignes de commandes DOS

VBA dans excel pour lancer deux lignes de commandes DOS [Résolu] - VB/VBA/VBS - Programmation

Marsh Posté le 19-12-2006 à 18:19:36    

Salut à tous,  
 
Premier message sur le forum  :sweat:  
 
Je vais essayer d'être clair, j'ai pas trouvé de question similaire à la mienne. J'ai un fichier excel, avec dans une cellule le chemin vers un répertoire, et dans une autre un chemin vers un programme. Ces deux cellules sont modifiables et donc potentiellement différentes chez l'utilisateur.  
 
en C10 j'ai C:\My Documents\30. yyy\
en C12 j'ai c:\program files\xxx22.3\xxx.exe
 
Je dois en fait passer ces deux lignes avec du texte en plus vers une fenetre DOS depuis excel. Du style  
 

cd "C:\My Documents\30. yyy\"
"c:\program files\xxx22.3\xxx.exe" "C:\My Documents\30. yyy\blabla.gms" wkdir="C:\My Documents\30. yyy\"


 
J'ai essayé avec un shell, et un retour à la ligne après le cd "C:\My Documents\30. yyy\" Chr(13) ou Chr(10) ou Chr(13) & Chr(10) puis ma deuxième ligne, mais ca n'a pas l'ai de passer en DOS. Pourtant quand je visualise le truc par un MsgBox, c'est exactement ce que je voudrai qui apparaisse en DOS.  
 
Pour le moment, je me dis que je passe mes deux lignes vers un fichier texte, que je renomme en .bat, et je lance le .bat depuis mon code vba. Ca à l'air de fonctionner, mais le fait de créer un fichier supplémentaire ne m'excite pas trop. Est-ce qu'il y aurait moyen de lancer les deux lignes de commande DOS directement depuis un code vba pour excel ?  
 
Evidement dans le code final, je n'aurais pas "C:\My Documents\30. yyy\" coder en dur mais une référence à la cellule où le chemin se trouve...  
 
Merci pour toute aide éventuelle  :hello:


Message édité par stresslab le 20-04-2007 à 16:12:11
Reply

Marsh Posté le 19-12-2006 à 18:19:36   

Reply

Marsh Posté le 19-12-2006 à 22:16:01    

Eh non, l'interpreteur de commande du DOS ne permet pas de traiter plusieurs instructions à la fois. Donc, il faut passer par un fichier .bat intermédiaire.

Reply

Marsh Posté le 20-12-2006 à 09:54:52    

:cry: merci quand même pour la réponse

Reply

Marsh Posté le 29-12-2006 à 18:12:31    

En fait en faisait un  
 
ChDir ("C:\My Documents\30. yyy\" ) dans mon code vba avant de lancer ma commande shell,  
 
ca m'a fait l'équivelant d'un cd "C:\My Documents\30. yyy\"  en DOS, donc plus besoin de ma premiere ligne, donc ca roule pour mon shell  :)

Reply

Marsh Posté le 19-04-2007 à 21:43:13    

Désolé, je déterre mon propre post, mais finalement j'ai besoin de passer par un .bat intermédiaire dans ma macro excel. J'ai toujours le même problème, à savoir faire un cd c:\trukchmut avant de lancer une autre commande à la ligne suivante.  
 
Je suis toujours aussi nul en programmation, donc je tente l'exemple sur le site de microsoft  
 

Open "TESTFILE" For Output As #1    ' Open file for output.
Write #1, "Hello World"
Close #1    ' Close file  


 
Le problème, c'est que dans mon testfile, j'ai un "Hello World" alors que je voudrai juste un hello world (sans le guillement au début et la fin donc  :sweat: ) car DOS ne comprend pas mon CD si j'ai des " en début de ligne...  
 
Est-ce qu'une bonne âme pourrait me diriger vers un moyen d'exporter du texte "brute" dans un fichier texte sans avoir des guillement en début et en fin de ligne ? Ou en d'autre mot, quelqu'un saurait me dire comment faire un fichier .bat  :whistle: ?
 
Un grand merci  

Reply

Marsh Posté le 20-04-2007 à 12:22:03    

Bonjour,
je te communique ma commande de sauvegarde ( non commentée), qui peut t'aider à faire ta procédure . Elle fonctionne.  
Les guillemets sont nécessaires sous dos pour traiter le répertoires contenant des espaces.
 
Private Sub Commande2_Click()
Open "c:\totoasup.bat" For Output As #1
 
dossiercourt = "N:\ESSAIdu" & Format(Date, "ddmmyyyy" ) & "a" & Format(Time, "hhmm" )
unespace = " "
quot = """"
 
cible1 = dossiercourt & "\mes documents"
cible2 = dossiercourt
 
origine1 = "%homepath%\mes documents"
origine2 = "%homepath%\local settings\application data\identities"
origine3 = "%homepath%\application data\microsoft\address book\*.wab"
 
 
 
Print #1, "md"; unespace; quot; cible1; quot
Print #1, "xcopy"; unespace; quot; origine1; quot; unespace; quot; cible1; quot; " /s"
 
Print #1, "xcopy"; unespace; quot; origine2; quot; unespace; quot; cible2; quot; " /s /h /r /y /k"
 
Print #1, "xcopy"; unespace; quot; origine3; quot; unespace; quot; cible2; quot; " /s /h /r /y /k"
 
Print #1, "pause 'aaa'"
 
Close #1
 
ret = Shell("c:\totoasup.bat", 1)
 
Application.Quit
End sub
Cordialement


Message édité par seniorpapou le 20-04-2007 à 12:23:11
Reply

Marsh Posté le 20-04-2007 à 16:11:48    

Merci beaucoup, il me fallait donc un print #1, ... au lieu d'un write #1, ...  
 
Merci  :jap:


Message édité par stresslab le 20-04-2007 à 16:12:35
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed