Categories: EXEL

Exécuter une macro à partir d’une macro (d’un autre classeur)

 

Dans VBA, il existe plusieurs façons d’exécuter une macro dans une macro et même d’exécuter une macro à partir d’un autre classeur. Sur les forums, ces méthodes sont utilisées de manière interchangeable en fonction des préférences personnelles du commentateur. Cela peut prêter à confusion pour quiconque essaie d’apprendre VBA. Selon la méthode d’exécution / d’appel de la macro, la syntaxe est légèrement différente.

Cet article montre ces méthodes courantes et comment les utiliser.

Exécuter une macro dans le même classeur

La méthode standard pour appeler une macro contenue dans le même classeur est détaillée ci-dessous.

Utilisez le nom de la macro

Dans cet exemple de code, seul le nom de la macro est requis.

Sub CallAnotherMacro()

NameOfMacro

End Sub

Lorsque vous utilisez cette méthode avec des paramètres / arguments, le premier argument suit le nom de la macro, chaque argument suivant est séparé par une virgule.

Sub CallAnotherMacro()

Dim argument1 As String
Dim argument2 As Integer
argument1 = "ExampleText"
argument2 = 1

NameOfMacro argument1, argument2

End Sub

Appeler une macro

L’utilisation de l’instruction Call est ma méthode préférée. Comme il est plus facile à lire, car il est clair qu’une autre macro est en cours d’exécution.

Sub CallAnotherMacro()

Call NameOfMacro

End Sub

Les paramètres utilisés avec cette méthode sont placés entre parenthèses et séparés par une virgule.

Sub CallAnotherMacro()

Dim argument1 As String
Dim argument2 As Integer
argument1 = "ExampleText"
argument2 = 1

Call NameOfMacro(argument1, argument2)

End Sub

Exécuter une macro

La commande Exécuter est similaire à Appeler, mais nécessite que le nom de la macro soit sous la forme d’une chaîne de texte.

Sub CallAnotherMacro()

Run "NameOfMacro"

End Sub

Pour utiliser des arguments, la chaîne de texte est suivie d’une virgule, chaque argument est séparé par une virgule.

Sub CallAnotherMacro()

Dim argument1 As String
Dim argument2 As Integer
argument1 = "ExampleText"
argument2 = 1

Run "NameOfMacro", argument1, argument2

End Sub

Exécuter une macro basée sur une variable

Il est possible d’exécuter une macro en fonction de la valeur d’une variable chaîne. Cela permet à une macro différente d’être déclenchée en fonction de la valeur de la variable chaîne à ce stade.

Dans l’exemple ci-dessous:

  • NameOfMacro est le nom de la procédure Sub (le même que les exemples ci-dessus)
  • MacroName est une variable de chaîne contenant le texte «NameOfMacro»
Sub CallAnotherMacro()

Dim MacroName As String

MacroName = "NameOfMacro"

Run MacroName

End Sub

Dans le code ci-dessus, la commande Exécuter n’est pas suivie d’une chaîne de texte, mais d’une variable. La fonction Exécuter fonctionne car la variable est une chaîne de texte.

Pour utiliser des paramètres à l’aide de cette méthode, la syntaxe est la suivante:

Sub CallAnotherMacro()

Dim MacroName As String
Dim argument1 As String
Dim argument2 As Integer
MacroName = "NameOfMacro"
argument1 = "ExampleText"
argument2 = 1

Run MacroName, argument1, argument2

End Sub

Générez un code VBA précis en quelques secondes avec AutoMacro

AutoMacro est un puissant générateur de code VBA qui est livré avec une bibliothèque de code étendue et de nombreux autres outils et utilitaires permettant de gagner du temps.

Que vous soyez un codeur expérimenté cherchant à gagner du temps ou un débutant essayant simplement de faire fonctionner les choses, AutoMacro est l’outil qu’il vous faut.

 

Exécuter une macro contenue dans un autre classeur

Remarque: le classeur qui contient la macro doit être ouvert. Si vous devez d’abord ouvrir le classeur, consultez le code dans cet article.

Pour exécuter une macro contenue dans un autre classeur, utilisez la commande Application.Run comme suit:

Sub CallAnotherMacro()

Application.Run "'Another Workbook.xlsm'!NameOfMacro"

End Sub

Les guillemets simples sont nécessaires lorsque le nom du classeur contient un espace.

S’il n’y a pas d’espace, les guillemets simples ne sont pas obligatoires. Le code fonctionnera toujours correctement s’ils sont inclus, donc je préfère les utiliser par souci de cohérence.

Sub CallAnotherMacro()

Application.Run "AnotherWorkbook.xlsm!NameOfMacro"

End Sub

Exécuter une macro contenue dans un autre classeur basé sur une variable

En utilisant la variable de chaîne de texte, nous pouvons créer le nom du classeur et de la macro. Cela nous permet d’appeler n’importe quelle macro à partir de n’importe quel classeur ouvert.

Sub CallAnotherMacro()

Dim WorkbookName As String
Dim MacroName As String
WorkbookName = "AnotherWorkbook.xlsm"
MacroName = "NameOfMacro"

Run "'" & WorkbookName & "'!" & MacroName

End Sub

Si vous utilisez des paramètres, ceux-ci peuvent également être inclus comme suit:

Sub CallAnotherMacro()

Dim WorkbookName As String
Dim MacroName As String
Dim argument1 As String
Dim argument2 As Integer
WorkbookName = "AnotherWorkbook.xlsm"
MacroName = "NameOfMacro"
argument1 = "ExampleText"
argument2 = 1

Run "'" & WorkbookName & "'!" & MacroName, argument1, argument2

End Sub

Appel et exécution de macros à partir de modules Workbook, Worksheet ou UserForm

Tous les exemples ci-dessus supposent que le code VBA est stocké dans un module standard. Mais le code VBA peut également être conservé dans les modules Workbook, Worksheet et UserForm. Pour appeler une macro à partir de l’un de ces types de modules, il faut un petit ajustement; le nom de l’objet doit précéder le nom de la macro.

En utilisant la même méthode Run que ci-dessus, pour exécuter une macro contenue dans le module de classeur, le code serait le suivant:

Sub CallAnotherMacro()

Run "ThisWorkbook.NameOfMacro"

End Sub

Notez que «NameOfMacro» est maintenant devenu «ThisWorkbook.NameOfMacro».

Si le code VBA est contenu dans le module de classeur d’un autre classeur, le code serait ajusté comme suit:

Sub CallAnotherMacro()

Run "'AnotherWorkbook.xlsm'!ThisWorkbook.NameOfMacro"

End Sub

Utilisez le nom de code de l’objet pour référencer un module de feuille de calcul ou un module UserForm.

N’oubliez pas:

Si vous avez trouvé cet article utile ou si vous avez une meilleure approche, veuillez laisser un commentaire ci-dessous.

Avez-vous besoin d’aide pour l’adapter à vos besoins?

Je suppose que les exemples de cet article ne correspondaient pas exactement à votre situation. Nous utilisons tous Excel différemment, il est donc impossible d’écrire un article qui répondra aux besoins de chacun. En prenant le temps de comprendre les techniques et principes de cet article (et ailleurs sur ce site) vous devriez pouvoir l’adapter à vos besoins.

N’y allez pas encore, il y a beaucoup plus à apprendre sur comment-supprimer. Consultez les derniers articles:

Partagez