IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Attendre la fin de l'exécution d'un shell


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Avatar de ouisansdoute
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    931
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 931
    Points : 1 079
    Points
    1 079
    Par défaut Attendre la fin de l'exécution d'un shell
    Bonjour,

    J'ai une macro qui au cours de son déroulement lance un shell. Celui-ci s'exécute plus ou moins rapidement (de quelques secondes à plusieurs minutes).
    Mon problème est que la macro continue de s'exécuter sans attendre la fin de l'exécution du shell.

    Comment interrompre son exécution jusqu'à l'exécution complète du shell ?

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 12
    Points : 21
    Points
    21
    Par défaut
    Pour l'exécution, la fonction Shell() est nécessaire.

    Pour l'attente, j'utiliserai les fonctions OpenProcess() et GetExitCodeProcess() de l'API Windows :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Declare Function OpenProcess Lib "kernel32" _
        (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
        ByVal dwProcessId As Long) As Long
    Private Declare Function GetExitCodeProcess Lib "kernel32" _
        (ByVal hProcess As Long, lpExitCode As Long) As Long
    Avec les constantes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Private Const PROCESS_QUERY_INFORMATION As Long = &H400
    Private Const STILL_ACTIVE As Long = &H103
    Voila l'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Dim lIDApp As Long
    Dim lPtrProcess As Long
    Dim lExitCode As Long
    Dim lResult As Long
     
      ' Exécution de l'application externe.
      lIDApp = Shell("c:\windows\system32\notepad.exe", 1)
     
      ' Récupère le Handle du processus de l'application externe.
      lPtrProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0&, lIDApp)
     
      ' Attend la fin de l'exécution du processus.
      Do
        lResult = GetExitCodeProcess(lPtrProcess , lExitCode)
        DoEvents
      Loop While lExitCode = STILL_ACTIVE

  3. #3
    Membre éprouvé
    Avatar de ouisansdoute
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    931
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 931
    Points : 1 079
    Points
    1 079
    Par défaut
    Merci pour ta réponse faves,

    Je vais essayer cette piste. Cependant, peux-tu m'expliquer la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Const PROCESS_QUERY_INFORMATION As Long = &H400
    Private Const STILL_ACTIVE As Long = &H103

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 12
    Points : 21
    Points
    21
    Par défaut
    c'est tout simplement des valeurs données en Hexadécimale.
    &HXXX avec XXX code Hexa
    Donc &H400(base 16) = 1024(base 10)

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour,

    (j'aime bien ...)

    Ce sont la les valeurs définiées par Windows pour correspondre à des états...

    C'est Windows qui a défini ces/ses valeurs ....
    On ne fait ici que s'y référer pour vérifier un état. On aurait pu donner n'importe quel autre nom à ces constantes, voire ne pas utiliser les constantes et utiliser directement leur valeur ===>> même résultat ... bien évidemment

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 12
    Points : 21
    Points
    21
    Par défaut
    C'est tout à fait cela..
    J'ai effectivement oublié d'expliquer l'utilité des constantes.

    Merci ucfoutu et bonjour (au passage).

Discussions similaires

  1. Attendre la fin d'un exécutable
    Par Jazys dans le forum Flex
    Réponses: 4
    Dernier message: 06/04/2010, 17h14
  2. Réponses: 11
    Dernier message: 26/06/2008, 22h41
  3. Attendre la fin de l'exécution d'une instruction?
    Par mhanyu dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 23/08/2007, 16h41
  4. Réponses: 7
    Dernier message: 18/07/2007, 16h40
  5. Attendre la fin d'exécution d'un page en JS
    Par TekP@f dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/08/2005, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo