Comment : exposer du code à VBA dans un projet Visual BasicHow to: Expose Code to VBA in a Visual Basic Project

Vous pouvez exposer du code dans un Visual BasicVisual Basic projet Visual Basic pour Applications (VBA) si vous souhaitez que les deux types de code interagissent entre eux.You can expose code in a Visual BasicVisual Basic project to Visual Basic for Applications (VBA) code if you want the two types of code to interact with each other.

S’applique à : Les informations contenues dans cette rubrique s’appliquent aux projets de niveau document pour Excel et Word.Applies to: The information in this topic applies to document-level projects for Excel and Word. Pour plus d’informations, consultez Fonctionnalités disponibles par type d’application et de projet Office.For more information, see Features Available by Office Application and Project Type.

Le processus de Visual Basic est différent du processus Visual c#.The Visual Basic process is different from the Visual C# process. Pour plus d’informations, consultez Comment : exposer du Code à VBA dans un Visual C# projet.For more information, see How to: Expose Code to VBA in a Visual C# Project.

Le processus est différent pour le code dans une classe d’élément hôte pour le code dans d’autres classes :The process is different for code in a host item class than it is for code in other classes:

Exposer du Code dans une classe d’élément hôteExposing Code in a Host Item Class

Pour permettre au code VBA d’appeler du code Visual Basic dans une classe d’élément hôte, définissez le EnableVbaCallers propriété de l’élément hôte la valeur True.To enable VBA code to call Visual Basic code in a host item class, set the EnableVbaCallers property of the host item to True.

Pour une procédure pas à pas qui montre comment exposer une méthode d’une classe d’élément hôte et puis l’appeler à partir de VBA, consultez procédure pas à pas : appel de Code à partir de VBA dans un projet Visual Basic.For a walkthrough that demonstrates how to expose a method of a host item class and then call it from VBA, see Walkthrough: Calling Code from VBA in a Visual Basic Project. Pour plus d’informations sur les éléments hôtes, consultez Host Items and Host Controls Overview.For more information about host items, see Host Items and Host Controls Overview.

Pour exposer le code dans un élément hôte à VBATo expose code in a host item to VBA

  1. Ouvrez ou créez au niveau du document Visual BasicVisual Basic projet basé sur un document Word, un classeur Excel ou un modèle Excel qui prend en charge les macros et qui contient déjà du code VBA.Open or create a document-level Visual BasicVisual Basic project that is based on a Word document, Excel workbook, or Excel template that supports macros, and that already contains VBA code.

    Pour plus d’informations sur les formats de fichier de document qui prennent en charge les macros, consultez combinaison de VBA et de personnalisations au niveau du Document.For more information about the document file formats that support macros, see Combining VBA and Document-Level Customizations.

    Note

    Cette fonctionnalité ne peut pas être utilisée dans les projets de modèle Word.This feature cannot be used in Word template projects.

  2. Assurez-vous que du code VBA dans le document est autorisé à s’exécuter sans inviter l’utilisateur à activer les macros.Ensure that VBA code in the document is allowed to run without prompting the user to enable macros. Vous pouvez approuver le code VBA à exécuter en ajoutant l'emplacement du projet Office à la liste des emplacements approuvés dans les paramètres du Centre de gestion de la confidentialité pour Word ou Excel.You can trust VBA code to run by adding the location of the Office project to the list of trusted locations in the Trust Center settings for Word or Excel.

  3. Ajoutez la propriété, une méthode ou un événement que vous souhaitez exposer à VBA à une des classes d’élément hôte dans votre projet et déclarez le nouveau membre en tant que Public.Add the property, method, or event that you want to expose to VBA to one of the host item classes in your project, and declare the new member as Public. Le nom de la classe dépend de l’application :The name of the class depends on the application:

    • Dans un projet Word, la classe d’élément hôte est intitulée ThisDocument par défaut.In a Word project, the host item class is named ThisDocument by default.

    • Dans un projet Excel, les classes d’élément hôte sont nommés ThisWorkbook, Sheet1, Sheet2, et Sheet3 par défaut.In an Excel project, the host item classes are named ThisWorkbook, Sheet1, Sheet2, and Sheet3 by default.

  4. Définir le EnableVbaCallers propriété pour l’élément hôte la valeur True.Set the EnableVbaCallers property for the host item to True. Cette propriété est disponible dans le propriétés fenêtre lorsque l’élément hôte est ouvert dans le concepteur.This property is available in the Properties window when the host item is open in the designer.

    Une fois que vous définissez cette propriété, Visual Studio définit automatiquement le ReferenceAssemblyFromVbaProject propriété True.After you set this property, Visual Studio automatically sets the ReferenceAssemblyFromVbaProject property to True.

    Note

    Si le classeur ou le document ne contient pas déjà du code VBA, ou si le code VBA dans le document n’est pas approuvé, vous recevrez un message d’erreur lorsque vous définissez la EnableVbaCallers propriété True.If the workbook or document does not already contain VBA code, or if VBA code in the document is not trusted to run, you will receive an error message when you set the EnableVbaCallers property to True. Cela est dû au fait que Visual Studio ne peut pas modifier le projet VBA dans le document dans cette situation.This is because Visual Studio cannot modify the VBA project in the document in this situation.

  5. Cliquez sur OK dans le message qui s'affiche.Click OK in the message that is displayed. Ce message vous rappelle que si vous ajoutez du code VBA au classeur ou au document lors vous exécutez le projet à partir de Visual StudioVisual Studio, le code VBA seront perdu lors de la prochaine fois que vous générez le projet.This message reminds you that if you add VBA code to the workbook or document while you are running the project from Visual StudioVisual Studio, the VBA code will be lost the next time you build the project. Il s’agit, car le document dans le dossier de sortie de génération est remplacé chaque fois que vous générez le projet.This is because the document in the build output folder is overwritten every time you build the project.

    À ce stade, Visual Studio configure le projet afin que le projet VBA peut appeler l’assembly.At this point, Visual Studio configures the project so that the VBA project can call into the assembly. Visual Studio ajoute également une propriété nommée CallVSTOAssembly à la ThisDocument, ThisWorkbook, Sheet1, Sheet2, ou Sheet3 module dans le projet VBA.Visual Studio also adds a property named CallVSTOAssembly to the ThisDocument, ThisWorkbook, Sheet1, Sheet2, or Sheet3 module in the VBA project. Vous pouvez utiliser cette propriété pour accéder aux membres publics de la classe que vous avez exposée à VBA.You can use this property to access public members of the class that you exposed to VBA.

  6. Générez le projet.Build the project.

Exposer du Code qui n’est pas dans une classe d’élément hôteExposing Code That Is Not in a Host Item Class

Pour permettre au code VBA d’appeler du code Visual Basic qui n’est pas dans une classe d’élément hôte, modifiez le code afin qu’il est visible à VBA.To enable VBA code to call Visual Basic code that is not in a host item class, modify the code so it is visible to VBA.

Pour exposer le code qui n’est pas dans une classe d’élément hôte à VBATo expose code that is not in a host item class to VBA

  1. Ouvrez ou créez au niveau du document Visual BasicVisual Basic projet basé sur un document Word, un classeur Excel ou un modèle Excel qui prend en charge les macros et qui contient déjà du code VBA.Open or create a document-level Visual BasicVisual Basic project that is based on a Word document, Excel workbook, or Excel template that supports macros, and that already contains VBA code.

    Pour plus d’informations sur les formats de fichier de document qui prennent en charge les macros, consultez combinaison de VBA et de personnalisations au niveau du Document.For more information about the document file formats that support macros, see Combining VBA and Document-Level Customizations.

    Note

    Cette fonctionnalité ne peut pas être utilisée dans les projets de modèle Word.This feature cannot be used in Word template projects.

  2. Assurez-vous que du code VBA dans le document est autorisé à s’exécuter sans inviter l’utilisateur à activer les macros.Ensure that VBA code in the document is allowed to run without prompting the user to enable macros. Vous pouvez approuver le code VBA à exécuter en ajoutant l'emplacement du projet Office à la liste des emplacements approuvés dans les paramètres du Centre de gestion de la confidentialité pour Word ou Excel.You can trust VBA code to run by adding the location of the Office project to the list of trusted locations in the Trust Center settings for Word or Excel.

  3. Ajouter le membre que vous souhaitez exposer à VBA à une classe publique dans votre projet et déclarez le nouveau membre en tant que public.Add the member that you want to expose to VBA to a public class in your project, and declare the new member as public.

  4. Appliquez ce qui suit ComVisibleAttribute et ComClassAttribute des attributs à la classe que vous exposez à VBA.Apply the following ComVisibleAttribute and ComClassAttribute attributes to the class that you are exposing to VBA. Ces attributs rendent la classe visible pour VBA.These attributes make the class visible to VBA.

    <Microsoft.VisualBasic.ComClass()> _  
    <System.Runtime.InteropServices.ComVisibleAttribute(True)> _  
    
  5. Substituez la méthode GetAutomationObject d'une classe d'élément hôte de votre projet pour retourner une instance de la classe que vous exposez à VBA.Override the GetAutomationObject method of a host item class in your project to return an instance of the class that you are exposing to VBA. L’exemple de code suivant suppose que vous exposez une classe nommée DocumentUtilities à VBA.The following code example assumes that you are exposing a class named DocumentUtilities to VBA.

    Protected Overrides Function GetAutomationObject() As Object  
        Return New DocumentUtilities()  
    End Function  
    
  6. Ouvrez le document (pour Word) ou le Concepteur de feuille de calcul (pour Excel) dans Visual StudioVisual Studio.Open the document (for Word) or worksheet (for Excel) designer in Visual StudioVisual Studio.

  7. Dans la fenêtre Propriétés , sélectionnez la propriété ReferenceAssemblyFromVbaProject et remplacez sa valeur par True.In the Properties window, select the ReferenceAssemblyFromVbaProject property, and change the value to True.

    Note

    Si le classeur ou le document ne contient pas déjà du code VBA, ou si le code VBA dans le document n’est pas approuvé, vous recevrez un message d’erreur lorsque vous définissez la ReferenceAssemblyFromVbaProject propriété True .If the workbook or document does not already contain VBA code, or if VBA code in the document is not trusted to run, you will receive an error message when you set the ReferenceAssemblyFromVbaProject property to True. Cela est dû au fait que Visual Studio ne peut pas modifier le projet VBA dans le document dans cette situation.This is because Visual Studio cannot modify the VBA project in the document in this situation.

  8. Cliquez sur OK dans le message qui s'affiche.Click OK in the message that is displayed. Ce message vous rappelle que si vous ajoutez du code VBA au classeur ou au document lors vous exécutez le projet à partir de Visual StudioVisual Studio, le code VBA seront perdu lors de la prochaine fois que vous générez le projet.This message reminds you that if you add VBA code to the workbook or document while you are running the project from Visual StudioVisual Studio, the VBA code will be lost the next time you build the project. Il s’agit, car le document dans le dossier de sortie de génération est remplacé chaque fois que vous générez le projet.This is because the document in the build output folder is overwritten every time you build the project.

    À ce stade, Visual Studio configure le projet afin que le projet VBA peut appeler l’assembly.At this point, Visual Studio configures the project so that the VBA project can call into the assembly. Visual Studio ajoute également une méthode nommée GetManagedClass au projet VBA.Visual Studio also adds a method named GetManagedClass to the VBA project. Vous pouvez appeler cette méthode à partir de n’importe où dans le projet VBA pour accéder à la classe que vous avez exposée à VBA.You can call this method from anywhere in the VBA project to access the class that you exposed to VBA.

  9. Générez le projet.Build the project.

Voir aussiSee Also

Comment : créer des projets Office dans Visual Studio How to: Create Office Projects in Visual Studio
Conception et création de Solutions Office Designing and Creating Office Solutions
Combinaison de VBA et de personnalisations au niveau du document Combining VBA and Document-Level Customizations
Procédure pas à pas : Appel de Code à partir de VBA dans un projet Visual Basic Walkthrough: Calling Code from VBA in a Visual Basic Project
Comment : exposer du Code à VBA dans un Visual C# projetHow to: Expose Code to VBA in a Visual C# Project