Partager via


Comment : exposer du code à VBA dans un projet Visual Basic

Vous pouvez exposer du code dans un projet Visual Basic à du code Visual Basic pour applications (VBA) si vous souhaitez que les deux types de code interagissent.

S'applique à : Les informations contenues dans cette rubrique s'appliquent aux projets de niveau document pour les applications suivantes : Excel 2013, Excel 2010, Word 2013 et Word 2010. Pour en savoir plus, consultez Fonctionnalités disponibles par type d'application et de projet Office.

Le processus Visual Basic est différent du processus Visual C#.Pour plus d’informations, consultez Comment : exposer du code à VBA dans un projet Visual C#.

Le processus est différent pour le code dans une classe d'élément hôte et pour le code dans d'autres classes :

  • Exposition d'un code dans une classe d'élément hôte

  • Exposition d'un code qui n'est pas dans une classe d'élément hôte

lien vers la vidéo Pour une démonstration vidéo connexe, consultez How Do I: Call VSTO Code from VBA? (page éventuellement en anglais).

Exposition d'un code dans une classe d'élément hôte

Pour permettre au code VBA d'appeler le code Visual Basic dans une classe d'élément hôte, affectez la valeur True à la propriété EnableVbaCallers de l'élément hôte.

Pour une procédure pas à pas qui montre comment exposer une méthode d'une classe d'élément hôte et comment l'appeler à partir de code VBA, consultez Procédure pas à pas : appel de code à partir de VBA dans un projet Visual Basic.Pour plus d'informations sur les éléments hôtes, consultez Vue d'ensemble des éléments hôtes et des contrôles hôtes.

Pour exposer un code dans un élément hôte à VBA

  1. Ouvrez ou créez un projet Visual Basic au niveau du document basé sur un document Word, un classeur Excel ou un modèle Excel qui prend en charge des macros et qui contient déjà du code VBA. 

    Pour plus d'informations sur les formats de fichier de document qui prennent en charge des macros, consultez Combinaison de VBA et de personnalisations au niveau du document.

    [!REMARQUE]

    Cette fonctionnalité ne peut pas être utilisée dans des projets de modèle Word.

  2. Assurez-vous que le code VBA du document peut s'exécuter sans inviter l'utilisateur à activer des 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.

  3. Ajoutez la propriété, la méthode ou l'événement que vous souhaitez exposer à VBA à l'une des classes d'élément hôte dans votre projet et déclarez le nouveau membre comme Public.Le nom de la classe dépend de l'application :

    • Dans un projet Word, la classe d'élément hôte est intitulée ThisDocument par défaut.

    • Dans un projet Excel, les classes d'élément hôte s'appellent par défaut ThisWorkbook, Sheet1, Sheet2 et Sheet3.

  4. Affectez la valeur True à la propriété EnableVbaCallers pour l'élément hôte.Cette propriété est disponible dans la fenêtre Propriétés lorsque l'élément hôte est ouvert dans le concepteur.

    Une fois cette propriété définie, Visual Studio affecte automatiquement à la propriété ReferenceAssemblyFromVbaProject la valeur True.

    [!REMARQUE]

    Si le classeur ou le document ne contient pas encore de code VBA, ou si l'exécution du code VBA du document n'est pas approuvée, un message d'erreur s'affiche lorsque vous affectez la valeur True à la propriété EnableVbaCallers.Cela est dû au fait que Visual Studio ne peut pas modifier le projet VBA dans le document dans ce type de situation.

  5. Cliquez sur OK en réponse au message qui s'affiche.Ce message vous rappelle que si vous ajoutez du code VBA au classeur ou au document lors de l'exécution du projet à partir de Visual Studio, le code VBA sera perdu la prochaine fois que vous génèrerez le projet.La raison en est que le document du dossier de sortie de la génération est remplacé lors de chaque génération du projet.

    À ce stade, Visual Studio configure le projet afin que le projet VBA puisse appeler l'assembly.Visual Studio ajoute également une propriété nommée CallVSTOAssembly au module ThisDocument, ThisWorkbook, Sheet1, Sheet2 ou Sheet3 dans le projet VBA.Vous pouvez utiliser cette propriété pour accéder aux membres publics de la classe que vous avez exposée à VBA.

  6. Générez le projet.

Exposition d'un code qui n'est pas dans une classe d'élément hôte

Pour permettre au code VBA d'appeler un code Visual Basic qui n'est pas dans une classe d'élément hôte, modifiez le code de manière à ce qu'il soit visible pour VBA.

Pour exposer un code qui n'est pas dans une classe d'élément hôte à VBA

  1. Ouvrez ou créez un projet Visual Basic au niveau du document basé sur un document Word, un classeur Excel ou un modèle Excel qui prend en charge des macros et qui contient déjà du code VBA.

    Pour plus d'informations sur les formats de fichier de document qui prennent en charge des macros, consultez Combinaison de VBA et de personnalisations au niveau du document.

    [!REMARQUE]

    Cette fonctionnalité ne peut pas être utilisée dans des projets de modèle Word.

  2. Assurez-vous que le code VBA du document peut s'exécuter sans inviter l'utilisateur à activer des 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.

  3. Ajoutez le membre que vous souhaitez exposer à VBA à une classe publique dans votre projet et déclarez le nouveau membre comme public.

  4. Appliquez les attributs ComVisibleAttribute et ComClassAttribute à la classe que vous exposez à VBA.Ces attributs rendent la classe visible pour 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.L'exemple de code suivant suppose que vous exposez à VBA une classe appelée DocumentUtilities.

    Protected Overrides Function GetAutomationObject() As Object
        Return New DocumentUtilities()
    End Function
    
  6. Ouvrez le concepteur de document (pour Word) ou de feuille de calcul (pour Excel) dans Visual Studio.

  7. Dans la fenêtre Propriétés, sélectionnez la propriété ReferenceAssemblyFromVbaProject et remplacez sa valeur par True.

    [!REMARQUE]

    Si le classeur ou le document ne contient pas encore de code VBA ou si l'exécution du code VBA du document n'est pas approuvée, un message d'erreur s'affiche lorsque vous affectez la valeur True à la propriété ReferenceAssemblyFromVbaProject.Cela est dû au fait que Visual Studio ne peut pas modifier le projet VBA dans le document dans ce type de situation.

  8. Cliquez sur OK en réponse au message qui s'affiche.Ce message vous rappelle que si vous ajoutez du code VBA au classeur ou au document lors de l'exécution du projet à partir de Visual Studio, le code VBA sera perdu la prochaine fois que vous génèrerez le projet.La raison en est que le document du dossier de sortie de la génération est remplacé lors de chaque génération du projet.

    À ce stade, Visual Studio configure le projet afin que le projet VBA puisse appeler l'assembly.Visual Studio ajoute également la méthode appelée GetManagedClass au projet VBA.Vous pouvez appeler cette méthode à partir de n'importe quel endroit dans le projet VBA pour accéder à la classe que vous avez exposée à VBA.

  9. Générez le projet.

Voir aussi

Tâches

Comment : créer des projets Office dans Visual Studio

Procédure pas à pas : appel de code à partir de VBA dans un projet Visual Basic

Comment : exposer du code à VBA dans un projet Visual C#

Autres ressources

Conception et création de solutions Office

Combinaison de VBA et de personnalisations au niveau du document