Plusieurs commande dans un shell est ce possible? [Résolu]

fred2567 42 Messages postés mardi 1 août 2006Date d'inscription 31 janvier 2008 Dernière intervention - 5 déc. 2007 à 09:02 - Dernière réponse : fred2567 42 Messages postés mardi 1 août 2006Date d'inscription 31 janvier 2008 Dernière intervention
- 5 déc. 2007 à 12:54
Bonjour,

donc voila j'ai une application en vba qui permet de gérer l'adressage ip de la machine,
or lorsque j'utilise mes commandes avec shell j'ai l'impression que la première finie les  autres ne sont pas prises en comptes
donc j'ailmerai passer plusieurs commandes dans un shell .

est ce possible et si oui comment ?
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
fred2567 42 Messages postés mardi 1 août 2006Date d'inscription 31 janvier 2008 Dernière intervention - 5 déc. 2007 à 12:54
3
Merci
bon j'ai trouvé un code simple pour exécuter les commandes shell les unes après les autres :

Sub

ShellAndWait(
ByVal action
As
String)

Dim wshShellwshShell = CreateObject(

"WScript.Shell")wshShell.Run(action, 0,

True)MsgBox(

"Fin")wshShell =

Nothing

End
Sub

la variable action est une chaine de caractère ou l'on retrouve ma commande ex : netsh interface ip set DNS name="maconnexion" source=dhcp"

Merci fred2567 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de fred2567
pneau 258 Messages postés mercredi 21 avril 2004Date d'inscription 27 octobre 2010 Dernière intervention - 5 déc. 2007 à 09:42
0
Merci
salut
tu exécutes la commande Shell c'est bien cela ?
le pb de cette commande c'est qu'elle va rendre la main à l'application appellante aussitot, sans attendre la fin de l'exécution
ce qui fait que tes commandes suivantes vont être lancées aussitot.
donc si elles ont besoin des éléments du résultat de la premiere instruction, il se peut que celle ci ne soit pas terminée donc on a l'impression qu'elles ne se font pas.
ex :
si je fais
shell ("Dir C:\*.* /s > c:\result.txt")
Shell ("Copy C:\result.txt c:\savresult.txt")

les 2 instructions vont être exécutées à la suite... la seconde (qui dépend du résultat de la premiere) va être exécutée alors que la premiere n'est peut être pas terminée.

par contre, tu ne vas pas pouvoir mettre les 2 instructions ensemble dans le shell.
le mieux est de lancer tes commandes shell avec la fonction suivante... (par contre, je ne l'ai pas testée en VBA)
Public Type STARTUPINFO
   cb As Long
   lpReserved As String
   lpDesktop As String
   lpTitle As String
   dwX As Long
   dwY As Long
   dwXSize As Long
   dwYSize As Long
   dwXCountChars As Long
   dwYCountChars As Long
   dwFillAttribute As Long
   dwFlags As Long
   wShowWindow As Integer
   cbReserved2 As Integer
   lpReserved2 As Long
   hStdInput As Long
   hStdOutput As Long
   hStdError As Long
End Type
     
Public Type PROCESS_INFORMATION
   hProcess As Long
   hThread As Long
   dwProcessID As Long
   dwThreadID As Long
End Type


Public Const NORMAL_PRIORITY_CLASS = &H20&
Public Const INFINITE = -1&
Public Const CREATE_NO_WINDOW = &H8000000

Public Declare Function WaitForSingleObject Lib "KERNEL32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function CreateProcessA Lib "KERNEL32" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As String, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Public Declare Function CloseHandle Lib "KERNEL32" (ByVal hObject As Long) As Long
Public Declare Function GetExitCodeProcess Lib "KERNEL32" (ByVal hProcess As Long, lpExitCode As Long) As Long

Public Function ExecCmd(CmdLine As String) As Long
Dim lretour As Long
   'Procédure qui permet de lancer une commande (équivalent au shell)
   'mais ne rend la main que lorsque cette commande est terminée
   Dim proc As PROCESS_INFORMATION
   Dim start As STARTUPINFO
   Dim ReturnValue As Integer
   ' Initialisation
   start.cb = Len(start)
   ' Lancement de la commande
   ReturnValue = CreateProcessA(vbNullString, CmdLine, 0, 0, 1, NORMAL_PRIORITY_CLASS + CREATE_NO_WINDOW, 0, vbNullString, start, proc)
   ' Attente que l'exécution de la commande se termine
   'Do
      ReturnValue = WaitForSingleObject(proc.hProcess, INFINITE)
   '   DoEvents
   'Loop Until ReturnValue <> 258
   lretour = GetExitCodeProcess(proc.hProcess, lCodeRetour)
   ReturnValue = CloseHandle(proc.hProcess)
   ExecCmd = lCodeRetour
End Function

en espérant t'avoir aidé un peu...
cordialement

Pat

 Don't Worry , Be Happy





<hr />
lorsque le problème est résolu, pensez Réponse Acceptée
Commenter la réponse de pneau
fred2567 42 Messages postés mardi 1 août 2006Date d'inscription 31 janvier 2008 Dernière intervention - 5 déc. 2007 à 11:07
0
Merci
J'ai pas pu le tester pour l'instant et j'ai une question concernant la variable lcoderetour qui n'es pas déclarée ni incrémenté
peut tu m'éclairer?
Commenter la réponse de fred2567
fred2567 42 Messages postés mardi 1 août 2006Date d'inscription 31 janvier 2008 Dernière intervention - 5 déc. 2007 à 11:09
0
Merci
ok le pb doit venir que tu ai traduit returnvalue en lcoderetour non?
Commenter la réponse de fred2567
pneau 258 Messages postés mercredi 21 avril 2004Date d'inscription 27 octobre 2010 Dernière intervention - 5 déc. 2007 à 11:17
0
Merci
excuses, j'ai fait un copié collé sans tout prendre dans mon code...

NOn, returnValue contient la valeur de résultat de la fonction exécutée
lcoderetour permet de récupérer le code de sortie de l'application appellée.
si tu n'attends aucun code de sortie particulier, tu n'en n'as pas besoin.
n'hésites pas si besoin...
@+
Pat
Commenter la réponse de pneau
fred2567 42 Messages postés mardi 1 août 2006Date d'inscription 31 janvier 2008 Dernière intervention - 5 déc. 2007 à 11:18
0
Merci
De plus la variable start n'as pas de valeur au lancement de la fonction
Commenter la réponse de fred2567
fred2567 42 Messages postés mardi 1 août 2006Date d'inscription 31 janvier 2008 Dernière intervention - 5 déc. 2007 à 11:53
0
Merci
Peut tu me redonner le code en complet?
Commenter la réponse de fred2567
pneau 258 Messages postés mercredi 21 avril 2004Date d'inscription 27 octobre 2010 Dernière intervention - 5 déc. 2007 à 12:02
0
Merci
tu l'as....
normalement il y a tout...
mais bon tu peux aussi prendre ce code chez MS...
http://support.microsoft.com/kb/129796

@+
Pat
Commenter la réponse de pneau

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.