Attendre fin execution d'un programme DOS

Signaler
Messages postés
35
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
5 juin 2008
-
lamquin
Messages postés
35
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
5 juin 2008
-
Bonjour,

Je voudrais savoir comment ma macro peut détecter la fin d'éxécution d'un programme externe .exe?
je lance cet .exe depuis ma macro par la commande shell, il génére un fichier résultat, et la macro doit attendre ce fichier avant de poursuivre son éxécution. Cet exe est une fenêtre DOS.
je me débrouille en faisant un sleep de la macro pendant un certain nombre de seconde mais c'est pas très propre...
j'ai pensé détecter le nom de la command prompt et voir quand celle ci disparait des fenêtres active mais je sais pas comment faire?

Merci de votre aide!!!

15 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
quel environnement utilises tu ?

VB6
VBA
VbScript
Messages postés
35
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
5 juin 2008

c'est du visual basic pour excel....
t'as une idée?
j'ai fais un tour sur le forum et on parle de shellexecuteex ou waitforsingleobject mais je suis perdu!! aide moi stp!!
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
La fonction shell renvoie le task id du prog que tu lances, personellement j'ai jamais utilisé, (je pense que c'est pas la handle) mais tu devrais pouvoir trouver une fonction utilisant ce paramètre, et lorsque la fonction te renvoie 0 ou une erreur, c'est que le prog est terminé... Cherche du coté de ce task id...

dim h as double
h=shell(...)
while LaFonctionATrouver(h)<>0
doevents
wend
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
en gros, c'est effectivement cela...

http://www.vbfrance.com/code.aspx?ID=34867



Il te suffit d'ajouter le module dans ta feuille Excel, et d'appeler la fonction ExecCmd

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
35
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
5 juin 2008

OK les gars!! je suis pas une star de vb alors allez y doucement svp:Mon prog est dans D:\TBRG\TBRG.exe.


Reynald, dans le lien que tu as envoyés, où dois je intégrer le chemin de mon application? dans quelle ligne du code?


Merci de votre soutien!
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
euh....
tu as juste a ajouter le module dans ton classeur...

(dans l'editeur VBA : Alt + F11)

ensuite, tu fait appel à :

ExecCmd "D:\TBRG\TBRG.exe"

dans ton code, en lieu et place du Shell "D:\TBRG\TBRG.exe"
Messages postés
35
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
5 juin 2008

ok je viens de faire ce que tu m'as dis mais il me met un message d'erreur comme quoi "le type défini par l'utilisateur est non défini ". il met l'erreu sur les 3 premiere lignes (dim Proc as Process_information,etc...) où je déclare les variables?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
télécharge le Zip, les declarations d'API ne sont pas dans l'apercu du code

process_information est un type, déclaré dans le module, dans le Zip
Messages postés
35
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
5 juin 2008

j'ai copié les lignes de code de modApi.bas dans un nouveau module module, j'ai bien remplacé Shell "D:\TBRG\TBRG.exe par ExecCmd "D:\TBRG\TBRG de la macro, et j'obtient le message "objet requis" sur la ligne if createprocessA de la fonction ExecCmd?

Désolé de rien comprendre...
merci de ta patience...
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
à cause du App.Path, que j'ai laissé, dsl ^^



enlève le, et met ""

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
35
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
5 juin 2008

OK ya plus d'erreu mais l'éxécutable ne se lance pas, j'ai essayé de faire un pas à pas et il ne rentre pas dans la boucle if createprocess, il passe directement à else?
le ExecCmd devrait lancer le prog non?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
si l'executable est bien où indiqué, oui
Messages postés
35
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
5 juin 2008

comment t'explique qu'il ne rentre pas dans la boucle?
tu peux tester?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
Ca fonctionne chez moi, sous Excel...
seule explication, ton exe n'est pas au bon endroit...

ca fonctionne, si tu execute "Calc.exe" ??
Messages postés
35
Date d'inscription
vendredi 18 novembre 2005
Statut
Membre
Dernière intervention
5 juin 2008

Non même avec "Calc.exe" rien ne se passe?
ça ne m'ouvre même pas la calculatrice?