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 avec application.run pour lancer une macro d'un autre classeur


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Juin 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 11
    Par défaut Problème avec application.run pour lancer une macro d'un autre classeur
    Bonjour à tous,

    Je vous fais part d'un problème avec Application.Run je pense. Je suis sous Windows7 et Excel2013.
    J'ai un fichier Excel nommé «TEST1.0.xlsm» et un autre nommé «OPEN-CLOSE_TEST.xlsm». Ces 2 fichiers sont pour l’exemple mais les vrais fichiers sont plus complexes mais représentatifs de ce que je cherche à faire.
    «TEST1.0.xlsm» possède plusieurs macros et c’est mon fichier de travail (Cf. codes ci dessous).
    A l’ouverture, ce fichier exécute normalement plusieurs macros (supprimées dans ce fichier test) et initialise une variable TESTFerm pour contrôler la fermeture du fichier. L’objectif est l’impossibilité de fermer avec la croix mais seulement avec un bouton (ici CommandButton1).
    Ce fichier fonctionne parfaitement!!
    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
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If TESTFerm = False Then
    Cancel = True
    End If
     
    If Workbooks.Count = 1 Then
    Application.Quit
    End If
     
    End Sub
     
    Private Sub Workbook_Open()
    TESTFerm = False
    Worksheets("Feuil1").CommandButton2.Caption = "TESTFerm =False"
    'Exécution de plusieurs macros spécifiques
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CommandButton1_Click()
    TESTFerm = True
    ThisWorkbook.Close (False)
    End Sub
    «OPEN-CLOSE_TEST.xlsm» doit permettre d’ouvrir le fichier «TEST1.0.xlsm», lancer les macros contenues dans «TEST1.0.xlsm» et refermer les 2 fichiers.
    Lorsque je lance «OPEN-CLOSE_TEST.xlsm», la procédure dans Workbook_Open se lance bien, TEST1.0.xlsm s’ouvre correctement. Il se referme avec la ligne: Application.Run"'TEST1.0.xlsm'!ModuleZ.zQUIT"
    Mais ensuite le code ne continue pas les 2 lignes suivantes et je ne comprends pas pourquoi. Il m’est nécessaire de refermer ce fichier «OPEN-CLOSE_TEST.xlsm» mais ça ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Workbooks.Count = 1 Then
    Application.Quit
    End If
    End Sub
     
    Private Sub Workbook_Open()
    Workbooks.Open ("O:\Manufacture\RD\Recherche\Laboratoires\Revetements\4 Projets Production\Winiar\Fichiers utiles pour Winiar\TEST_fichierVBS\TEST1.0.xlsm")
    Application.Run "'TEST1.0.xlsm'!ModuleZ.zQUIT"
    MsgBox "Run fait"
    ThisWorkbook.Close (False)
    End Sub
    Auriez-vous une idée pour m’aider? Je rappelle que l’objectif est que «OPEN-CLOSE_TEST.xlsm» puisse ouvrir, exécuter les macros présentes à l’ouverture de «TEST1.0.xlsm», referme «TEST1.0.xlsm» et puisse se fermer automatiquement (fermeture de «OPEN-CLOSE_TEST.xlsm»).
    Merci de votre aide
    Motmot

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une fois la macro appelée (Application.Run "'TEST1.0.xlsm'!ModuleZ.zQUIT") le compilateur est sur l'autre classeur et ne reviens plus sur le premier (enfin c'est ce que je pense). Essai de créer une macro de fermeture dans le premier classeur où tu mets ces deux lignes non exécutées que tu appelles depuis le second classeur avec Application.Run pour voir si tu reviens sur le premier enfin, c'est une piste. Faire aussi la manip avec F8 pour voir le comportement du compilateur !

  3. #3
    Membre habitué
    Inscrit en
    Juin 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 11
    Par défaut
    Hello,

    Merci pour la réponse! J'ai testé en mode pas à pas la macro à l'ouverture du fichier «OPEN-CLOSE_TEST.xlsm». En effet, tout se déroule bien jusqu'à Application.Run "'TEST1.0.xlsm'!ModuleZ.zQUIT". Cette dernière instruction est exécuté, le compilateur passe bien sur le classeur «TEST1.0.xlsm» et exécute correctement les instructions. Mais il ne revient pas sur le classeur «OPEN-CLOSE_TEST.xlsm», la macro s'arrête donc après Application.Run "'TEST1.0.xlsm'!ModuleZ.zQUIT" sans aucun message d'erreur et n'exécute pas 2 les dernières lignes.
    Si je supprime dans «TEST1.0.xlsm» la fermeture de «TEST1.0.xlsm» (auto-fermeture), tout fonctionne et la macro de Workbook_Open() du fichier «OPEN-CLOSE_TEST.xlsm» est complètement exécuté jusqu'au bout. Je pense que le problème vient de la fermeture du classeur appelé «TEST1.0.xlsm». Mais dans ce cas, comment faire si je ne veut pas rajouter de code dans ce classeur «TEST1.0.xlsm» et tout de même utiliser «OPEN-CLOSE_TEST.xlsm» pour ouvrir «TEST1.0.xlsm» et fermer ensuite les 2 fichiers. Une idée??

    Merci d'avance
    motmot

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Pas tout saisi, mais il semble que tu confondes ThisWorkbook (qui est le classeur de départ) avec ActiveWorkBook (qui est le classeur actif à un instant t)

  5. #5
    Membre habitué
    Inscrit en
    Juin 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 11
    Par défaut
    Hello

    Je ne pense pas confondre ThisWorkbook et ActiveWorkBook. Pour moi ThisWorkbook est lié au classeur qui contient le code et ActiveWorkbook le classeur actif.

    pour mieux expliquer ce que je veux faire:
    J'ai un classeur «TEST1.0.xlsm» (que je ne souhaite pas modifier) qui fait un code particulier à son ouverture. J'ai protégé sa fermeture (impossible de quitter avec la croix), il faut cliquer sur un bouton pour le fermer.
    Je voudrais utiliser un autre classeur «OPEN-CLOSE_TEST.xlsm» pour ouvrir «TEST1.0.xlsm», exécuter les macros programmées à l'ouverture de «TEST1.0.xlsm», fermer ensutie «TEST1.0.xlsm» et évidemment fermer aussi «OPEN-CLOSE_TEST.xlsm».

    Je ne sais si c'est plus clair! mon problème actuel est que j'arrive à ouvrir et à exécuter les macros de «TEST1.0.xlsm» puis fermer «TEST1.0.xlsm» depuis «OPEN-CLOSE_TEST.xlsm» mais impossible de refermer «OPEN-CLOSE_TEST.xlsm».

    Merci de votre aide
    motmot

  6. #6
    Membre habitué
    Inscrit en
    Juin 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 11
    Par défaut
    Hello,

    Bon j'ai trouvé une solution, ça me rajoute un fichier mais bon. Je m'explique si jamais ça intéresse quelqu'un:
    Je crée un nouveau fichier vbs : "TEST.vbs" et dans celui-ci j'ouvre automatiquement le fichier «OPEN-CLOSE_TEST.xlsm» (celui-ci ouvre et ferme le fichier «TEST1.0.xlsm») et je ferme ensuite «OPEN-CLOSE_TEST.xlsm» depuis le vbs. Et maintenant ça marche. Voici le code vbs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim AppExcel 
    Dim Claxl
     
    Set AppExcel = CreateObject("Excel.Application") 
    AppExcel.Visible = False 
     
    Set Claxl = AppExcel.Workbooks.Open("C:\..\OPEN-CLOSE_TEST.xlsm") 
     
    Claxl.close False
    Set Claxl = Nothing 
    Set AppExcel = Nothing
    WScript.Quit
    Le problème n'est pas entièrement résolu car je ne comprends pas pourquoi mon code original ne marche pas mais au moins juste avec un fichier vbs, j'arrive à faire ce que je veux.

    Si vous avez des idées ou des conseils, n'hésitez pas!
    Merci

    Ciao
    motmot

Discussions similaires

  1. [XL-2010] Problème pour lancer une macro complémentaire via un bouton
    Par Dncky dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/12/2015, 18h46
  2. Réponses: 8
    Dernier message: 06/03/2015, 18h15
  3. Réponses: 18
    Dernier message: 18/11/2013, 10h50
  4. [XL-2010] Problème pour lancer une macro-commande à partir d'un bouton
    Par viper37 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/07/2011, 19h34
  5. Problème pour lancer une macro dans Excel
    Par jujuf1 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 29/12/2008, 16h32

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