Partager via


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

Mise à jour : novembre 2007

S'applique à

Les informations de cette rubrique s'appliquent uniquement aux projets Visual Studio Tools pour Office et versions de Microsoft Office spécifiés.

Type de projet

  • Projets au niveau du document

Version de Microsoft Office

  • Version 2007 de Microsoft Office System

Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet.

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.

Le processus Visual Basic est différent du processus Visual C#. Pour plus d'informations, consultez Appel de code dans des personnalisations au niveau du document à partir de VBA et 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

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 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 Appel de code dans des personnalisations au niveau du document à partir de VBA.

    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 l'exécution du code VBA en ajoutant l'emplacement du projet Visual Studio Tools pour Office à la liste des emplacements de confiance dans les paramètres du Centre de gestion de la confidentialité de 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 que vous avez défini cette propriété, Visual Studio Tools pour Office affecte automatiquement la valeur True à la propriété ReferenceAssemblyFromVbaProject. Pour plus d'informations sur cette propriété, consultez Appel de code dans des personnalisations au niveau du document à partir de VBA.

    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. La raison en est que Visual Studio Tools pour Office ne peut pas modifier le projet VBA dans le document dans ce genre 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 Tools pour Office configure le projet afin que le projet VBA puisse appeler dans l'assembly. Visual Studio Tools pour Office 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. Pour plus d'informations, consultez Appel de code dans des personnalisations au niveau du document à partir de 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 Appel de code dans des personnalisations au niveau du document à partir de VBA.

    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 l'exécution du code VBA en ajoutant l'emplacement du projet Visual Studio Tools pour Office à la liste des emplacements de confiance dans les paramètres du Centre de gestion de la confidentialité de 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. La raison en est que Visual Studio Tools pour Office ne peut pas modifier le projet VBA dans le document dans ce genre 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 Tools pour Office configure le projet afin que le projet VBA puisse appeler l'assembly. Visual Studio Tools pour Office ajoute également au projet VBA une méthode appelée GetManagedClass. 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. Pour plus d'informations, consultez Appel de code dans des personnalisations au niveau du document à partir de VBA.

  9. Générez le projet.

Voir aussi

Tâches

Comment : créer des projets Visual Studio Tools pour Office

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#

Concepts

Création de solutions Office dans Visual Studio

Combinaison de VBA et de personnalisations au niveau du document

Appel de code dans des personnalisations au niveau du document à partir de VBA