J'aimerais savoir s'il existe un moyen d'appeler une fonction ou une méthode VBA à partir du module d'un autre classeur spécifié, comme il est possible pour une feuille de calcul spécifique sans utiliser Application.Run.
Pour la fiche de travail, je peux appeler par exemple:
ActiveSheet.MyTest()
si MyTest est défini dans le module de feuille
Mais je voudrais appeler une fonction qui est définie dans un module
J'ai essayé :
ActiveWorkbook.MyTestModule()
ActiveWorkbook.VBProject.VBComponents("MyModule").MyTestModule(myArg)
qui ne fonctionnent pas en générant une erreur Object ne supporte pas cette méthode
Je pourrais appeler
Application.Run(ActiveWorkbook.name & "!MyTestModule", myArg)
Mais je ne suis pas sûr de la gestion des erreurs de Application.Run et je trouverais plus propre pour exécuter directement la méthode.
Dans le classeur à partir duquel vous souhaitez appeler (j'appellerai cela A), vous pouvez ajouter une référence au classeur auquel vous souhaitez appeler (j'appellerai ce B) comme suit:
Dans le fichier A, vous devriez alors pouvoir appeler des fonctions publiques de niveau module dans le fichier B comme si elles se trouvaient dans le fichier A. Pour résoudre tout conflit de dénomination, vous pouvez préfixer les appels du "Nom du projet" pour le fichier B, comme indiqué dans la section Onglet Général de la boîte de dialogue Propriétés du projet (accessible via la commande Propriétés du menu Outils de Microsoft Visual Basic pour Applications). Par exemple, si le "Nom du projet" du fichier B était "VBAProjectB", vous pouvez appeler la fonction F à partir du fichier A en utilisant la syntaxe VBAProjectB.F.
En passant, cela fonctionne également si vous souhaitez accéder à un type de données personnalisé dans un autre classeur:
' In workbook ABC, project name Library
Public Type Book_Data
Title As String
Pub_Date As Date
Pub_City As String
End Type
' In workbook DEF (after a ref to Library)
Dim Book_Info As Library.Book_Data
Book_Info.Title = "War and Peace"
Debug.Print Book_Info.Title