jeudi 12 juillet 2012

Personnalisez votre ruban d'accès rapide (leçon n°1)

Les rubans : qu'est-ce donc ?

Dans Microsoft Office 2007 et 2010, le ruban vient remplacer les barres d'outils et les menus des versions antérieures. C'est ce qui s'appelle désormais l'interface Microsoft Office Fluent puisqu'il est censé permettre de trouver les commandes usuelles de manière plus fluide, plus rapide.
(Cliquez pour agrandir)
Si vous souhaitez développer à base de macros VBA un outil Excel disposant de plusieurs onglets entre lesquels vous devez naviguer ou si votre outil réalise un ensemble de tâches déclanchées sur des appuis boutons, des sélections de liste déroulantes ou des cases à cocher... privilégiez l'usage d'un ruban personnalisé pour exécuter ces actions.
Pour cela, commencez par installer CustomUI Editor, un utilitaire permettant l'édition de fichiers XML de description de rubans MS Office.
 Etudions de près les différents composants d'un ruban MS Office :
  • Les onglets permettent de passer d'un ruban à l'autre
  • Le ruban est constitué d'un ensemble de groupes
  • Chaque groupe est constitué d'un ensemble de boutons ou autres types de contrôles (checkbox, combobox, ...) de taille "normale" ou "large"
(Cliquez pour agrandir)
Le code XML que vous allez éditer avec CustomUI Editor devra donc spécifier chacun de ces composants.

Réalisation du ruban pas à pas

Tout d'abord, sachez que CustomUI Editor tient compte de la version de vos suite MS Office : certains synthaxes de descrption XML diffèrent entre MS 2007 et MS2010. Il faudra donc veiller à créer, pour chacun de vos fichier Excel, deux version de code XML tenant compte de ces différences mineures.

1. Créez un nouveau fichier Excel à partir de l'application MS Excel et sauvegardez au format *.xlsm le dans le répertoire de votre choix, puis fermez-le.
Attention : le fichier Excel ne devra être ouvert que par une applicaiton à la fois, soit MS Excel soit CustomUI Editor afin de ne pas prendre le risque de perdre vos modifications.
2. Lancez l'utilitaire CustomUI Editor et ouvrez-y le fichier Excel que vous venez de fermer. Vous observerez le nom de votre fichier Excel dans la colonne de gauche de l'utilitaire, mais rien d'autre jusque là.

(Cliquez pour agrandir)
 





3. Par un clic droit sur l’intitulé de votre fichier Excel dans la colonne de gauche, sélectionnez les deux version d’Office 2010 et 2007. Cela vous créera deux fichiers XML vides qui viendront s’ajouter dans la colonne de gauche : customUI14.xml pour Office 2010 et customUI.xml pour office 2007. Pensez à sauvegarder votre action !

4. Double-cliquez sur customUI.xml le fichier XML destiné à la version 2007 et collez dans la partie de droite de la fenêtre les lignes de code suivantes, puis cliquez sur le bouton « Validate » afin de vérifier la synthaxe, puis sauvegardez.

Lisez attentivement les commentaires inscrits entres les symboles < !-- et -->
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" >
<!--Pour MS Office 2007, le lien  http à spécifier point vers le répertoire …/2006/01/…-->
<ribbon startFromScratch="false">
<!--Positionnez cette valeur à TRUE pour masquer tous les autres onglets standards de MS Excel, ou à FALSE pour les maintenir en place.-->
<tabs>
<!--Les Tabs sont les onglets du ruban. Vous pouvez en créer autant que nécessaire.Ils vont se positionner automatiquement à la fin du ruban -->
  <tab id="SmartXL" label="Smart-XL" visible="true">
      <!--Premier groupe de contrôles : on insère ici deux boutons de taille large-->
      <group id="GroupFichier" label="Fichier">
      <button id="btnOuvrir" label="Ouvrir" onAction="OuvrirFichier" size="large" imageMso="FileOpen" />
      <button id="btnEnregistrer" label="Enregistrer" onAction="EnregistrerFichier" size="large" imageMso="FileSave" />
      </group>
      <!--Deuxième groupe de contrôles : on insère ici deux boutons de taille normal-->
      <group id="GroupFeuille" label="Feuille">
      <button id="btnAjouterFeuille" label="Ajouter" onAction="AjouterFeuille" size="normal" imageMso="SheetInsert" />   
      <button id="btnSupprimerFeuille" label="Supprimer" onAction="SupprimerFeuille" size="normal" imageMso="SheetDelete" />
      </group>
  </tab>
</tabs>
</ribbon>
</customUI>
(Cliquez pour agrandir)
Pour chaque critère imageMso  la valeur saisie entre guillemets correspond au nom standard de l’image utilisée par MS Office. Attention, là encore les noms peuvent varier entre les différentes versions de MS Office. Vous trouverez la liste exhaustive des imageMso sur les liens suivants :
5. Copier le contenu XML du fichier cutoumUI.xml (MS Office 2007), puis double-cliquez sur le fichier customUI14.xml (MS Office 2010) et collez le code dans la partie droite de la fenêtre. Cliquez sur le bouton Validate et constatez que l’utilitaire vous indique à corriger : remplacez au début du fichier le chemin http par le lien suivant :
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="InitialiserRuban">
Remarquez qu’en cas d’erreur de synthaxe XML, CustomUI Editor vous indiquera la ligne et la colonne où se situe l’erreur. Vous n’aurez plus qu’à naviguer dans le code en surveillant le compteurs situé en bas à droite de la fenetre jusqu’à atteindre l’erreur recherchée.
(Cliquez pour agrandir)
6. Validez et sauvegardez votre fichier, puis cliquez sur le bouton Generate Callbacks. L’utilitaire vous affichera alors  la liste des procédures VBA que vous devrez intégrer à vos macros Excel. Copier l’ensemble des lignes et collez-les dans un fichier texte / bloc note pour le moment.
'Callback for btnOuvrir onAction
Sub OuvrirFichier(control As IRibbonControl)
End Sub
'Callback for btnEnregistrer onAction
Sub EnregistrerFichier(control As IRibbonControl)
End Sub
'Callback for btnAjouterFeuille onAction
Sub AjouterFeuille(control As IRibbonControl)
End Sub
'Callback for btnSupprimerFeuille onAction
Sub SupprimerFeuille(control As IRibbonControl)
End Sub

7. Fermez CustomUI Editor et ouvrez votre fichier sous MS Excel. Si vous appuyez sur les boutons de votre ruban « Smart-XL », l’application vous affichera des messages d’erreur dus au fait qu’elle ne trouve pas les procédures de Callbacks spécifiées dans le code XML. Vous devez alors lancer l’éditeur de code VBA et créer un module dédié dans lequel vous collerez vos lignes de Callbacks. Vous pourrez alors coder le contenu de vos procédures selon vos besoins.
Pour commencer vous pouvez copier les exemples ci-dessous dans un module VBA :

'Callback for btnOuvrir onAction
Sub OuvrirFichier(control As IRibbonControl)
    Dim Fichier
    Fichier = Application.GetOpenFilename("Fichiers Excel (*.xlsx), *.xlsx")
    If Fichier Then Workbooks.Open Fichier
End Sub
'Callback for btnEnregistrer onAction
Sub EnregistrerFichier(control As IRibbonControl)
    ThisWorkbook.Save
End Sub
'Callback for btnAjouterFeuille onAction
Sub AjouterFeuille(control As IRibbonControl)
    ThisWorkbook.Sheets.Add
End Sub
'Callback for btnSupprimerFeuille onAction
Sub SupprimerFeuille(control As IRibbonControl)
    ' Supprime la feuille en cours d'affichage
    ActiveSheet.Delete
End Sub
8. Sauvegardez votre fichier Excel et vous pouvez dès à présent commencer à utiliser vos boutons.
(Cliquez pour agrandir)
N’hésitez pas ajouter autant de groupes que nécessaire et à adapter les boutons à vos besoins, en attendant le prochain tutoriel pour une personnalisation plus approfondie du ruban…

Téléchargez le fichier

 




1 commentaire: