Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette procédure pas à pas explique comment appeler une méthode dans une personnalisation de niveau document pour Microsoft Office Excel depuis le code VBA du classeur. La procédure implique trois étapes de base : ajouter une méthode à la Sheet1 classe d’élément hôte, exposer la méthode au code VBA dans le classeur, puis appeler la méthode à partir du code VBA dans le classeur.
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 type d’application et de projet Office.
Bien que cette procédure pas à pas utilise Excel spécifiquement, les concepts présentés par la procédure pas à pas s’appliquent également aux projets au niveau du document pour Word.
Cette procédure pas à pas décrit les tâches suivantes :
Création d’un classeur qui contient du code VBA.
Faire confiance à l'emplacement du classeur à l’aide du Centre de gestion de la sécurité dans Excel.
Ajout d’une méthode à la classe d’élément
Sheet1hôte.Extraction d’une interface pour la classe d’élément
Sheet1hôte.Exposer la méthode au code VBA.
Appel de la méthode à partir du code VBA.
Note
Il est possible que pour certains des éléments de l'interface utilisateur de Visual Studio, votre ordinateur affiche des noms ou des emplacements différents de ceux indiqués 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 Personnaliser l’IDE Visual Studio.
Prerequisites
Vous devez disposer des éléments suivants pour exécuter cette procédure pas à pas :
Édition de Visual Studio qui inclut les outils de développement Microsoft Office. Pour plus d’informations, consultez Configurer un ordinateur pour développer des solutions Office.
Microsoft Excel
Créer un classeur qui contient du code VBA
La première étape consiste à créer un classeur prenant en charge les macros qui contient une macro VBA simple. Avant de pouvoir présenter du code personnalisé à VBA, le classeur doit déjà contenir du code VBA. Sinon, Visual Studio ne peut pas modifier le projet VBA pour permettre au code VBA d’appeler l’assembly de personnalisation.
Si vous disposez déjà d’un classeur qui contient du code VBA que vous souhaitez utiliser, vous pouvez ignorer cette étape.
Pour créer un classeur qui contient du code VBA
Démarrez Excel.
Enregistrez le document actif sous la forme d’un classeur Excel Macro-Enabled (*.xlsm) avec le nom WorkbookWithVBA. Enregistrez-le dans un emplacement pratique, tel que le bureau.
Dans le ruban, cliquez sur l’onglet Développeur .
Note
Si l’onglet Développeur n’est pas visible, vous devez d’abord l’afficher. Pour plus d’informations, consultez Guide pratique pour afficher l’onglet Développeur du ruban.
Dans le groupe Code , cliquez sur Visual Basic.
Visual Basic Editor s’ouvre.
Dans la fenêtre Projet , double-cliquez sur ThisWorkbook.
Le fichier de code de l’objet
ThisWorkbooks’ouvre.Ajoutez le code VBA suivant au fichier de code. Ce code définit une fonction simple qui ne fait rien. Le seul objectif de cette fonction est de s’assurer qu’un projet VBA existe dans le classeur. Cela est nécessaire pour les étapes ultérieures de cette procédure pas à pas.
Sub EmptySub() End SubEnregistrez le document et quittez Excel.
Créer le projet
Vous pouvez maintenant créer un projet au niveau du document pour Excel qui utilise le classeur avec macro que vous avez créé précédemment.
Pour créer un projet
Démarrez Visual Studio.
Dans le menu Fichier , pointez sur Nouveau, puis cliquez sur Projet.
Dans le volet modèles, développez Visual C#, puis développez Office/SharePoint.
Sélectionnez le nœud Compléments Office .
Dans la liste des modèles de projet, sélectionnez le projet Classeur Excel 2010 ou Classeur Excel 2013 .
Dans la zone Nom , tapez CallingCodeFromVBA.
Cliquez sur OK.
L’Assistant Projet Visual Studio Tools pour Office s’ouvre.
Sélectionnez Copier un document existant et, dans le chemin d’accès complet de la zone de document existante , spécifiez l’emplacement du classeur WorkbookWithVBA que vous avez créé précédemment. Si vous utilisez votre propre classeur avec macro, spécifiez l’emplacement de ce classeur à la place.
Cliquez sur Terminer.
Visual Studio ouvre le classeur WorkbookWithVBA dans le concepteur et ajoute le projet CallingCodeFromVBA à l’Explorateur de solutions.
Faire confiance à l’emplacement du classeur
Avant de pouvoir exposer du code dans votre solution au code VBA dans le classeur, vous devez autoriser l'exécution de VBA dans le classeur. Il existe plusieurs façons de procéder. Dans cette procédure pas à pas, vous allez accomplir cette tâche en faisant confiance à l’emplacement du classeur dans le Centre de gestion de la confidentialité dans Excel.
Pour faire confiance à l’emplacement du classeur
Démarrez Excel.
Cliquez sur l’onglet Fichier .
Cliquez sur le bouton Options Excel .
Dans le volet Catégories, cliquez sur Centre de gestion de la confidentialité.
Dans le volet d’informations, cliquez sur Paramètres du Centre de gestion de la confidentialité.
Dans le volet Catégories, cliquez sur Emplacements approuvés.
Dans le volet d’informations, cliquez sur Ajouter un nouvel emplacement.
Dans la boîte de dialogue Emplacement approuvé Microsoft Office , accédez au dossier qui contient le projet CallingCodeFromVBA .
Sélectionnez Les sous-dossiers de cet emplacement sont également approuvés.
Dans la boîte de dialogue Emplacement approuvé Microsoft Office , cliquez sur OK.
Dans la boîte de dialogue Centre de gestion de la confidentialité, cliquez sur OK.
Dans la boîte de dialogue Options Excel , cliquez sur OK.
Quittez Excel.
Ajouter une méthode à la classe Sheet1
Maintenant que le projet VBA est configuré, ajoutez une méthode publique à la Sheet1 classe d’élément hôte que vous pouvez appeler à partir du code VBA.
Pour ajouter une méthode à la classe Sheet1
Dans l’Explorateur de solutions, cliquez avec le bouton droit sur Sheet1.cs, puis cliquez sur Afficher le code.
Le fichier Sheet1.cs s’ouvre dans l’Éditeur de code.
Ajoutez le code suivant à la
Sheet1classe. LaCreateVstoNamedRangeméthode crée un NamedRange objet à la plage spécifiée. Cette méthode crée également un gestionnaire d’événements pour l’événement Selected du NamedRange. Plus loin dans ce guide, vous allez appeler la méthodeCreateVstoNamedRangeà partir du code VBA dans le document.private Microsoft.Office.Tools.Excel.NamedRange namedRange1; public void CreateVstoNamedRange(Excel.Range range, string name) { if (!this.Controls.Contains(name)) { namedRange1 = this.Controls.AddNamedRange(range, name); namedRange1.Selected += new Excel.DocEvents_SelectionChangeEventHandler( namedRange1_Selected); } else { MessageBox.Show("A named range with this specific name " + "already exists on the worksheet."); } } private void namedRange1_Selected(Microsoft.Office.Interop.Excel.Range Target) { MessageBox.Show("This named range was created by Visual Studio " + "Tools for Office."); }Ajoutez la méthode suivante à la classe
Sheet1. Cette méthode remplace la GetAutomationObject méthode pour retourner l’instance actuelle de laSheet1classe.protected override object GetAutomationObject() { return this; }Appliquez les attributs suivants avant la première ligne de la
Sheet1déclaration de classe. Ces attributs rendent la classe visible par COM, mais sans générer d’interface de classe.[System.Runtime.InteropServices.ComVisible(true)] [System.Runtime.InteropServices.ClassInterface( System.Runtime.InteropServices.ClassInterfaceType.None)]
Extraire une interface pour la classe Sheet1
Avant de pouvoir exposer la CreateVstoNamedRange méthode au code VBA, vous devez créer une interface publique qui définit cette méthode et vous devez exposer cette interface à COM.
Pour extraire une interface pour la classe Sheet1
Dans le fichier de code Sheet1.cs , cliquez n’importe où dans la
Sheet1classe.Dans le menu Refactoriser , cliquez sur Extraire l’interface.
Dans la boîte de dialogue Extraire l’interface , dans la zone Sélectionner des membres publics pour former l’interface , cliquez sur l’entrée de la
CreateVstoNamedRangeméthode.Cliquez sur OK.
Visual Studio génère une nouvelle interface nommée
ISheet1et modifie la définition de laSheet1classe afin qu’elle implémente l’interfaceISheet1. Visual Studio ouvre également le fichier ISheet1.cs dans l’éditeur de code.Dans le fichier ISheet1.cs , remplacez la
ISheet1déclaration d’interface par le code suivant. Ce code rend l’interfaceISheet1publique et applique l’attribut ComVisibleAttribute pour rendre l’interface visible par COM.[System.Runtime.InteropServices.ComVisible(true)] public interface ISheet1 { void CreateVstoNamedRange(Microsoft.Office.Interop.Excel.Range range, string name); }Construisez le projet.
Exposer la méthode au code VBA
Pour exposer la CreateVstoNamedRange méthode au code VBA dans le classeur, définissez la propriété ReferenceAssemblyFromVbaProject de l’élément Sheet1 hôte sur True.
Pour exposer la méthode au code VBA
Dans l’Explorateur de solutions, double-cliquez sur Sheet1.cs.
Le fichier WorkbookWithVBA s’ouvre dans le concepteur, avec la feuille Sheet1 visible.
Dans la fenêtre Propriétés , sélectionnez la propriété ReferenceAssemblyFromVbaProject et remplacez la valeur par True.
Cliquez sur OK dans le message qui s’affiche.
Construisez le projet.
Appeler la méthode à partir du code VBA
Vous pouvez maintenant appeler la méthode CreateVstoNamedRange à partir du code VBA dans le classeur.
Note
Dans cette procédure pas à pas, vous allez ajouter du code VBA au classeur tout en déboguant le projet. Le code VBA que vous ajoutez à ce document sera remplacé la prochaine fois que vous générez le projet, car Visual Studio remplace le document dans le dossier de sortie de build par une copie du document à partir du dossier du projet principal. Si vous souhaitez enregistrer le code VBA, vous pouvez le copier dans le document dans le dossier du projet. Pour plus d’informations, consultez Combiner des personnalisations au niveau du document et VBA.
Pour appeler la méthode à partir du code VBA
Appuyez sur F5 pour exécuter votre projet.
Sous l’onglet Développeur , dans le groupe Code , cliquez sur Visual Basic.
Visual Basic Editor s’ouvre.
Dans le menu Insertion , cliquez sur Module.
Ajoutez le code suivant au nouveau module.
Ce code appelle la
CreateTableméthode dans l’assembly de personnalisation. La macro accède à cette méthode à l’aide de la méthode globaleGetManagedClasspour accéder à laSheet1classe d’élément hôte que vous avez exposée au code VBA. LaGetManagedClassméthode a été générée automatiquement lorsque vous définissez la propriété ReferenceAssemblyFromVbaProject précédemment dans cette procédure pas à pas.Sub CallVSTOMethod() Dim VSTOSheet1 As CallingCodeFromVBA.Sheet1 Set VSTOSheet1 = GetManagedClass(Sheet1) Call VSTOSheet1.CreateVstoNamedRange(Sheet1.Range("A1"), "VstoNamedRange") End SubAppuyez sur F5.
Dans le classeur ouvert, cliquez sur la cellule A1 de Sheet1. Vérifiez que la boîte de message s’affiche.
Quittez Excel sans enregistrer vos modifications.
Étapes suivantes
Vous pouvez en savoir plus sur l’appel de code dans les solutions Office à partir de VBA dans les rubriques suivantes :
Appelez du code dans un élément hôte dans une personnalisation Visual Basic à partir de VBA. Ce processus est différent du processus Visual C#. Pour plus d’informations, consultez Procédure pas à pas : appeler du code VBA dans un projet Visual Basic.
Exécutez du code dans un complément VSTO à partir de VBA. Pour plus d’informations, consultez Procédure pas à pas : appeler du code dans un complément VSTO à partir de VBA.
Contenu connexe
- Combiner VBA et des personnalisations au niveau du document
- Personnalisations au niveau du document du programme
- Guide pratique pour exposer du code à VBA dans un projet Visual Basic
- Guide pratique pour exposer du code à VBA dans un projet Visual C#
- Procédure pas à pas : appeler du code à partir de VBA dans un projet Visual Basic