Procédure pas à pas : ajouter des contrôles à une feuille de calcul au moment de l’exécution dans le projet de complément VSTO

Vous pouvez ajouter des contrôles à une feuille de calcul ouverte en utilisant un complément Excel VSTO. Cette procédure pas à pas montre comment utiliser le ruban pour permettre aux utilisateurs d'ajouter Button, NamedRange et ListObject à une feuille de calcul. Pour plus d’informations, consultez Ajouter des contrôles à Bureau documents au moment de l’exécution.

S’applique à : les informations contenues dans cette rubrique s’appliquent aux projets de complément VSTO pour Excel. Pour plus d’informations, consultez Fonctionnalités disponibles par type d’application et de projet Office.

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

  • Fournit une interface utilisateur permettant d'ajouter des contrôles à la feuille de calcul.

  • Ajout de contrôles à la feuille de calcul.

  • Suppression de contrôles dans la feuille de calcul.

    Remarque

    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.

Prérequis

Vous devez disposer des éléments suivants pour exécuter cette procédure pas à pas :

Créer un projet de complément VSTO Excel

Commencez par créer un projet de complément Excel VSTO.

Pour créer un projet de complément Excel VSTO

  1. Dans Visual Studio, créez un projet de complément VSTO Excel avec le nom ExcelDynamicControls. Pour plus d'informations, consultez How to: Create Office Projects in Visual Studio.

  2. Ajoutez une référence à Microsoft.Bureau. Assembly Tools.Excel.v4.0.Utilities.dll. Cette référence est obligatoire pour ajouter par programmation un contrôle Windows Forms à une feuille de calcul, plus loin dans cette procédure pas à pas.

Fournir une interface utilisateur pour ajouter des contrôles à une feuille de calcul

Ajoutez un onglet personnalisé au ruban Excel. Les utilisateurs peuvent cocher des cases sous l'onglet pour ajouter des contrôles à une feuille de calcul.

Pour fournir une interface utilisateur permettant d'ajouter des contrôles à une feuille de calcul

  1. Dans le menu Projet , cliquez sur Ajouter un nouvel élément.

  2. Dans la boîte de dialogue Ajouter un nouvel élément , sélectionnez Ruban (Concepteur visuel), puis cliquez sur Ajouter.

    Un fichier nommé Ribbon1.cs ou Ribbon1.vb s’ouvre dans le Concepteur de ruban et affiche un onglet et un groupe par défaut.

  3. À partir de l’onglet Contrôles du ruban Bureau de la boîte à outils, faites glisser un contrôle CheckBox sur le groupe1.

  4. Cliquez sur CheckBox1 pour le sélectionner.

  5. Dans la fenêtre Propriétés , changez les propriétés suivantes.

    Propriété Valeur
    Nom Button
    Étiquette Button
  6. Ajoutez une deuxième case à cocher pour group1, puis modifiez les propriétés suivantes.

    Propriété Valeur
    Nom NamedRange
    Étiquette NamedRange
  7. Ajoutez une troisième zone case activée au groupe1, puis modifiez les propriétés suivantes.

    Propriété Valeur
    Nom ListObject
    Étiquette ListObject

Ajouter des contrôles à la feuille de calcul

Les contrôles managés ne peuvent être ajoutés qu'aux éléments hôtes, lesquels servent de conteneurs. Dans la mesure où les projets de complément VSTO fonctionnent avec n'importe quel classeur ouvert, le complément VSTO convertit la feuille de calcul en élément hôte, ou récupère un élément hôte existant, avant d'ajouter le contrôle. Ajoutez du code aux gestionnaires d'événements click de chaque contrôle pour générer un élément hôte Worksheet basé sur la feuille de calcul ouverte. Ajoutez ensuite Button, NamedRange et ListObject à la sélection actuelle dans la feuille de calcul.

Pour ajouter des contrôles à une feuille de calcul

  1. Dans le Concepteur de ruban, double-cliquez sur Le bouton.

    Le Click gestionnaire d’événements de la zone Button case activée s’ouvre dans l’Éditeur de code.

  2. Remplacez le gestionnaire d'événements Button_Click par le code suivant.

    Ce code utilise la méthode GetVstoObject pour obtenir un élément hôte qui représente la première feuille de calcul du classeur, puis ajoute un contrôle Button à la cellule sélectionnée.

    private void Button_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet = Globals.Factory.GetVstoObject(
            Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
    
        
        string buttonName = "MyButton";
    
        if (((RibbonCheckBox)sender).Checked)
        {
            Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range;
            if (selection != null)
            {
                Microsoft.Office.Tools.Excel.Controls.Button button =
                    new Microsoft.Office.Tools.Excel.Controls.Button();
                worksheet.Controls.AddControl(button, selection, buttonName);
            }
        }
        else
        {
            worksheet.Controls.Remove(buttonName);
        }
    }
    
  3. Dans Explorateur de solutions, sélectionnez Ribbon1.cs ou Ribbon1.vb.

  4. Dans le menu Affichage , cliquez sur Concepteur.

  5. Dans le Concepteur de ruban, double-cliquez sur NamedRange.

  6. Remplacez le gestionnaire d'événements NamedRange_Click par le code suivant.

    Ce code utilise la méthode GetVstoObject pour obtenir un élément hôte qui représente la première feuille de calcul du classeur, puis définit un contrôle NamedRange pour la ou les cellules sélectionnées.

    private void NamedRange_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet = Globals.Factory.GetVstoObject(
            Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
    
    
        string Name = "MyNamedRange";
    
        if (((RibbonCheckBox)sender).Checked)
        {
            Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range;
            if (selection != null)
            {
                worksheet.Controls.AddNamedRange(selection, Name);
            }
        }
        else
        {
            worksheet.Controls.Remove(Name);
        }
    }
    
  7. Dans le Concepteur de ruban, double-cliquez sur ListObject.

  8. Remplacez le gestionnaire d'événements ListObject_Click par le code suivant.

    Ce code utilise la méthode GetVstoObject pour obtenir un élément hôte qui représente la première feuille de calcul du classeur, puis définit un ListObject pour la ou les cellules sélectionnées.

    private void ListObject_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet = Globals.Factory.GetVstoObject(
            Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]);
    
    
        string listObjectName = "MyListObject";
    
        if (((RibbonCheckBox)sender).Checked)
        {
            Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range;
            if (selection != null)
            {
                worksheet.Controls.AddListObject(selection, listObjectName);
            }
        }
        else
        {
            worksheet.Controls.Remove(listObjectName);
        }
    }
    
  9. Ajoutez les instructions suivantes au début du fichier de code du ruban.

    using Excel = Microsoft.Office.Interop.Excel;
    using Microsoft.Office.Tools.Excel;
    using Microsoft.Office.Tools.Excel.Extensions;
    

Supprimer des contrôles de la feuille de calcul

Les contrôles ne sont pas conservés quand la feuille de calcul est enregistrée et fermée. Supprimez par programmation tous les contrôles Windows Forms générés avant que la feuille de calcul ne soit enregistrée. Sinon, seul le contour du contrôle apparaît quand vous rouvrez le classeur. Ajoutez du code à l'événement WorkbookBeforeSave qui supprime les contrôles Windows Forms dans la collection de contrôles de l'élément hôte généré. Pour plus d’informations, consultez Conserver les contrôles dynamiques dans Bureau documents.

Pour supprimer des contrôles dans la feuille de calcul

  1. Dans Explorateur de solutions, sélectionnez ThisAddIn.cs ou ThisAddIn.vb.

  2. Dans le menu Affichage , cliquez sur Code.

  3. Ajoutez la méthode suivante à la classe ThisAddIn. Ce code récupère la première feuille de calcul du classeur, puis utilise la méthode HasVstoObject pour vérifier si la feuille de calcul possède un objet de feuille de calcul généré. Si l'objet de feuille de calcul généré possède des contrôles, le code récupère cet objet de feuille de calcul, puis effectue une itération dans la collection de contrôles, en supprimant ces derniers.

           void Application_WorkbookBeforeSave(Microsoft.Office.Interop.Excel.Workbook workbook, 
               bool SaveAsUI, ref bool Cancel)
           {
               Excel.Worksheet worksheet =
                   workbook.Worksheets[1] as Excel.Worksheet;
               
               if (Globals.Factory.HasVstoObject(worksheet) && 
                   Globals.Factory.GetVstoObject(worksheet).Controls.Count > 0)
               {
                   Worksheet vstoWorksheet = Globals.Factory.GetVstoObject(worksheet);
               
              
                   
                   while (vstoWorksheet.Controls.Count > 0)
                   {
                       object vstoControl = vstoWorksheet.Controls[0];
                       vstoWorksheet.Controls.Remove(vstoControl);
                   }
    
               }
           }
    
  4. En C#, vous devez créer un gestionnaire d'événements pour l'événement WorkbookBeforeSave. Vous pouvez placer ce code dans la méthode ThisAddIn_Startup. Pour plus d’informations sur la création de gestionnaires d’événements, consultez Guide pratique pour créer des gestionnaires d’événements dans Bureau projets. Remplacez la méthode ThisAddIn_Startup par le code suivant.

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        this.Application.WorkbookBeforeSave += 
            new Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeSaveEventHandler
                (Application_WorkbookBeforeSave);
    }
    

Test de la solution

Ajoutez des contrôles à une feuille de calcul en les sélectionnant dans un onglet personnalisé du ruban. Quand vous enregistrez la feuille de calcul, ces contrôles sont supprimés.

Pour tester la solution.

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

  2. Sélectionnez n'importe quelle cellule dans Feuil1.

  3. Cliquez sur l'onglet Compléments .

  4. Dans le groupe group1 , cliquez sur Bouton.

    Un bouton s'affiche dans la cellule sélectionnée.

  5. Sélectionnez une autre cellule dans Feuil1.

  6. Dans le groupe group1 , cliquez sur NamedRange.

    Une plage nommée est définie pour la cellule sélectionnée.

  7. Sélectionnez une série de cellules dans Feuil1.

  8. Dans le groupe group1 , cliquez sur ListObject.

    Un objet de liste est ajouté pour les cellules sélectionnées.

  9. Enregistrez la feuille de calcul.

    Les contrôles que vous avez ajoutés à Feuil1 ne s'affichent plus.

Étapes suivantes

Pour plus d’informations sur les contrôles dans les projets de complément Excel VSTO, consultez cette rubrique :

  • Pour en savoir plus sur l’enregistrement des contrôles dans une feuille de calcul, consultez l’exemple de contrôles dynamiques vsto Excel dans Bureau exemples de développement et procédures pas à pas.