Partager via


Procédure pas à pas : appel de code dans un complément d'application à partir de VBA

Cette procédure pas à pas explique comment exposer un objet d'un complément d'application à d'autres solutions Microsoft Office, y compris des compléments VBA (Visual Basic for Applications) et COM.

S'applique à : Les informations contenues dans cette rubrique s'appliquent aux projets de niveau application pour Microsoft Office 2010 et la version 2007 de Microsoft® Office System. Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet Office.

Bien que cette procédure utilise spécifiquement Excel, les concepts présentés ici s'appliquent à tous les modèles de projets de complément fournis par Visual Studio.

Cette procédure pas à pas décrit les tâches suivantes :

  • Définition d'une classe susceptible d'être exposée à d'autres solutions Office.

  • Exposition de la classe à d'autres solutions Office.

  • Appel d'une méthode de la classe à partir du code VBA.

Notes

Il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains des éléments d'interface utilisateur de Visual Studio dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d'informations, consultez Paramètres Visual Studio.

Composants requis

Pour exécuter cette procédure pas à pas, vous devez disposer des composants suivants :

-

Une édition de Visual Studio 2010 qui inclut les outils de développement Microsoft Office. Pour plus d'informations, consultez [Configuration d'un ordinateur pour développer des solutions Office](bb398242\(v=vs.100\).md).
  • Excel 2007 ou Excel 2010.

lien vers la vidéo Pour obtenir une version vidéo de cette rubrique, consultez la Vidéo : Comment appeler du code dans un complément d'application à partir de VBA (page éventuellement en anglais).

Création du projet de complément

La première étape consiste à créer un projet de complément pour Excel.

Pour créer un projet

  • Créez un projet de complément Excel nommé ImporterDonnéesExcel, à l'aide du modèle de projet de complément Excel. Pour plus d'informations, consultez Comment : créer des projets Office dans Visual Studio.

    Visual Studio ouvre le fichier de code ThisAddIn.cs ou ThisAddIn.vb et ajoute le projet ImporterDonnéesExcel à l'Explorateur de solutions.

Définition d'une classe susceptible d'être exposée à d'autres solutions Office

Cette procédure pas à pas a pour but d'appeler la méthode ImportData d'une classe nommée AddInUtilities dans votre complément à partir du code VBA. Cette méthode écrit une chaîne dans la cellule A1 de la feuille de calcul active.

Pour exposer la classe AddInUtilities à d'autres solutions Office, vous devez faire rendre la classe publique et visible par COM. Vous devez également exposer l'interface IDispatch dans la classe. Le code de la procédure suivante vous explique comment respecter ces exigences. Pour plus d'informations, consultez Appel de code dans des compléments d'application à partir d'autres solutions Office.

Pour définir une classe susceptible d'être exposée à d'autres solutions Office

  1. Dans le menu Projet, cliquez sur Ajouter une classe.

  2. Dans la boîte de dialogue Ajouter un nouvel élément, remplacez le nom de la nouvelle classe par AddInUtilities, puis cliquez sur Ajouter.

    Le fichier AddInUtilities.cs ou AddInUtilities.vb s'ouvre dans l'éditeur de code.

  3. Ajoutez les instructions suivantes au début du fichier.

    Imports System.Data
    Imports System.Runtime.InteropServices
    Imports Excel = Microsoft.Office.Interop.Excel
    
    using System.Data;
    using System.Runtime.InteropServices;
    using Excel = Microsoft.Office.Interop.Excel;
    
  4. Remplacez la classe AddInUtilities par le code suivant.

    <ComVisible(True)> _
    Public Interface IAddInUtilities
        Sub ImportData()
    End Interface
    
    <ComVisible(True)> _
    <ClassInterface(ClassInterfaceType.None)> _
    Public Class AddInUtilities
        Implements IAddInUtilities
    
        ' This method tries to write a string to cell A1 in the active worksheet.
        Public Sub ImportData() Implements IAddInUtilities.ImportData
    
            Dim activeWorksheet As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet
    
            If activeWorksheet IsNot Nothing Then
                Dim range1 As Excel.Range = activeWorksheet.Range("A1")
                range1.Value2 = "This is my data"
            End If
        End Sub
    End Class
    
    [ComVisible(true)]
    public interface IAddInUtilities
    {
        void ImportData();
    }
    
    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    public class AddInUtilities : IAddInUtilities
    {
        // This method tries to write a string to cell A1 in the active worksheet.
        public void ImportData()
        {
            Excel.Worksheet activeWorksheet = Globals.ThisAddIn.Application.ActiveSheet as Excel.Worksheet;
    
            if (activeWorksheet != null)
            {
                Excel.Range range1 = activeWorksheet.get_Range("A1", System.Type.Missing);
                range1.Value2 = "This is my data";
            }
        }
    }
    

    Ce code rend la classe AddInUtilities visible par COM et ajoute la méthode ImportData à la classe. Pour exposer l'interface IDispatch, la classe AddInUtilities possède également l'attribut ClassInterfaceAttribute, et elle implémente une interface qui est visible à COM.

Exposition de la classe à d'autres solutions Office

Pour exposer la classe AddInUtilities à d'autres solutions Office, substituez la méthode RequestComAddInAutomationService de la classe ThisAddIn. Dans le cas de cette substitution, retournez une instance de la classe AddInUtilities.

Pour exposer la classe AddInUtilities à d'autres solutions Office

  1. Dans l'Explorateur de solutions, développez Excel.

  2. Cliquez avec le bouton droit sur ThisAddIn.cs ou ThisAddIn.vb, puis cliquez sur Afficher le code.

  3. Ajoutez le code suivant à la classe ThisAddIn.

    Private utilities As AddInUtilities
    
    Protected Overrides Function RequestComAddInAutomationService() As Object
        If utilities Is Nothing Then
            utilities = New AddInUtilities()
        End If
        Return utilities
    End Function
    
    private AddInUtilities utilities;
    
    protected override object RequestComAddInAutomationService()
    {
        if (utilities == null)
            utilities = new AddInUtilities();
    
        return utilities;
    }
    
  4. Dans le menu Générer, cliquez sur Générer la solution.

    Vérifiez que la solution est générée sans erreur.

Test du complément

Vous pouvez appeler la classe AddInUtilities à partir de plusieurs types de solutions Office. Cette procédure pas à pas utilise le code VBA dans un classeur Excel. Pour plus d'informations sur les autres types de solutions Office utilisables, consultez Appel de code dans des compléments d'application à partir d'autres solutions Office.

Pour tester votre complément

  1. Appuyez sur F5 pour exécuter votre projet.

  2. Dans Excel, enregistrez le classeur actif en tant que Classeur Excel prenant en charge les macros (*.xlsm) dans un emplacement commode, tel que le Bureau.

  3. Dans le ruban, cliquez sur l'onglet Développeur.

    Notes

    Si l'onglet Développeur n'est pas visible, vous devez préalablement l'afficher. Pour plus d'informations, consultez Comment : afficher l'onglet Développeur sur le ruban.

  4. Dans le groupe Code, cliquez sur Visual Basic.

    Visual Basic Editor s'ouvre.

  5. Dans la fenêtre Projet, double-cliquez sur ThisWorkbook.

    Le fichier de code de l'objet ThisWorkbook s'ouvre.

  6. Ajoutez le code VBA suivant au fichier de code. Dans un premier temps, ce code reçoit un objet COMAddIn représentant le complément ImporterDonnéesExcel. Il utilise ensuite la propriété Object de l'objet COMAddIn pour appeler la méthode ImportData.

    Sub CallVSTOMethod()
        Dim addIn As COMAddIn
        Dim automationObject As Object
        Set addIn = Application.COMAddIns("ExcelImportData")
        Set automationObject = addIn.Object
        automationObject.ImportData
    End Sub
    
  7. Appuyez sur F5.

  8. Vérifiez qu'une nouvelle feuille Données importées a été ajoutée au classeur. Vérifiez également que la cellule A1 contient la chaîne Ce sont mes données.

  9. Quittez Excel.

Étapes suivantes

Pour en savoir plus sur la programmation de compléments, consultez les rubriques ci-dessous :

Voir aussi

Tâches

Comment : créer des projets Office dans Visual Studio

Concepts

Appel de code dans des compléments d'application à partir d'autres solutions Office

Personnalisation des fonctionnalités de l'interface utilisateur à l'aide d'interfaces d'extensibilité

Architecture des compléments d'application

Autres ressources

Programmation de compléments d'application

Développement de solutions Office