Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA : Contrôle de la fonction shell

  • Initiateur de la discussion Initiateur de la discussion pascal_bidouille
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

pascal_bidouille

Guest
Bonjour,

J'utilise la fonction shell pour lancer un traitement erxterne dans une macro excel. Style :
Code:
str1 = Shell("monprogramme.exe", vbNormalFocus)

Le progremme se lance normalement mais je voudrai pouvoir attendre la fin de celui-ci avant de continuer ma macro.

Quelqu'un sait comment faire cela ?

Merci
 
Re : VBA : Contrôle de la fonction shell

Le Problème est que le programme que je lance demande des actions de l'utilisateur.
Du coup le temps peut être très variable.
Y a pas une fonction pour attendre la fin du process ou un truc du genre.
 
Re : VBA : Contrôle de la fonction shell

Bonjour Pascal Bidouille, Catrice 🙂,
Il y a certainement plus simple, mais si j'ai bien compris, tu souhaites que la suite de ta macro s'exécute que losqu'Excel reprends le focus. Tu peux boucler sur la pause proposée par Catrice
Code:
Public Drapeau As Boolean
Sub Test()
' ...
Drapeau = False
Do While Drapeau = False
Application.Wait (Now + TimeValue("0:00:10"))
DoEvents
Loop
'...
End Sub
et basculer le drapeau à l'activation d'Excel
Code:
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
Drapeau = True
End Sub
Bon courage 😎
 
Re : VBA : Contrôle de la fonction shell

Re,

Malheureusement, je ne crois pas.
L'aide dit ceci :

Note Par défaut, la fonction Shell exécute les autres programmes de manière asynchrone. Cela signifie qu'un programme lancé avec Shell peut ne pas s'exécuter entièrement avant que les instructions suivant la fonction Shell ne soient exécutées.

Il faudrait que le programme dans lequel sont les utilisateur puisse informer Excel que c'est fini.
 
Re : VBA : Contrôle de la fonction shell

bonjour tout le monde
je viens de faire un essai le programme lancé (la calculatrice) fonctionne tout de suite et de manière indépendante...
je suis aussi prôneur de la solution si elle existe...
d'avance merci à ceux qui cherche..
 
Re : VBA : Contrôle de la fonction shell

Salut,

J'ai finalement trouvé en continuant à fouiller le net :

Code:
Private Declare Function WaitForSingleObject Lib "kernel32" _
   (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" _
   (ByVal hObject As Long) As Long
   
Private Declare Function OpenProcess Lib "kernel32" _
   (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
    ByVal dwProcessId As Long) As Long


Private Const INFINITE = -1&
Private Const SYNCHRONIZE = &H100000

Private Sub Command1_Click()
    Dim iTask As Long, ret As Long, pHandle As Long
    iTask = Shell("notepad.exe", vbNormalFocus)
    pHandle = OpenProcess(SYNCHRONIZE, False, iTask)
    ret = WaitForSingleObject(pHandle, INFINITE)
    ret = CloseHandle(pHandle)
    MsgBox "Process Finished! Thank you"
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

H
Réponses
2
Affichages
686
Hoooodini
H
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…