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: