Création de volets Office personnalisés à l'aide de Visual Studio Tools pour Office

Paru le 22 novembre 2006

Résumé : La version 2007 du système Microsoft Office offre des volets Office personnalisés améliorés vous permettant de fournir une assistance contextuelle aux utilisateurs. Apprenez à créer des volets Office personnalisés avec Microsoft Visual Studio 2005 Tools pour le système Microsoft Office 2007. (25 pages imprimées)

Robert Green, MCW Technologies, LLC

Octobre 2006

S'applique à : Microsoft Visual Studio 2005 Tools pour le système Microsoft Office 2007, Suites Microsoft Office 2007, Microsoft Office Excel 2007, Microsoft Office InfoPath 2007, Microsoft Office Outlook 2007, Microsoft Office PowerPoint 2007, Microsoft Office Word 2007, Microsoft Visual Studio 2005 Tools pour Microsoft Office System

Create-Custom-Task-Panes-Using-Visual-Studio-Tools-for-Office

Sur cette page

Volets Office personnalisés Volets Office personnalisés
Création de volets Office personnalisés à l'aide de Visual Studio Tools pour Office Deuxième édition Création de volets Office personnalisés à l'aide de Visual Studio Tools pour Office Deuxième édition
Affichage des volets Office personnalisés au moyen de l'interface ruban Affichage des volets Office personnalisés au moyen de l'interface ruban
Création de volets Office personnalisés liés aux données Création de volets Office personnalisés liés aux données
Conclusion Conclusion
Ressources supplémentaires Ressources supplémentaires

Volets Office personnalisés

Microsoft Office 2003 a introduit le volet Office Actions de document. Un volet Office est un panneau qui peut être ancré sur le côté de l'espace de travail pour fournir une assistance contextuelle aux utilisateurs. Les produits Microsoft Office 2003 incluent plusieurs volets Office. Certains de ces volets, y compris Aide et Recherche, figurent dans chacune des applications. D'autres sont spécifiques à une application, tels que Nouveau document et Nouveau classeur.

Si vous concevez des solutions avec Microsoft Visual Studio 2005 Tools pour Microsoft Office System (également appelé Visual Studio Tools pour Office), vous avez la possibilité de créer des volets Office de niveau document personnalisés, appelés « volets d'actions ». Ces volets peuvent être associés à des documents Microsoft Office Word 2003 et des classeurs Microsoft Office Excel 2003. Par exemple, vous pouvez créer des volets d'actions aidant les utilisateurs à remplir des notes de frais dans Excel ou à rédiger des lettres destinées à de nouveaux clients dans Word.

Visual Studio Tools pour Office inclut le contrôle de volet d'actions. Il s'agit d'un contrôle Microsoft Windows Forms figurant dans le volet Office Actions de document de Word et d'Excel. Le contrôle de volet d'actions peut contenir d'autres contrôles Windows Forms. Pour créer un volet d'actions pour un document ou un classeur, vous avez la possibilité de définir un contrôle utilisateur contenant l'interface que vous souhaitez présenter aux utilisateurs. Vous pouvez ensuite ajouter le contrôle utilisateur à la collection de contrôles du volet d'actions pour qu'il apparaisse dans le volet Office Word ou Excel. Le code ci-dessous permet d'ajouter un contrôle utilisateur, appelé CalendarControl, à la collection de contrôles appartenant à l'objet ActionsPane.

Visual Basic

        Me.ActionsPane.Controls.Add(New CalendarControl)
      

C#

        this.ActionsPane.Controls.Add(new CalendarControl());
      

Les volets d'actions d'Office 2003 appartiennent à un seul document ou classeur. Vous pouvez ajouter un volet d'actions à autant de documents que vous le souhaitez. Il vous suffit d'associer un assembly de personnalisation à chaque document ou classeur et d'inclure le code (semblable à celui présenté ci-dessus) dans la personnalisation.

La version 2007 du système Microsoft Office étend le modèle de volet Office personnalisé. Les volets Office personnalisés sont maintenant disponibles au niveau application et au niveau document. Vous pouvez créer un volet Office personnalisé au niveau application qui assiste les utilisateurs quel que soit le document ouvert. Par exemple, vous avez la possibilité de créer un volet Office personnalisé permettant aux utilisateurs de sélectionner une succursale régionale et d'insérer l'heure actuelle de cette succursale dans la diapositive, le document ou le classeur ouvert.

Une autre amélioration apportée aux volets Office personnalisés tient au fait qu'il est désormais possible d'en ouvrir plusieurs à la fois.

Pour faciliter l'utilisation de ces nouveaux volets Office personnalisés, Visual Studio Tools pour Office offre un ensemble d'outils, appelé Microsoft Visual Studio 2005 Tools pour le système Microsoft Office 2007 (également connu sous le nom Visual Studio 2005 Tools pour Office Deuxième édition).

Les volets Office personnalisés sont disponibles dans les applications suivantes :

  • Microsoft Office Access 2007

  • Microsoft Office Excel 2007

  • Microsoft Office InfoPath 2007

  • Microsoft Office Outlook 2007

  • Microsoft Office PowerPoint 2007

  • Microsoft Office Word 2007

Remarque :

Les volets Office sont disponibles dans Access 2007, mais Visual Studio 2005 Tools pour Office Deuxième édition n'intègre pas les outils permettant de les créer dans Access.

Création de volets Office personnalisés à l'aide de Visual Studio Tools pour Office Deuxième édition

Cet exercice vous montre comment créer un complément pour Word 2007. Ce complément inclut un volet Office personnalisé permettant à l'utilisateur de sélectionner une date à partir d'un contrôle Calendrier et de l'insérer dans un document.

Pour créer un projet Complément Word

  • Démarrez Microsoft Visual Studio 2005.

  • Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet.

  • Dans la boîte de dialogue Nouveau projet, développez le nœud Visual Basic ou Visual C# pour afficher les types de projets. Développez ensuite le nœud Office et sélectionnez Compléments 2007.

  • Dans le volet Modèles, sélectionnez Complément Word.

  • Tapez VSTOWordAddIn dans la zone Nom et cliquez sur OK.

  • Si vous utilisez Visual Basic, dans l'Explorateur de solutions, cliquez sur Afficher tous les fichiers.

  • Dans l'Explorateur de solutions, développez le nœud Références.

Notez que Visual Studio a ajouté plusieurs références relatives à Office au projet. Elles incluent Microsoft.Office.Core, qui est une référence à la bibliothèque d'objets Microsoft Office 12.0 et Word, qui est une référence à la bibliothèque d'objets Microsoft Word 12.0.

Vous pouvez ajouter un contrôle utilisateur personnalisé au projet. Ce contrôle contient lui-même un contrôle Calendrier et s'affiche dans le volet Office personnalisé. Écrivez le code permettant d'insérer dans le document la date actuellement sélectionnée dans le calendrier.

Pour créer un contrôle utilisateur pour le volet Office personnalisé

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

  • Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez Contrôle utilisateur.

  • Tapez CalendarControl dans la zone Nom, puis cliquez sur Ajouter.

  • Définissez les propriétés Width et Height du contrôle utilisateur sur 200.

  • Dans la boîte à outils, faites glisser un contrôle MonthCalendar sur le contrôle utilisateur. Placez le contrôle MonthCalendar dans la partie supérieure gauche du contrôle utilisateur.

  • Dans la fenêtre Propriétés, développez la propriété Location du contrôle MonthCalendar. Définissez les propriétés X et Y sur 9.

  • Définissez la propriété MaxSelectionCount sur 1 pour que l'utilisateur ne puisse sélectionner qu'un jour à la fois, et non pas une plage de dates.

  • Dans la boîte à outils, faites glisser un contrôle Bouton sur le contrôle utilisateur. Placez le contrôle Bouton sous le contrôle Calendrier.

  • Définissez la propriété Text du bouton sur Insérer la date. Élargissez le bouton pour que le texte soit visible et centrez-le horizontalement dans le contrôle utilisateur.

  • Cliquez deux fois sur le bouton pour afficher l'éditeur de code.

    Si vous utilisez C#, ajoutez l'instruction ci-dessous au début du fichier de code. (Étant donné que Visual Basic importe automatiquement cette bibliothèque, il n'est pas nécessaire d'ajouter une instruction Imports équivalente.)

    C#

            using Word = Microsoft.Office.Interop.Word;
          
  • Ajoutez la déclaration ci-dessous.

    Visual Basic

            Private myRange As Word.Range
          

    C#

    private Word.Range myRange = null;
  • Ajoutez le code ci-dessous au gestionnaire d'événements Click du bouton pour insérer la date sélectionnée dans le document Word actif. ActiveDocument.Content est un objet Range représentant le document principal.

    Visual Basic

            myRange = Globals.ThisAddIn.Application.ActiveDocument.Content
            Try
            myRange.InsertAfter( _
            MonthCalendar1.SelectionStart.ToShortDateString)
            Catch
            MessageBox.Show(
            "The information could not be added to the document")
            End Try
          

    C#

            myRange = Globals.ThisAddIn.Application.ActiveDocument.Content;
            try
            {
            myRange.InsertAfter(
            monthCalendar1.SelectionStart.ToShortDateString());
            }
            catch
            {
            MessageBox.Show(
            "The information could not be added to the document");
            }
          

Dans cet exemple, vous avez ajouté le contrôle utilisateur au projet. Vous pouvez également créer un projet de bibliothèque de contrôles Windows pour le contrôle utilisateur. Cela vous permettra de créer le contrôle une seule fois et de l'utiliser dans plusieurs projets. Si vous devez apporter des modifications ultérieurement, vous n'aurez à les effectuer qu'à un seul endroit.

Pour faire apparaître automatiquement le volet Office

  • Dans l'Explorateur de solutions, cliquez à l'aide du bouton droit de la souris sur ThisAddin, puis cliquez sur Afficher le code dans le menu contextuel.

  • Ajoutez la déclaration ci-dessous.

    Visual Basic

            Private ctpCalendar As Microsoft.Office.Tools.CustomTaskPane
          

    C#

            private Microsoft.Office.Tools.CustomTaskPane ctpCalendar = null;
          
  • Ajoutez le code ci-dessous au gestionnaire d'événements Startup pour afficher le contrôle Calendrier dans un volet Office personnalisé. Le code crée un volet Office personnalisé et l'ajoute à la collection de volets Office personnalisés appartenant à ce complément. La méthode Add employée dans cet exemple utilise deux paramètres : un contrôle à ajouter au volet Office personnalisé et le titre à afficher sur le volet Office.

    Par défaut, les applications Microsoft Office n'affichent pas le volet Office personnalisé. Vous devez définir la propriété Visible sur true pour faire apparaître le volet Office.

    Visual Basic

            ctpCalendar = Me.CustomTaskPanes.Add(New CalendarControl(), _
            "Select a date")
            ctpCalendar.Visible = True
          

    C#

            ctpCalendar = this.CustomTaskPanes.Add(new CalendarControl(),
            "Select a date");
            ctpCalendar.Visible = true;
          
  • Ajoutez le code ci-dessous au gestionnaire d'événements Shutdown pour supprimer le volet Office personnalisé de la collection de volets Office personnalisés du complément.

    Visual Basic

    Me.CustomTaskPanes.Remove(ctpCalendar)

    C#

    this.CustomTaskPanes.Remove(ctpCalendar);
  • Dans le menu Fichier, cliquez sur Enregistrer tout.

  • Dans le menu Générer, cliquez sur Générer la solution et vérifiez que le projet se compile correctement.

  • Appuyez sur F5 pour exécuter l'application.

    Le volet Office personnalisé est ancré à droite du document. Il est intitulé Sélection d'une date. Il contient un contrôle Calendrier et un bouton Insérer la date.

    Figure 1. Contrôle Calendrier affiché dans un volet Office personnalisé

    Contrôle Calendrier affiché dans un volet Office personnalisé

  • Sélectionnez une date dans le contrôle Calendrier et cliquez sur Insérer la date.

    La date est insérée dans le document au format mm/jj/aaaa.

  • Quittez Word.

Vous pouvez tirer parti de vos compétences de développement Visual Studio dans Office. Vous avez la possibilité de réutiliser les techniques, le code et les éléments d'interface utilisateur existants. Vous pouvez copier les contrôles d'un formulaire Windows Form dans un contrôle utilisateur pour les utiliser dans un volet Office personnalisé. Pour utiliser un contrôle utilisateur existant, il vous suffit de l'ajouter à votre projet. Vous pouvez ensuite écrire du code pour interagir avec les diverses applications Office et appeler ce code à partir des gestionnaires d'événements utilisés dans les applications Windows.

Affichage des volets Office personnalisés au moyen de l'interface ruban

Le document téléchargeable 2007 Office System Document: UI Style Guide for Solutions and Add-Ins (Document sur le système Office 2007 : Guide de style de l'interface utilisateur pour les solutions et les compléments, en anglais) fournit la recommandation suivante :

« Les volets Office ou les boîtes de dialogue n'apparaissent pas automatiquement à l'ouverture d'un document. Seules les opérations de l'utilisateur doivent permettre d'ouvrir et de fermer des volets Office ou des boîtes de dialogue. Idéalement, tous les volets Office sont ouverts au moyen d'un bouton de l'interface ruban. »

Cette recommandation est judicieuse pour les solutions Office 2003 et semble encore plus fondée pour les solutions utilisant les applications Microsoft Office 2007, étant donné que plusieurs volets Office peuvent maintenant être ouverts simultanément. Imaginons qu'un utilisateur ait chargé trois compléments permettant chacun de créer deux volets Office personnalisés. Il ne souhaite certainement pas que six volets Office s'affichent lorsqu'il ouvre un document ou un classeur.

Une solution plus appropriée consiste à lui permettre d'afficher et de masquer les volets Office selon ses besoins. Cet exercice vous montre comment ajouter un onglet à l'interface ruban. L'onglet inclut un bouton permettant d'ouvrir et de fermer le volet Office créé précédemment.

Le code permettant d'afficher le volet Office personnalisé se trouve actuellement dans le gestionnaire d'événements Startup. Par conséquent, le volet Office s'affiche automatiquement lors de l'exécution du complément. Vous devez d'abord créer des méthodes permettant d'ajouter et de supprimer le volet Office personnalisé, puis écrire le code appelant ces méthodes lorsque l'utilisateur clique sur un bouton de l'interface ruban.

Pour que le volet Office s'affiche suite à une opération de l'utilisateur

  • Dans Visual Studio, revenez au fichier de code ThisAddin.

  • Définissez une méthode appelée AddCalendarTaskPane pour créer le volet Office personnalisé. Placez le code du gestionnaire d'événements Startup dans cette méthode et ajoutez le code en gras pour que le volet soit ancré à gauche plutôt qu'à droite.

    Visual Basic

            Public Sub AddCalendarTaskPane()
            ctpCalendar = Me.CustomTaskPanes.Add(New CalendarControl(), _
            "Select a date")
            ctpCalendar.DockPosition = _
            Microsoft.Office.Core.MsoCTPDockPosition.msoCTPDockPositionLeft
            ctpCalendar.Visible = True
            End Sub
          

    C#

            public void AddCalendarTaskPane()
            {
            ctpCalendar = this.CustomTaskPanes.Add(new CalendarControl(),
            "Select a date");
            ctpCalendar.DockPosition =
            Microsoft.Office.Core.
            MsoCTPDockPosition.msoCTPDockPositionLeft;
            ctpCalendar.Visible = true;
            }
          
  • Créez la méthode ci-dessous pour supprimer le volet Office personnalisé.

    Visual Basic

            Public Sub RemoveCalendarTaskPane()
            Me.CustomTaskPanes.Remove(ctpCalendar)
            End Sub
          

    C#

            public void RemoveCalendarTaskPane()
            {
            this.CustomTaskPanes.Remove(ctpCalendar);
            }
          
  • Remplacez le code du gestionnaire d'événements Shutdown par ce qui suit :

    Visual Basic

    RemoveCalendarTaskPane()

    C#

            RemoveCalendarTaskPane();
          

L'interface ruban remplace le système précédent, dans lequel menus, barres d'outils et volets Office étaient superposés, par un système d'interfaces plus simple, optimisé pour une plus grande efficacité et une meilleure découverte des données.. Vous pouvez personnaliser l'interface ruban avec XML, puis écrire du code pour répondre aux opérations des utilisateurs.

Remarque :

L'article Customizing the Office (2007) Ribbon User Interface for Developers (Part 1 of 2) (Personnalisation de l'interface utilisateur ruban d'Office 2007 pour les développeurs partie 1 sur 2, en anglais) fournit une description détaillée de l'interface ruban et présente divers scénarios de personnalisation.

Visual Studio 2005 Tools for Office Deuxième édition fournit le modèle d'élément permettant la prise en charge de l'interface ruban. Il s'agit d'une classe permettant de personnaliser l'interface ruban par le biais de XML. Une fois que vous avez ajouté cet élément à un projet, vous pouvez personnaliser le code XML généré pour ajouter vos propres onglets et boutons à l'interface ruban. Vous avez également la possibilité de personnaliser le code de classe créé par Visual Studio pour répondre aux besoins de votre solution.

Pour personnaliser l'interface ruban

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

  • Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez Prise en charge de l'interface ruban, puis cliquez sur Ajouter.

    Deux fichiers sont ajoutés au projet. Ribbon1.vb ou Ribbon1.cs définit la classe Ribbon1 et Ribbon1.xml contient une personnalisation XML de l'interface ruban.

  • Dans l'Explorateur de solutions, cliquez avec le bouton droit de la souris sur Ribbon1.xml, puis cliquez sur Ouvrir.

    Le code XML de ce fichier se présente comme indiqué ci-dessous. Il s'agit d'un modèle de personnalisation de l'interface ruban.

    Xml

            <customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui" onLoad="OnLoad">
            <ribbon>
            <tabs>
            <tab id="MyTab"
            label="My Tab">
            <group id="MyGroup"
            label="My Group">
            <toggleButton id="toggleButton1"
            size="large"
            label="My Button"
            screentip="My Button Screentip"
            onAction="OnToggleButton1"
            imageMso="HappyFace" />
            </group>
            </tab>
            </tabs>
            </ribbon>
            </customUI>
          
  • Remplacez le code XML figurant dans le fichier par le code ci-dessous. Ce nouveau code XML crée un onglet intitulé Compléments VSTO. Il définit ensuite un groupe, appelé Personnel d'assistance, dans le nouvel onglet. Le groupe contient un bouton portant le libellé Insérer la date et une image d'un calendrier. Lorsque l'utilisateur clique sur le bouton, le code contenu dans la méthode CalendarButtonClick (présentée ultérieurement) s'exécute.

    Xml

            <customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui" onLoad="OnLoad">
            <ribbon>
            <tabs>
            <tab id="VSTOAddIns" label="VSTO Add-ins" >
            <group id="Group1" label="Helpers" visible ="1">
            <button id="Calendar" label="Insert date"
            onAction="CalendarButtonClick"
            imageMso="ContentControlDate"/>
            </group>
            </tab>
            </tabs>
            </ribbon>
            </customUI>
          
  • Dans le fichier de code Ribbon1, annulez la mise en commentaire du code suivant :

    Visual Basic

            Partial Public Class ThisAddIn
    
            Private ribbon As Ribbon1
    
            Protected Overrides Function RequestService(ByVal serviceGuid As Guid) As Object
            If serviceGuid = GetType(Office.IRibbonExtensibility).GUID Then
            If ribbon Is Nothing Then
            ribbon = New Ribbon1()
            End If
            Return ribbon
            End If
    
            Return MyBase.RequestService(serviceGuid)
            End Function
    
            End Class
          

    C#

            public partial class ThisAddIn
            {
            private Ribbon1 ribbon;
            protected override object RequestService(Guid serviceGuid)
            {
            if (serviceGuid == typeof(Office.IRibbonExtensibility).GUID)
            {
            if (ribbon == null)
            ribbon = new Ribbon1();
            return ribbon;
            }
    
            return base.RequestService(serviceGuid);
            }
            }
          

    Lorsque votre complément se charge, Office lui demande s'il prend en charge l'interface IRibbonExtensibility. Le rôle du code ci-dessus consiste à répondre à cette interrogation et à renvoyer à Office l'objet implémentant cette interface. Cet objet est la classe Ribbon1.

    Visual Basic

            <ComVisible(True)> _
            Public Class Ribbon1
            Implements Office.IRibbonExtensibility
          

    C#

            [ComVisible(true)]
            public class Ribbon1 : Office.IRibbonExtensibility
          

    Office appelle ensuite la méthode GetCustomUI de la classe Ribbon1. Cette méthode renvoie le code XML qui contient la personnalisation de l'interface ruban.

    Visual Basic

            Public Function GetCustomUI(ByVal ribbonID As String) As String _
            Implements Office.IRibbonExtensibility.GetCustomUI
            Return GetResourceText("VSTOWordAddIn.Ribbon1.xml")
            End Function
          

    C#

            public string GetCustomUI(string ribbonID)
            {
            return GetResourceText("VSTOWordAddIn.Ribbon1.xml");
            }
          

    La propriété Action de génération du fichier XML est définie sur Ressource incorporée. Visual Studio génère le fichier XML dans l'assembly du complément. La méthode GetResourceText extrait le code XML et la méthode GetCustomUI, puis renvoie le code XML vers Office.

    Les étapes suivantes illustrent une autre approche permettant d'ajouter des ressources au projet à l'aide du Concepteur de ressources. Cette méthode génère des ressources fortement typées auxquelles vous pouvez accéder à l'aide de My.Resources dans Visual Basic ou Properties.Resources dans Visual C#.

  • Dans le menu Projet, cliquez sur Propriétés VSTOWordAddIn.

    Le Concepteur de projets s'ouvre.

  • Cliquez sur l'onglet Ressources.

  • Cliquez sur la flèche associée au bouton Ajouter une ressource, puis sur Ajouter un fichier existant.

  • Dans la boîte de dialogue Ajouter le fichier existant aux ressources, accédez au dossier de projet en cours.

  • Sélectionnez Ribbon1.xml, puis cliquez sur Ouvrir.

  • Fermez le Concepteur de projets en enregistrant vos modifications si vous y êtes invité.

  • Dans le fichier Ribbon1, remplacez le code de la méthode GetCustomUI par ce qui suit afin d'extraire et de renvoyer le code XML de personnalisation de l'interface ruban :

    Visual Basic

            Return My.Resources.Ribbon1
          

    C#

            Return Properties.Resources.Ribbon1;
          
  • Supprimez la méthode GetResourceText. Étant donné que vous avez remplacé l'appel de cette méthode par le code ci-dessus, vous n'avez plus besoin de cette méthode.

    Dans le fichier Ribbon1.xml, vous avez indiqué que le code figurant dans la méthode CalendarButtonClick devait s'exécuter lorsque l'utilisateur clique sur le bouton Informations client.

    Xml

            onAction="CalendarButtonClick"
          

    L'étape finale consiste à ajouter cette méthode.

Pour répondre aux utilisateurs qui cliquent sur un bouton de l'interface ruban

  • Dans la zone Rappels de l'interface ruban, localisez et supprimez la méthode OnToggleButton1. Le modèle de code XML d'interface ruban que vous avez précédemment remplacé fait référence à cette méthode. Vous n'avez plus besoin de cette méthode.

  • Ajoutez la déclaration suivante à la classe Ribbon1 :

    Visual Basic

            Private calendarControlExists As Boolean
          

    C#

            private bool calendarControlExists;
          
  • Ajoutez la méthode ci-dessous à la classe Ribbon1 afin de répondre lorsque l'utilisateur clique sur le bouton Insérer la date dans l'interface ruban. Ce code vérifie si le volet Office personnalisé existe. S'il existe, le code appelle la méthode pour supprimer le volet Office. S'il n'existe pas, le code appelle la méthode pour ajouter le volet Office.

    Visual Basic

            Public Sub CalendarButtonClick(ByVal control As _
            Office.IRibbonControl)
            If Not calendarControlExists Then
            Globals.ThisAddIn.AddCalendarTaskPane()
            Else
            Globals.ThisAddIn.RemoveCalendarTaskPane()
            End If
            calendarControlExists = Not calendarControlExists
            End Sub
          

    C#

            public void CalendarButtonClick(Office.IRibbonControl control)
            if (!calendarControlExists)
            {
            Globals.ThisAddIn.AddCalendarTaskPane();
            }
            else
            {
            Globals.ThisAddIn.RemoveCalendarTaskPane();
            }
            calendarControlExists = !calendarControlExists;
          

    Une autre approche consiste à créer le volet Office personnalisé sans l'afficher au démarrage de Word. Vous pouvez ensuite modifier la propriété Visible de façon à ce que l'utilisateur affiche ou masque le volet Office en cliquant sur un bouton de l'interface ruban. Cette approche est illustrée dans l'exercice suivant.

  • Dans le menu Fichier, cliquez sur Enregistrer tout.

  • Dans le menu Générer, cliquez sur Générer la solution et vérifiez que la compilation du projet s'effectue correctement.

  • Appuyez sur F5 pour exécuter l'application.

    Le volet Office n'est pas visible. L'interface ruban contient un onglet Compléments VSTO.

  • Cliquez sur l'onglet Compléments VSTO.

    L'onglet contient un bouton Insérer la date associé à une icône de calendrier.

    Figure 2. Le fait de cliquer sur le bouton affiche le volet Office personnalisé Sélection d'une date

    Volet Office personnalisé Sélection d'une date

  • Cliquez sur Insérer la date.

    Le volet Office personnalisé apparaît, ancré dans la partie gauche du document.

  • Sélectionnez une date dans le contrôle Calendrier, puis cliquez sur Insérer la date.

    La date est insérée dans le document au format mm/jj/aaaa.

  • Cliquez sur Insérer la date.

    Le volet Office disparaît.

  • Quittez Word.

Dans le premier exercice, vous avez créé un complément permettant d'afficher un volet Office personnalisé dans lequel figure un contrôle Calendrier. L'utilisateur peut sélectionner une date dans le calendrier et l'insérer dans le document Word. Vous avez écrit du code afin d'afficher le volet Office au démarrage de Word. Dans cet exercice, vous avez personnalisé l'interface ruban afin de permettre à l'utilisateur d'afficher ou de masquer le volet Office en cliquant sur un bouton, conformément aux recommandations relatives à l'interface utilisateur du système Microsoft Office 2007.

Création de volets Office personnalisés liés aux données

Cet exercice explique comment créer un deuxième contrôle de volet Office. Ce contrôle permet d'extraire une liste de clients à partir d'une base de données et de les afficher dans une grille. L'utilisateur peut sélectionner un client et cliquer sur un bouton. Le code qui s'exécute insère les informations relatives au client dans le document Word actif. L'exercice inclut un bouton de l'interface ruban permettant d'afficher ce volet Office personnalisé.

Cet exercice utilise Microsoft SQL Server 2005 Express Edition et l'exemple de base de données Northwind. Vous pouvez télécharger les exemples de bases de données Northwind ou de publication pour SQL Server 2000 à partir du site Web du centre de téléchargement Microsoft.

Pour ajouter une source de données

  • Dans le menu Données, cliquez sur Ajouter une nouvelle source de données.

    L'Assistant Configuration de source de données apparaît.

  • Sur la première page, sélectionnez Base de données pour spécifier l'emplacement à partir duquel l'application va obtenir des données. Cliquez sur Suivant.

  • Sur la seconde page, cliquez sur Nouvelle connexion.

    La boîte de dialogue Ajouter une connexion apparaît.

  • Si la zone Source de données n'affiche pas Fichier de base de données Microsoft SQL Server (SqlClient), cliquez sur Changer.

    La boîte de dialogue Changer de source de données s'affiche.

    • Sélectionnez Fichier de base de données Microsoft SQL Server.

    • Cliquez sur OK.

  • Dans la boîte de dialogue Ajouter une connexion, cliquez sur Parcourir.

    La boîte de dialogue Sélectionnez le fichier de base de données SQL Server apparaît.

  • Accédez au dossier contenant le fichier de base de données Northwind. Sélectionnez Northwind.mdf. Cliquez sur Ouvrir.

  • Dans la boîte de dialogue Ajouter une connexion, cliquez sur Tester la connexion. Une fois la connexion établie, cliquez sur OK.

  • Cliquez sur OK pour fermer la boîte de dialogue Ajouter une connexion.

  • Dans l'Assistant Configuration de source de données, cliquez sur Suivant.

  • Cliquez sur Non lorsqu'un message s'affiche, vous demandant si vous souhaitez inclure le fichier de base de données dans votre projet.

  • Sur la troisième page, ne désactivez pas la case et cliquez sur Suivant.

  • Sur la quatrième page, développez la liste Tables.

  • Dans la liste des tables, cochez la case Clients.

  • Cliquez sur Terminer.

  • Dans le menu Données, cliquez sur Afficher les sources de données.

    La fenêtre Sources de données apparaît.

Créez ensuite un volet Office personnalisé contenant la liste des clients.

Pour créer un contrôle utilisateur avec une grille de données associée aux données

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

  • Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez Contrôle utilisateur.

  • Entrez CustomersControl dans la zone Nom, puis cliquez sur Ajouter.

  • Dans la fenêtre Sources de données, faites glisser la table Clients sur le contrôle utilisateur.

  • Supprimez le contrôle CustomersBindingNavigator qui correspond au ToolStrip se trouvant au-dessus de la grille de données.

    Le ToolStrip permet de naviguer d'un client à l'autre, ainsi que d'ajouter, d'enregistrer ou de supprimer un client. Étant donné que vous n'intégrez aucune de ces fonctionnalités dans cet exemple, vous n'avez pas besoin du ToolStrip.

  • Faites glisser la grille de données vers la partie supérieure gauche du contrôle utilisateur.

  • Cliquez sur la flèche qui apparaît dans la partie supérieure droite de la grille de données.

    Le menu Tâches DataGridView apparaît.

  • Désactivez les cases à cocher Activer l'ajout, Activer la modification et Activer la suppression. L'utilisateur a la possibilité de sélectionner un client dans la liste, mais il ne peut pas modifier la liste des clients.

  • Cliquez sur Modifier les colonnes.

  • Dans la liste Colonnes sélectionnées, sélectionnez CustomerID.

  • Cliquez sur Supprimer.

  • Supprimez toutes les colonnes restantes, excepté CompanyName.

  • Définissez la propriété Width de la colonne CompanyName sur 180.

  • Affectez la valeur Customers à la propriété HeaderText.

  • Cliquez sur OK.

Pour définir le contrôle utilisateur

  • Cliquez sur la grille de données pour la sélectionner.

  • Affectez la valeur False à la propriété RowHeadersVisible de la grille de données.

  • Définissez la propriété Width de la grille de données sur 194.

  • Définissez la propriété Height sur 365.

  • Cliquez sur le contrôle utilisateur pour le sélectionner.

  • Définissez la propriété Width du contrôle utilisateur sur 200.

  • Définissez la propriété Height sur 400.

  • Dans la boîte à outils, faites glisser un contrôle Bouton sur le contrôle utilisateur. Placez le contrôle Bouton sous la grille. Centrez le bouton horizontalement dans le contrôle utilisateur.

  • Définissez la propriété Text du bouton sur Insérer des informations client. Agrandissez le bouton afin que le texte soit visible.

Pour ajouter du code permettant d'insérer des données dans le document

  • Double-cliquez sur une zone vide du contrôle utilisateur pour ouvrir l'éditeur de code.

  • Supprimez la méthode CustomersBindingNavigatorSaveItem_Click.

    Visual Studio a ajouté cette méthode pour gérer l'événement Click du bouton Enregistrer sur le ToolStrip que vous avez supprimé. Vous n'avez pas besoin de ce code.

  • Ajoutez le code suivant au début du fichier de code :

    Visual Basic

            Imports System.Text
          

    C#

            using Word = Microsoft.Office.Interop.Word;
          
  • Ajoutez les déclarations suivantes :

    Visual Basic

            Private myRange As Word.Range
            Private customerInfo As StringBuilder
            Private customerRow As NorthwindDataSet.CustomersRow
          

    C#

            private Word.Range myRange = null;
            private StringBuilder customerInfo = null;
            private NorthwindDataSet.CustomersRow customerRow;
          
  • Ajoutez le code suivant au gestionnaire d'événements Load du contrôle utilisateur afin d'extraire de la base de données les informations relatives à un client :

    Visual Basic

            Me.CustomersTableAdapter.Fill(Me.NorthwindDataSet.Customers)
          

    C#

            this.customersTableAdapter.Fill(this.northwindDataSet.Customers);
          
  • Ajoutez le code ci-dessous au gestionnaire d'événements Click du bouton afin d'insérer les informations relatives au client sélectionné dans le document Word actif. Ce code permet dans un premier temps d'obtenir une référence à un objet Range représentant le document principal. Il extrait ensuite une référence aux données sous-jacentes qui concernent le client sélectionné.

    Visual Basic

            myRange = Globals.ThisAddIn.Application.ActiveDocument.Content
            customerRow = CType(CType( _
            Me.CustomersBindingSource.Current, DataRowView).Row, _
            NorthwindDataSet.CustomersRow)
          

    C#

            myRange = Globals.ThisAddIn.Application.ActiveDocument.Content;
            customerRow = ((NorthwindDataSet.CustomersRow)
            (((DataRowView)(this.customersBindingSource.Current)).Row));
          
  • Ajoutez le code ci-dessous afin d'insérer les informations relatives au client sélectionné dans le document Word actif. Ce code génère une chaîne contenant le nom de la société du client, le nom du contact principal et l'adresse du client. Notez la façon dont des méthodes comme IsContactNameNull sont utilisées pour déterminer si les différentes colonnes de la table Clients contiennent des informations.

    Le code insère ensuite la chaîne contenant les informations relatives au client dans le document actif.

    Visual Basic

            customerInfo = New StringBuilder()
            If customerRow.IsContactNameNull() = False Then
            customerInfo.AppendLine(customerRow.ContactName)
            End If
            customerInfo.AppendLine(customerRow.CompanyName)
            If customerRow.IsAddressNull() = False Then
            customerInfo.AppendLine(customerRow.Address)
            End If
            If customerRow.IsCityNull() = False Then
            customerInfo.Append(customerRow.City & " ")
            End If
            If customerRow.Is_RegionNull() = False Then
            customerInfo.Append(customerRow._Region & " ")
            End If
            If customerRow.IsPostalCodeNull() = False Then
            customerInfo.Append(customerRow.PostalCode)
            End If
            customerInfo.AppendLine()
            If customerRow.IsCountryNull() = False Then
            customerInfo.AppendLine(customerRow.Country)
            End If
            customerInfo.AppendLine()
    
            Try
            myRange.InsertAfter(customerInfo.ToString())
            Catch ex As Exception
            MessageBox.Show( _
            "The information could not be added to the document.")
            End Try
          

    C#

            customerInfo = new StringBuilder();
            if (customerRow.IsContactNameNull()==false)
            {
            customerInfo.AppendLine(customerRow.ContactName);
            }
            customerInfo.AppendLine(customerRow.CompanyName);
            if (customerRow.IsAddressNull()==false)
            {
            customerInfo.AppendLine(customerRow.Address);
            }
            if (customerRow.IsCityNull()==false)
            {
            customerInfo.Append(customerRow.City + " ");
            }
            if (customerRow.IsRegionNull()==false)
            {
            customerInfo.Append(customerRow.Region + " ");
            }
            if (customerRow.IsPostalCodeNull()==false)
            {
            customerInfo.Append(customerRow.PostalCode);
            }
            customerInfo.AppendLine();
            if (customerRow.IsCountryNull()==false)
            {
            customerInfo.AppendLine(customerRow.Country);
            }
            customerInfo.AppendLine();
    
            try
            {
            myRange.InsertAfter(customerInfo.ToString());
            }
            catch
            {
            MessageBox.Show(
            "The information could not be added to the document.");
            }
          

Dans l'exercice précédent, vous avez permis aux utilisateurs d'ajouter et de supprimer le volet Office personnalisé en cliquant sur un bouton de l'interface ruban. Ce volet personnalisé contenant un contrôle Calendrier, la surcharge de travail liée à la création et la suppression du volet Office n'est pas très importante. Dans cet exercice, le volet Office personnalisé extrait les informations d'une base de données. Pour économiser les ressources, l'appel de base de données ne doit être effectué qu'une fois ; par conséquent, le volet Office personnalisé est ajouté lors du démarrage du complément. Toutefois, les utilisateurs ne peuvent pas le voir tant qu'ils n'ont pas cliqué sur un bouton de l'interface ruban. S'ils cliquent à nouveau sur le bouton, le volet Office est masqué, mais pas supprimé.

Pour que le volet Office s'affiche suite à une opération de l'utilisateur

  • Revenez au fichier ThisAddIn.

  • Ajoutez la déclaration ci-dessous.

    Visual Basic

            Public ctpCustomers As Microsoft.Office.Tools.CustomTaskPane
          

    C#

            public Microsoft.Office.Tools.CustomTaskPane ctpCustomers = null;
          
  • Ajoutez les méthodes suivantes pour ajouter et supprimer le volet Office personnalisé :

    Visual Basic

            Public Sub AddCustomersTaskPane()
            ctpCustomers = Me.CustomTaskPanes.Add(New CustomersControl(), _
            "Select a customer")
            ctpCustomers.DockPosition = _
            Microsoft.Office.Core.MsoCTPDockPosition.msoCTPDockPositionLeft
            End Sub
    
            Public Sub RemoveCustomersTaskPane()
            Me.CustomTaskPanes.Remove(ctpCustomers)
            End Sub
          

    C#

            public void AddCustomersTaskPane()
            {
            ctpCustomers = this.CustomTaskPanes.Add(new CustomersControl(),
            "Select a customer");
            ctpCustomers.DockPosition = _
            Microsoft.Office.Core.
            MsoCTPDockPosition.msoCTPDockPositionLeft;
            }
    
            public void RemoveCustomersTaskPane()
            {
            this.CustomTaskPanes.Remove(ctpCustomers);
            }
          
  • Ajoutez le code suivant au gestionnaire d'événements Startup pour ajouter le volet Office personnalisé :

    Visual Basic

            AddCustomersTaskPane()
          

    C#

            AddCustomersTaskPane();
          
  • Ajoutez le code suivant au gestionnaire d'événements Shutdown pour supprimer le volet Office personnalisé :

    Visual Basic

            RemoveCustomersTaskPane()
          

    C#

            RemoveCustomersTaskPane();
          
  • Dans l'Explorateur de solutions, cliquez avec le bouton droit de la souris sur Ribbon1.xml, puis cliquez sur Ouvrir.

  • Ajoutez du code XML au fichier pour ajouter un deuxième bouton à l'onglet Compléments VSTO de l'interface ruban. Le groupe Personnel d'assistance contient un deuxième bouton portant le libellé « Informations client », ainsi que la photo d'une personne et un carnet d'adresses. Lorsque l'utilisateur clique sur ce bouton, le code contenu dans la méthode CustomersButtonClick (décrite ultérieurement) s'exécute.

    Xml

            <customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui" onLoad="OnLoad">
            <ribbon>
            <tabs>
            <tab id="VSTOAddIns" label="VSTO Add-ins">
            <group id="Group1" label="Helpers" visible ="1">
            <button id="Calendar" label="Insert date"
            onAction="CalendarButtonClick"
            imageMso="ContentControlDate"/>
            <button id="Customers" label="Customer info"
            onAction="CustomersButtonClick"
            imageMso="MailSelectNames"/>
            </group>
            </tab>
            </tabs>
            </ribbon>
            </customUI>
          
  • Dans l'Explorateur de solutions, cliquez avec le bouton droit de la souris sur le fichier Ribbon1 et cliquez sur Afficher le code.

  • Ajoutez la déclaration suivante à la classe Ribbon1 :

    Visual Basic

            Private customersControlVisible As Boolean
          

    C#

            private bool customersControlVisible;
          
  • Ajoutez la méthode suivante à la classe Ribbon1 pour afficher et masquer le volet Office personnalisé lorsque l'utilisateur clique sur le bouton Informations client :

    Visual Basic

            Public Sub CustomersButtonClick(ByVal control As _
            Office.IRibbonControl)
            If Not customersControlVisible Then
            Globals.ThisAddIn.ctpCustomers.Visible = True
            Else
            Globals.ThisAddIn.ctpCustomers.Visible = False
            End If
            customersControlVisible = Not customersControlVisible
            End Sub
          

    C#

            public void CustomersButtonClick(Office.IRibbonControl control)
            {
            if (!customersControlVisible)
            {
            Globals.ThisAddIn.ctpCustomers.Visible = true;
            }
            else
            {
            Globals.ThisAddIn.ctpCustomers.Visible = false;
            }
            customersControlVisible = !customersControlVisible;
            }
          
  • Dans le menu Fichier, cliquez sur Enregistrer tout.

  • Dans le menu Générer, cliquez sur Générer la solution et vérifiez que le projet se compile correctement.

Pour tester le volet Office personnalisé

  • Appuyez sur F5 pour exécuter l'application.

    Le volet Office n'est pas visible. L'interface ruban contient un onglet Compléments VSTO.

  • Cliquez sur l'onglet Compléments VSTO.

    Cet onglet contient les boutons Insérer la date et Informations client, ce dernier étant associé à l'image d'une personne et à un carnet d'adresses.

  • Cliquez sur le bouton Informations client.

    Le volet Office personnalisé est ancré à gauche du document. Il est intitulé Sélection d'un client. Une grille de données contenant les noms des clients et un bouton Insérer des informations client figurent dans le volet Office.

    Figure 3. Le fait de cliquer sur le bouton Informations client affiche le volet Office personnalisé Sélection d'un client

    Volet Office personnalisé Sélection d'un client

  • Sélectionnez un client dans la grille de données et cliquez sur Insérer des informations client.

    Le nom de la société du client, son contact et ses coordonnées sont insérés dans le document.

  • Cliquez sur Insérer la date.

    Un deuxième volet Office personnalisé s'affiche. Il contient le contrôle Calendrier créé précédemment.

    Figure 4. Plusieurs volets Office personnalisés peuvent être ouverts simultanément.

    Plusieurs volets Office personnalisés ouverts en même temps

  • Cliquez sur Informations client.

    Le volet Office personnalisé contenant la liste des clients disparaît, tandis que celui contenant le calendrier est toujours visible.

  • Cliquez sur Insérer la date.

    Le volet Office personnalisé contenant le calendrier disparaît.

  • Cliquez sur Informations client.

    Le volet Office personnalisé contenant la liste des clients réapparaît. Cette opération ne devrait pas prendre beaucoup de temps, car le contrôle a déjà extrait de la base de données les informations sur les clients.

  • Quittez Word.

Dans cet exercice, vous avez créé un complément permettant d'afficher un volet Office personnalisé dans lequel figure une grille de données. Vous avez alimenté cette grille de données à l'aide de noms de clients extraits d'une base de données. L'utilisateur peut sélectionner un client dans la grille et insérer les informations relatives à ce client dans un document Word. Étant donné que l'appel de base de données ne doit se produire qu'une fois, vous avez ajouté le volet Office personnalisé lors du chargement du complément. Vous avez ensuite personnalisé l'interface ruban pour permettre aux utilisateurs d'afficher ou de masquer le volet Office en cliquant sur un bouton.

Vous avez également pu constater que Word permet désormais d'afficher plusieurs volets Office personnalisés en même temps. Cela garantit une plus grande flexibilité pour la conception de l'interface utilisateur. Les deux volets Office utilisés dans cet article étant indépendants, vous pouvez permettre à l'utilisateur d'y avoir recours simultanément. Néanmoins, chaque volet Office ouvert nécessite de la place sur l'écran et cet espace est limité.

Pour gérer plusieurs volets Office personnalisés dans un complément, il est judicieux de commencer par ajouter des boutons à l'interface ruban afin de pouvoir afficher et masquer ces volets. D'autres solutions sont également envisageables. Vous pouvez par exemple utiliser une interface à onglets dans un volet Office personnalisé et permettre à l'utilisateur de sélectionner l'onglet adapté à une tâche spécifique. Vous pouvez également créer une liste déroulante permettant de passer d'un ensemble de contrôles à un autre. Microsoft Office 2003 utilise cette technique dans le volet Office intégré.

N'oubliez pas que l'utilisateur peut exécuter plusieurs compléments à la fois et que chacun d'eux peut définir un ou plusieurs volets Office personnalisés. Raison de plus pour gérer l'espace à l'écran de façon efficace dans vos compléments.

Conclusion

Les améliorations apportées aux volets Office personnalisés par la version 2007 de Microsoft Office offrent une plus grande flexibilité et davantage de puissance lors de la création de solutions avec Visual Studio Tools pour Office. Vous pouvez non seulement concevoir des volets Office personnalisés pour Word et Excel, mais également pour InfoPath, Outlook et PowerPoint. Il est possible de créer des volets Office existant au niveau de l'application ou des volets Office que vous associez à une diapositive, un document ou un classeur spécifique. Ces fonctionnalités supplémentaires vous permettent de créer des volets Office personnalisés répondant davantage aux besoins de vos utilisateurs.

Visual Studio Tools pour Office garantit une excellente prise en charge des volets Office personnalisés. Si vous utilisiez Visual Studio Tools pour Office avec Office 2003, vous pouvez tirer parti des nouvelles fonctionnalités de la version 2007 de Microsoft Office en utilisant les techniques habituelles.

À propos de l'auteur

Robert Green est développeur, rédacteur et formateur. Il est également consultant senior de MCW Technologies. Il a co-écrit les cours AppDev sur Visual Basic et C#. Avant de rejoindre MCW, Robert Green travaillait pour Microsoft en tant que responsable produit Visual Studio Tools pour Office.

Ressources supplémentaires

Pour en savoir davantage sur les produits et les technologies mentionnés ou utilisés dans cet article, consultez les ressources suivantes :