Lancer macro d'un autre classeur

Anonyme
2011-07-13T03:39:46+00:00

Bonjour,

Je souhaite lancer une macro d'un autre classeur. J'utilise le code ici-bas. je crois que mon probléme esy dû au fait que l'autre classeur...qui est ouvert...est une variable définie auparavant. (Var_NomFichier). J'ai cherché mais en vain. Comment réussir?

Merci à l'avance.

If Workbooks(Var_NomFichier).Sheets("Validations").Range("CN_MenuLangue").Value = 2 Then

Application.Run Workbooks(Var_NomFichier).Name & "!Pro_INTERFACEFR"

End If

Microsoft 365 et Office | Excel | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire
Réponse acceptée par l’auteur de la question
Anonyme
2011-07-13T09:40:44+00:00

Bonjour,

Excuter une macro d'un autre classeur:

A )

Nom de la macro : "test1"

Si ton classeur est fermé et que la macro appelée se retrouve dans un module standard :

Application.Run "'C:\Mes documents\Answer.xls'!test1"

Même chose, mais si le classeur est dj ouvert :

Application.Run "Answer.xls!test1"

B ) Si le nom de ton classeur contient des espaces :

L'utilisation des apostrophes simples "'" permet d'utiliser

un nom de classeur contenant des espaces , sans

ces dernières, point de salut.

Dim LaMacro As String

LaMacro = "'" & Workbooks("NomDuClasseur.xls") & "'!test1"

Application.Run LaMacro

C) Si la macro appelée est dans un module feuille du classeur au lieu d'être dans un module Standard :

Dans la ligne de commande, tu dois insérer le nom de l'objet "Feuille" que tu retrouves dans la fenêtre VBE (visual basic editor).

Dans la fenêtre de gauche de ton projet, la liste des feuilles est affichée dans ce format : "toto"("Feuil4")

toto = Nom de l'onglet de la feuille

Feuil4 = Proprit Name de l'objet Feuille (worksheet)

Dans la commande suivante, tu dois utiliser le nom de la feuille et non de l'onglet de la feuille

Si le fichier est ouvert :

Application.Run "modele.xls!Feuil4.test1"

Si le fichier est ferme :

Application.Run "'C:\Mes documents\Answer.xls'!Feuil4.test1"

Cette réponse a-t-elle été utile ?

9 personnes ont trouvé cette réponse utile.
0 commentaires Aucun commentaire

29 réponses supplémentaires

  1. Anonyme
    2013-11-08T15:05:22+00:00

    Merci de bien vouloir m'aider. C'est toujours grandement apprécié.

    Sauf que j'ai le sentiment que je ne peux faire ce dont vous me proposez J'ai aussi d'autres On error... On Error goto NextStep...par exemple...qui bypass...plusieurs lignes de codes.  À moins que je comprenne mal je crois que je dois contrôler tout cela.

    C'est aussi la raison pour laquelle je vous demandais si je dois remettre alors la ligne de code On Error GoTo GestionErreur...car je croirais alors que si une autre erreur surviens...ça appliquerait le dernier On Error.

    Ce qui se produit...est que dans une procédure...si une erreur survient...je me suis rendu compte (dans certains cas) que ça fait comme un Exit Sub....ça passe à la procédure suivante. Cela est dramatique pour moi. Ça doit tout arrêter. Donc j'en déduis qu'à quelque part je dois faire quelque chose de pas correct...

    Je pourrais bien mettre sur ci-joint mon fichier ... mais il y a énormément de procédures???

    Merci à l'avance.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. Anonyme
    2013-11-08T13:41:13+00:00

    Dans l'exemple que je t'ai donné, oublie totalement

    le "On error resume next" avant l'utilisation de .specialcells

    Son usage inhibe totalement la gestion d'erreur que tu

    mets en place!

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. Anonyme
    2013-11-08T12:53:08+00:00

    Merci....

    Je crois une dernière question pour ceci...

    À certains endroits j'ai besoin que la macro continue (exemple pour des SpecialCells) alors qu'à d'autres endroits j'ai besoin que ça arrête tout. Dans ma procédure principale j'ouvre 2 autres fichiers pour transférer des données.

    Dans le code ici-bas que vous m'avez procuré il y a la ligne On Error GoTo GestionErreur

    Si...j'y ai ajouté une ligne On error Resume Next (voir plus bas) pour un SpecialCells...dois-je remettre à nouveau la ligne On Error GoTo GestionErreur...parce que le On Error Resume Next serait venu annuler le On Error GoTo GestionErreur?

    Merci à l'avance.

    '*****************************************************************************************

    Sub MaMacro(N As String)

     Dim NomMacro As String

     Dim GestionErreur As String

    'Tu affecte à une variable le nom

     'de la macro dans chaque procédure

     NomMacro = "MaMacro"

    On Error GoTo GestionErreur

    Worksheets(N).Activate

    On Error Resume Next ***(Dois-je utiliser Resume Next ou On Error Resume Next?)***Workbooks(Var_NomXLCase).Sheets(Var_Sheet).Range("CN_IndexExamenInRange").Cells.SpecialCells(xlCellTypeFormulas, xlErrors).ClearContents

    (Dois-je remettre ici On Error GoTo GestionErreur?)

    Worksheets(N).Activate

    Exit Sub

    GestionErreur:

     MsgBox "Une erreur a été généré : """ & Err.Number & _

     ", " & Err.Description & """ dans la procédure suivante : " & NomMacro & "."

    Err.Clear

    Ok = True

    Exit Sub

    End Sub

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. Anonyme
    2013-11-08T10:48:29+00:00

    La méthode "SpecialCells" d'un objet Range renvoie une erreur dont

    le numéro est 1004 et leur contenu du message est : "Pas de cellules correspondantes"

    Ce que tu peux faire dans la section GestionErreur que j'ai proposée

    c'est de vérifier quel est le numéro de l'erreur qui est généré. Pour ce

    faire tu modifies cette section comme ceci.

    Si une erreur 1004 est générée, la procédure va continuer de s'exécuter

    et elle reprendra à la ligne suivante où l'erreur a été générée.

    Attention, il faut tester les procédures correctement afin de s'assurer qu'il

    n'y a pas d'autres situations dans les procédures susceptibles de générer

    des erreurs 1004.

    GestionErreur:

    If Err.Number = 1004 Then

        err.clear

        Resume Next

    Else

        MsgBox "Une erreur a été générée : """ & Err.Number & _

        ", " & Err.Description & """ dans la procédure suivante : " & NomMacro & "."

        Err.Clear

        Ok = True

    End If

    Exit Sub

    Les commandes suivantes :

    Resume next  -> n'arrête pas l'exécution de la procédure même lorsqu'il

                               y a une erreur. Dans le cas d'erreur majeure, cette commande

                               ne sera pas suffisante pour passer outre l'erreur.

    Resume : Dans une gestion d'erreur, on utilise Resume pour reprendre l'exécution

                    à la ligne où l'erreur a été détectée.

    Resume Next : Dans une gestion d'erreur, on demande à Excel de reprendre l'exécution

                            de la macro à la ligne de code suivant la ligne qui a provoqué une erreur.

    On Erreur Goto GestionErreur : On dit à la procédure où se rendre si elle rencontre une

                                                       erreur.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire