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 :

Problème Macro Shell


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 233
    Par défaut Problème Macro Shell
    Bonjour,
    J'utilise une macro qui lance un fichier .bat sur un serveur.
    Il marche très bien sur certaines machines mais pas sur la mienne équipé d'excel 2002 SP3 et sur celles de 2 collègues qui ont la version 2007.

    Voici le code mais je ne suis pas sûr que ça vienne de là...
    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
    18
    19
    20
    21
    22
    23
     
    Option Explicit
     Const sChemin = "H:\Création\z_systeme - pas supprimer" 'Où sont situés les .bat et .txt pour les mails
     
    Private Sub CommandButton1_Click()
        Dim sYourCommand, filename As String
        Dim test As Integer
     
        filename = sChemin & "\corpsTous.txt"
        Open filename For Output As #1    ' Ouvre le fichier en écriture
     
        Print #1, "Le fichier " & ThisWorkbook.Name & "du répertoire " & ThisWorkbook.Path & " a été validé par le Service Commercial. Pouvez vous mettre en oeuvre les moyens nécessaires à la création de ces produits dans vos services." 'Contenu du .txt
        Close #1
     
        ChDir sChemin 'Placement dossier contenant .bat pour appel cmd
     
        sYourCommand = "envoiMailTous.bat"
        test = Shell("cmd /k " & sYourCommand, 0) 'Appel commande, renvoi nombre aléatoire ?
        If test > 0 Then ' si executé
            MsgBox "Tous les services ont été prévenus de l'avancement de la validation."
        End If
     
    End Sub
    Comment faire pour exécuter le fichier? est-ce la bonne méthode? D'où vient le problème à votre avis?
    Merci d'avance pour votre aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Bonjour,

    Il faut faire attention avec la fonction Shell car elle n'est pas synchrone. Ceci signifie que la macro ne s'arrête pas sur l'instruction Shell en attendant que la commande se termine.

    La fonction Shell ne fait que lancer la commande et la macro continue son exécution, donc il se peut que l'instruction "Msgbox" s'exécute même si l'exécution du .bat n'est pas terminée.

    Le résultat est souvent aléatoire...

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 233
    Par défaut
    houlala...
    Et que faut-il faire pour une solution plus stable?
    Que me conseillez vous pour exécutez ce .bat??
    Merci d'avance pour vos infos

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    Je vois 2 solutions:

    1/ La plus simple:

    Je ne sais pas ce que vous avez dans votre .bat mais il faudrait créer un fichier bidon à la fin de la commande dont vous testez l'existence dans la macro après la commande Shell.

    Pour tester l'existence pendant l'exécution du .bat vous faites une boucle du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    While Dir("fichier_bidon.txt") = ""
          Application.Wait (un certain temps)
    End While
    Je sais que l'instruction Application.Wait existe dans Excel mais je ne l'ai jamais utilisée. J'ai toujours utilisé la fonction Sleep de l'API Windows.


    2/ Utilisez la procédure ExecCmd (à base de fonctions de l'API Windows, donc un peu complexe) du module fourni en PJ. Cette procédure est à peu près équivalente à Shell mais elle est synchrone (bloque la macro tant que la commande n'est pas terminée). Remplacez la ligne du Shell par l'appel suivant adapté à votre exemple:

    Remarques:
    1/ ExecCmd ne récupère pas de code retour d'exécution du .bat
    2/ Je ne sais pas ce que ça donne avec Excel 2007

    Commencez par la tester avec des .bat pas trop long en exécution.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 233
    Par défaut
    D'accord mais il n'y pas plus simple pour juste lancer mon .bat qui contient déjà les lignes de commande?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Par défaut
    En terme d'actions que vous devez faire, la solution la plus simple est la 2ème solution puisque la procédure ExecCmd est déjà écrite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème commande shell compilation auto
    Par ludovic85 dans le forum C#
    Réponses: 1
    Dernier message: 07/02/2007, 12h28
  2. Problème commandes shell-trop d'arguments
    Par SuperCed dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 22/12/2006, 12h57
  3. Problème avec SHELL
    Par Jasgui dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 19/09/2006, 19h14
  4. [VBA-E] Problème macro excel
    Par pontus21 dans le forum Macros et VBA Excel
    Réponses: 32
    Dernier message: 19/05/2006, 18h38
  5. []Problème de SHELL
    Par laurentfrancis dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/10/2005, 19h41

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