Exposer du code à VBA dans un projet Visual C#

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

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

S’applique à : les informations contenues dans cette rubrique s’appliquent aux projets au niveau du document pour Excel et Word. Pour plus d’informations, consultez Fonctionnalités disponibles par application Office lication et le type de projet.

Exposer du code dans un projet Visual C#

Pour permettre au code VBA d’appeler du code dans un projet Visual C#, modifiez le code afin qu’il soit visible par COM, puis définissez la propriété ReferenceAssemblyFromVbaProject sur True dans le concepteur.

Pour obtenir une procédure pas à pas qui montre comment appeler une méthode dans un projet Visual C# à partir de VBA, consultez procédure pas à pas : appeler du code VBA dans un projet Visual C#.

Pour exposer du 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 les macros et qui contient déjà du code VBA.

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

    Remarque

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

  2. Vérifiez que le code VBA du document est autorisé à s’exécuter sans inviter l’utilisateur à activer les 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 en tant que public.

  4. Appliquez les attributs suivants ComVisibleAttributeClassInterfaceAttribute à la classe que vous exposez à VBA. Ces attributs rendent la classe visible pour COM, mais ne génèrent pas d'interface de classe.

    [System.Runtime.InteropServices.ComVisible(true)]
    [System.Runtime.InteropServices.ClassInterface(
        System.Runtime.InteropServices.ClassInterfaceType.None)]
    
  5. Remplacez la méthode GetAutomationObject d’une classe d’élément hôte dans votre projet pour renvoyer une instance de la classe que vous exposez à VBA :

    • Si vous exposez une classe d’élément hôte à VBA, remplacez 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 une classe qui n’est pas un élément hôte à VBA, remplacez la méthode GetAutomationObject d’un é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 une classe nommée DocumentUtilities à VBA.

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

      Pour plus d’informations sur les éléments hôtes, consultez la 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 Extraire la refactorisation de l’interface.

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

  8. Rendez l’interface visible par COM en ajoutant l’attribut suivant ComVisibleAttribute à 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 le code VBA du document n’est pas approuvé à exécuter, vous recevrez un message d’erreur lorsque vous définissez la propriété ReferenceAssemblyFromVbaProject sur True. Cela est dû au fait que Visual Studio ne peut pas modifier le projet VBA dans le document dans cette situation.

  11. Cliquez sur OK dans le 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 build est remplacé chaque fois que vous générez le projet.

    À ce stade, Visual Studio configure le projet afin que le projet VBA puisse appeler l’assembly. Visual Studio ajoute également une méthode nommée GetManagedClass au projet VBA. Vous pouvez appeler cette méthode n’importe où dans le projet VBA pour accéder à la classe que vous avez exposée à VBA.

  12. Créez le projet.