Procédure pas à pas : ajout de contrôles à une feuille de calcul au moment de l'exécution dans un projet d'application

Mise à jour : Juillet 2008

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 de l'application

Version de Microsoft Office

  • Excel 2007

Pour plus d'informations, consultez Fonctionnalités disponibles par type d'application et de projet.

Vous pouvez ajouter des contrôles à n'importe quelle feuille de calcul ouverte à l'aide d'un complément Excel 2007. Cette procédure pas à pas explique comment utiliser le ruban pour permettre aux utilisateurs d'ajouter Button, NamedRange et ListObject à une feuille de calcul.

Pour plus d'informations, consultez Ajout de contrôles à des documents Office au moment de l'exécution.

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

  • Fourniture d'une interface utilisateur (IU) permettant d'ajouter des contrôles à la feuille de calcul.

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

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

Remarque :

Il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains des éléments d'interface utilisateur 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 :

  • Visual Studio Tools pour Office (composant facultatif de Visual Studio 2008 Professional et Visual Studio Team System).

  • Visual Studio 2008 Service Pack 1 (SP1).

  • Microsoft Office Excel 2007.

Création d'un projet de complément Excel.

Démarrez en créant un projet de complément Excel 2007.

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

  1. Dans Visual Studio, créez un projet de complément Excel 2007 et nommez-le ExcelDynamicControls.

  2. Dans la boîte de dialogue Nouveau projet, sélectionnez Créer le répertoire pour la solution.

  3. Enregistrez le projet à l'emplacement de votre choix.

    Pour plus d'informations, consultez Comment : créer des projets Visual Studio Tools pour Office.

Fourniture d'une interface utilisateur permettant l'ajout de contrôles à une feuille de calcul

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

Pour fournir une interface utilisateur permettant l'ajout de 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. Sous l'onglet Contrôles de ruban Office de la Boîte à outils, faites glisser un contrôle CheckBox sur group1.

  4. Cliquez sur le contrôle CheckBox1 afin de le sélectionner.

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

    Propriété

    Valeur

    Nom

    Button

    Label

    Button

  6. Ajoutez une deuxième case à cocher dans group1, puis modifiez les propriétés suivantes.

    Propriété

    Valeur

    Nom

    NamedRange

    Label

    NamedRange

  7. Ajoutez une troisième case à cocher dans group1, puis modifiez les propriétés suivantes.

    Propriété

    Valeur

    Nom

    ListObject

    Label

    ListObject

Ajout de contrôles à la feuille de calcul

Les contrôles gérés peuvent être ajoutés uniquement aux éléments hôtes, qui agissent comme des conteneurs. Comme les projets de complément fonctionnent avec n'importe quel classeur ouvert, le complément convertit la feuille de calcul en un élément hôte ou obtient un élément hôte existant, avant d'ajouter le contrôle. Ajoutez le 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. Ensuite, ajoutez un Button, un NamedRangeet un 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 Bouton.

    Le gestionnaire d'événements Click de la case à cocher Bouton 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 dans le classeur, puis ajoute un contrôle Button à la cellule actuellement sélectionnée.

    Private Sub Button_Click(ByVal sender As System.Object, _
        ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _
            Handles Button.Click
        Dim worksheet = CType(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1),  _
            Excel.Worksheet).GetVstoObject()
        Dim buttonName As String = "MyButton"
    
        If CType(sender, RibbonCheckBox).Checked Then
            Dim selection As Excel.Range = Globals.ThisAddIn.Application.Selection
            If Not (selection Is Nothing) Then
                Dim button As New Microsoft.Office.Tools.Excel.Controls.Button()
                worksheet.Controls.AddControl(button, selection, buttonName)
            End If
        Else
            worksheet.Controls.Remove(buttonName)
        End If
    End Sub
    
    private void Button_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet = ((Excel.Worksheet)
            Globals.ThisAddIn.Application.
                ActiveWorkbook.Worksheets[1]).GetVstoObject();
        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 l'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 dans le classeur, puis définit un contrôle NamedRange pour la ou les cellules actuellement sélectionnées.

    Private Sub NamedRange_Click(ByVal sender As System.Object, _
        ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _
            Handles NamedRange.Click
        Dim worksheet = CType(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1),  _
            Excel.Worksheet).GetVstoObject()
        Dim rangeName As String = "MyNamedRange"
    
        If CType(sender, RibbonCheckBox).Checked Then
            Dim selection As Excel.Range = Globals.ThisAddIn.Application.Selection
            If Not (selection Is Nothing) Then
                Dim namedRange As NamedRange = _
                    worksheet.Controls.AddNamedRange(selection, rangeName)
            End If
        Else
            worksheet.Controls.Remove(rangeName)
        End If
    End Sub
    
    private void NamedRange_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet =
              ((Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.
                  Worksheets[1]).GetVstoObject();
        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 dans le classeur, puis définit un ListObject pour la ou les cellules actuellement sélectionnées.

    Private Sub ListObject_Click(ByVal sender As System.Object, _
        ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _
            Handles ListObject.Click
        Dim worksheet = CType(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1),  _
            Excel.Worksheet).GetVstoObject()
        Dim listObjectName As String = "MyListObject"
    
        If CType(sender, RibbonCheckBox).Checked Then
            Dim selection As Excel.Range = _
                Globals.ThisAddIn.Application.Selection
            If Not (selection Is Nothing) Then
                worksheet.Controls.AddListObject(selection, listObjectName)
            End If
        Else
            worksheet.Controls.Remove(listObjectName)
        End If
    End Sub
    
    private void ListObject_Click(object sender, RibbonControlEventArgs e)
    {
        Worksheet worksheet =
              ((Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook.
                  Worksheets[1]).GetVstoObject();
        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 Using suivantes au début du fichier de code du ruban.

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

Suppression de contrôles de la feuille de calcul

Les contrôles ne sont pas rendus persistants lorsque la feuille de calcul est enregistrée et fermée. Vous devez supprimer par programme tout contrôle Windows Forms généré avant que la feuille de calcul soit enregistrée, sinon, seul un contour du contrôle apparaît lorsque le classeur est rouvert. Ajoutez du code à l'événement WorkbookBeforeSave qui supprime des contrôles Windows Forms de la collection de contrôles de l'élément hôte généré. Pour plus d'informations, consultez Rendre des contrôles dynamiques persistants dans des documents Office.

Pour supprimer des contrôles de la feuille de calcul

  1. Dans l'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 prend la première feuille de calcul dans le classeur, puis utilise la méthode HasVstoObject pour vérifier si la feuille de calcul possède un objet de feuille de calcul Visual Studio Tools pour Office généré. Si la feuille de calcul générée possède des contrôles, le code obtient cet objet de feuille de calcul et parcourt la collection de contrôles, en supprimant les contrôles.

    Sub Application_WorkbookBeforeSave _
        (ByVal workbook As Microsoft.Office.Interop.Excel.Workbook, _
         ByVal SaveAsUI As Boolean, ByRef Cancel As Boolean) _
         Handles Application.WorkbookBeforeSave
    
        Dim worksheet As Excel.Worksheet = workbook.Worksheets(1)
        If worksheet.HasVstoObject() And worksheet.GetVstoObject().Controls.Count > 0 Then
            Dim vstoWorksheet As Worksheet = worksheet.GetVstoObject()
    
            While vstoWorksheet.Controls.Count > 0 
                Dim vstoControl As Object = vstoWorksheet.Controls(0) 
                vstoWorksheet.Controls.Remove(vstoControl) 
            End While
        End If
    End Sub
    
    void Application_WorkbookBeforeSave(Microsoft.Office.Interop.Excel.Workbook workbook, 
        bool SaveAsUI, ref bool Cancel)
    {
        Excel.Worksheet worksheet =
            workbook.Worksheets[1] as Excel.Worksheet;
    
        if (worksheet.HasVstoObject() && worksheet.GetVstoObject().Controls.Count > 0)
        {
            Worksheet vstoWorksheet = worksheet.GetVstoObject();
    
            while (vstoWorksheet.Controls.Count > 0)
            {
                object vstoControl = vstoWorksheet.Controls[0];
                vstoWorksheet.Controls.Remove(vstoControl);
            }
    
        }
    }
    
  4. Dans 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 Comment : créer des gestionnaires d'événements dans Visual Studio Tools pour Office. Remplacez la méthode ThisAddIn_Startup par le code ci-dessous.

    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 à partir d'un onglet personnalisé sur le ruban. Lorsque 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 Sheet1.

  3. Cliquez sur l'onglet Compléments.

  4. Dans le groupe group1, cliquez sur Bouton.

    Un bouton apparaît dans la cellule sélectionnée.

  5. Sélectionnez une cellule différente dans Sheet1.

  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 Sheet1.

  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 à Sheet1 n'apparaissent plus.

Étapes suivantes

Vous pouvez en savoir plus sur les contrôles dans les projets de complément Excel 2007 dans cette rubrique :

Voir aussi

Concepts

Développement d'un complément d'application pour Excel

Utilisation de contrôles Windows Forms sur des feuilles de calcul Excel

NamedRange, contrôle

ListObject, contrôle

Autres ressources

Contrôles sur des documents Office

Contrôles hôtes Excel

Historique des modifications

Date

Historique

Raison

Juillet 2008

Ajout d'une rubrique.

Modifications de fonctionnalités dans le SP1.