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-07T11:51:33+00:00

    Merci encore.

    Non...je n'ai pas tout à fait procédé comme cela. C'est que dans la macro où j'ai inscrit

    Dim ErrorMAJVersionMessage As String

    On Error GoTo ErrorMAJVersionMessage

    je lance une autre macro qui elle aussi lance plusieurs autres macros.

    Devrais-je inscrire le code dans toutes les "sous" macros?

    Aussi moi j'ai plutôt inscrit partout On error Resume next et non seulement Resume next. Est-ce que cela fait une différence?

    Merci à l'avance.

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

    0 commentaires Aucun commentaire
  2. Anonyme
    2013-11-07T11:24:33+00:00

    Un exemple pour les messages d'erreur.

    Dans la macro "Test", le nom de la feuille "Feuil25" n'existe pas

    dans le classeur afin de forcer l'erreur. Et j'ai bien le message

    d'erreur qui s'affiche avant de revenir la macro Test.

    Est-ce que tu as procédé ainsi?

    '-----------------------------------

    Sub test()

    Call MaMacro("Feuil25")

    End Sub

    '-----------------------------------

    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

    Exit Sub

    GestionErreur:

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

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

    Err.Clear

    'Et si tu veux que la macro continue de

    's'exécuter à partir de la ligne suivante où

    'elle a détecter une erreur, tu ajoutes :

    Resume Next

    End Sub

    '-----------------------------------

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

    0 commentaires Aucun commentaire
  3. Anonyme
    2013-11-07T10:35:24+00:00

    Bonjour,

    Merci je vais vérifier.

    J'ai un autre soucis ... indirectement lié ... curieusement je ne peux plus poser de nouvelles questions. Lorsque je me connecte l'interface n'est plus tout à fait la même??? J'aurais préféré poser une nouvelle question sur le sujet suivant:

    Dans un fichier j'ai plusieurs macros qui sont lancées dans une même macro. J'utilise le code ici-bas.

    Mon problème est que si un bug survient ça sort de la macros en cours et la macro suivante s'exécute au lieu de m'amener au message d'erreur ou encore de m'afficher le message d'erreur VB correspondant.

    Y a-t'il une façon que je puisse m'assurer de recevoir soir mon message d'erreur ou soit le message usuel de VB?

    Je sais que j'ai placé des On error resume next à des endroits. Faudrait-il que je replace le code ici-bas après les On error resume next ou ???

    Merci à l'avance.

    Dim ErrorMAJVersionMessage As String

    On Error GoTo ErrorMAJVersionMessage

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

    0 commentaires Aucun commentaire
  4. Anonyme
    2013-11-06T21:36:28+00:00

    Dans la fenêtre de l'éditeur de code, barre des menus / outils / références /

    regarde dans la liste des références cochées à côté de l'une il y a l'expression "MANQUANTE".

    Si oui, décoche cette référence.

    J'ai testé plus tôt la procédure que je t'ai envoyée dans un message précédent, et, elle

    fonctionne correctement.

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

    0 commentaires Aucun commentaire