Partager via


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

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 C# à du code Visual Basic pour applications (VBA) si vous souhaitez que les deux types de code interagissent.

Le processus Visual C# est différent du processus Visual Basic. 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 Basic.

Exposer le code dans un projet Visual C#

Pour permettre à du code VBA d'appeler du code dans un projet Visual C#, modifiez le code de sorte qu'il soit visible à COM, puis affectez à la propriété ReferenceAssemblyFromVbaProject la valeur True dans le concepteur.

Pour une procédure pas à pas montrant comment appeler une méthode dans un projet Visual C# de VBA, consultez Procédure pas à pas : appel de code à partir de VBA dans un projet Visual C#.

Pour exposer le code dans un projet Visual C# à VBA

  1. Ouvrez ou créez un projet 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 ClassInterfaceAttribute à la classe que vous exposez à VBA. Ces attributs permettent à COM de voir la classe, mais sans générer d'interface de classe.

    [System.Runtime.InteropServices.ComVisible(true)]
    [System.Runtime.InteropServices.ClassInterface(
        System.Runtime.InteropServices.ClassInterfaceType.None)]
    
  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 :

    • Si vous exposez une classe d'élément hôte à VBA, substituez la méthode GetAutomationObject qui appartient à cette classe et retournez l'instance actuelle de la classe.

      protected override object GetAutomationObject()
      {
          return this;
      }
      
    • Si vous exposez à VBA une classe qui n'est pas un élément hôte, substituez la méthode GetAutomationObject de tout élément hôte dans votre projet et retournez une instance de la classe d'élément non hôte. Par exemple, le code suivant suppose que vous exposez à VBA une classe appelée DocumentUtilities.

      protected override object GetAutomationObject()
      {
          return new DocumentUtilities();
      }
      

    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.

  6. Extrayez une interface de la classe que vous exposez à VBA. Dans la boîte de dialogue Extraire l'interface, sélectionnez les membres publics que vous souhaitez inclure dans la déclaration d'interface. Pour plus d'informations, consultez Comment : refactoriser du code avec l'opération de refactorisation Extraire l'interface.

  7. Ajoutez le mot clé public à la déclaration d'interface.

  8. Rendez l'interface visible à COM en ajoutant l'attribut ComVisibleAttribute suivant à l'interface.

    [System.Runtime.InteropServices.ComVisible(true)]
    
  9. Ouvrez le document (pour Word) ou la feuille de calcul (pour Excel) dans le concepteur dans Visual Studio.

  10. 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 Tools pour Office ne peut pas modifier le projet VBA du document dans ce genre de situation.

  11. 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érez le projet. Cela est dû au fait 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.

  12. 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 C#

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

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