Voui, c'est normal, un .bat est exécuté via l'interpréteur de commande cmd (ou command.com pour les anciennes versions).
Je te propose ça :
Dim R As Double
Dim Str As String
Str = "cmd /C " + Chr(34) + "dir /s c:" + Chr(34)
R = Shell(Str, 6)
MsgBox R
While True
On Error GoTo Fin:
AppActivate R
Wend
Fin:
MsgBox "fini"
En gros, ça lance la commande dir via l'interpréteur de commande cmd, dès que la commande est finie on ferme la fenêtre (paramètre /C de cmd).
Mais comme la commande est lancée en asynchrone, VBA exécutera la commande suivante avant que le dir ne soit terminé, il faut donc tester si la commande dir est encore en machine, pour cela, on essaie de l'activer avec la commande appactivate et son numéro de lancement, nommé R.
Tant qu'on a pas d'erreur, c'est qu'elle active, quand on a une erreur (on ne peut pas activer la fenêtre), c'est que c'est fini (mais on ne sait pas comment : ok ou en erreur).
Ca irait ?
A+ Blux "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"