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.
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
Version de Microsoft Office
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.
Dans Visual Studio, créez un projet de complément Excel 2007 et nommez-le ExcelDynamicControls.
Dans la boîte de dialogue Nouveau projet, sélectionnez Créer le répertoire pour la solution.
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
Dans le menu Projet, cliquez sur Ajouter un nouvel élément.
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.
Sous l'onglet Contrôles de ruban Office de la Boîte à outils, faites glisser un contrôle CheckBox sur group1.
Cliquez sur le contrôle CheckBox1 afin de le sélectionner.
Dans la fenêtre Propriétés, modifiez les propriétés suivantes.
Propriété
Valeur
Nom
Button
Label
Button
Ajoutez une deuxième case à cocher dans group1, puis modifiez les propriétés suivantes.
Propriété
Valeur
Nom
NamedRange
Label
NamedRange
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
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.
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 Subprivate 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); } }Dans l'Explorateur de solutions, sélectionnez Ribbon1.cs ou Ribbon1.vb.
Dans le menu Affichage, cliquez sur Concepteur.
Dans le Concepteur de ruban, double-cliquez sur NamedRange.
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 Subprivate 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); } }Dans le Concepteur de ruban, double-cliquez sur ListObject.
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 Subprivate 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); } }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.Extensionsusing 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
Dans l'Explorateur de solutions, sélectionnez ThisAddIn.cs ou ThisAddIn.vb.
Dans le menu Affichage, cliquez sur Code.
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 Subvoid 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); } } }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.
Appuyez sur F5 pour exécuter votre projet.
Sélectionnez n'importe quelle cellule dans Sheet1.
Cliquez sur l'onglet Compléments.
Dans le groupe group1, cliquez sur Bouton.
Un bouton apparaît dans la cellule sélectionnée.
Sélectionnez une cellule différente dans Sheet1.
Dans le groupe group1, cliquez sur NamedRange.
Une plage nommée est définie pour la cellule sélectionnée.
Sélectionnez une série de cellules dans Sheet1.
Dans le groupe group1, cliquez sur ListObject.
Un objet de liste est ajouté pour les cellules sélectionnées.
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 :
- Pour en savoir plus sur l'enregistrement de contrôles dans une feuille de calcul, consultez Contrôles dynamiques de complément Excel, exemple.
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
Autres ressources
Contrôles sur des documents Office
Historique des modifications
Date |
Historique |
Raison |
|---|---|---|
|
Juillet 2008 |
Ajout d'une rubrique. |
Modifications de fonctionnalités dans le SP1. |
Remarque :