web-dev-qa-db-fra.com

Comment appeler la fonction à partir d'un autre classeur spécifique dans VBA?

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.

16
Gutti

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:

  1. Dans le classeur A, ouvrez la fenêtre Microsoft Visual Basic pour Applications (par exemple, en appuyant sur Alt+F11).
  2. Sélectionnez Outils, références.
  3. Dans la boîte de dialogue Références qui apparaît, choisissez Parcourir.
  4. Dans la boîte de dialogue Ajouter une référence qui apparaît, choisissez Fichiers Microsoft Excel dans la zone Type de fichier, sélectionnez le fichier que vous souhaitez appeler (B), puis choisissez Ouvrir.
  5. Choisissez OK pour fermer la boîte de dialogue Références.

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.

21
Brian Camire

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
0
RIck_R