Exécuter une macro dans un autre classeur - Application.run avec ou sans paramètre
Même s'il peut être utilisé pour une procédure placée dans le classeur lui même, Application.run est essentiellement utilisé pour exécuter un procédure située dans un autre classeur ouvert.
[VBA – Excel]
Sans paramètre :
Syntaxe :
Code:
Application.Run "Fichier.xls!'LaMacro'"
Exécute la procédure LaMacro située dans le fichier "Fichier.xls"
Ligne de commande placé dans une variable
Code:
1 2
| LigneDeCommande = "Fichier.xls! 'LaMacro'"
Application.Run LigneDeCommande |
Avec paramètre :
Syntaxe :
Code:
Application.Run "'Fichier.xls'!LaMacro", "LeParamètre"
Ligne de commande placé dans une variable
Code:
1 2
| LigneDeCommande = "Fichier.xls!'LaMacro """ & "LeParamètre" & """'"
Application.Run LigneDeCommande |
Ecrire la ligne de commande dans l'objet ThisWorkbook d'un classeur
Code:
1 2 3 4 5 6 7 8 9
| Dim NomClasseur$, LeParametre$, NoLigne As Long
NomClasseur = "UnClasseur.xls" 'Classeur ouvert <> ThisWorkbook.name
LeParametre = "La donnée"
With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule 'A adapter
NoLigne = .CountOfLines
.InsertLines NoLigne + 1, "Private Sub Workbook_Open()"
.InsertLines NoLigne + 2, " Application.Run """ & "'" & NomClasseur & "'!NomDeLaMacro"", """ & LeParametre & """"
.InsertLines NoLigne + 3, "End sub"
End With |
Correction :
Le nom du fichier contenant la macro lancée par Application.run ne doit pas inclure le chemin
Utiliser Application.run pour faire appel à une fonction
Outre les subroutines, Application.run peut être utilisé pour récupérer le résultat d'une fonction
Code:
1 2 3
| Dim Result As String
Result = Application.Run("LeClasseur.xls!'Palindrome'", "Elu par cette crapule")
MsgBox StrReverse(Result) |