Ajouter un onglet dans le ruban
Vous avez fait un super code VBA dans votre document Excel, et vous aimeriez bien pouvoir l'appeler via un bouton dans le ruban Excel ?
C'est relativement simple à faire. Vous n'avez besoin que de 7-ZIP et notepad.
Préparation
Pour commencer, nous allons faire simple : une simple procédure Test qui va afficher un message.
Ajout dans le ruban
Commencez par créer un dossier customUI, dans lequel vous allez placer un fichier customUI.xml.
Éditons maintenant ce fichier. C'est un document XML classique. La racine s'appelle customUI. La hiérarchie est la suivante :
customUI
ribbon
tabs
tab
group
button
customUI
La racine possède un attribut xmlns avec cette valeur : http://schemas.microsoft.com/office/2006/01/customUI.
ribbon
L'objet ribbon désigne le ruban, avec un attribut startFromScratch que l'on met à false.
tab
On arrive dans ce qui est intéressant : tab. Les tab sont les onglets du ruban. Ici, nous avons trois attributs : id, label et visible.
L'id est un identifiant, label correspond au nom de notre onglet et visible permet d'indiquer si on veut qu'il soit visible ou non.
group
L'objet group désigne le groupe d'objets dans l'onglet. Si vous regardez bien Excel, il fournit plusieurs groupes dans chaque onglets. Vous faites donc la même chose ici en fournissant un id et un label.
button
Enfin le cœur. Ce sont les boutons que vous avez dans votre groupe. Ici, nous n'en mettons qu'un seul car nous n'avons qu'une seule fonction VBA à démarrer.
Voici les attributs attendus :
id : l'identifiant
label : le titre
screentip : le texte descriptif au passage de la souris dessus
onAction : le nom de la procédure VBA à appeler
size : la taille du bouton, ici on le met à "large"
imageMso : l'identifiant d'une image intégrée
D'autres attributs sont possibles. Par exemple, vous pouvez utiliser un getLabel plutôt que label, auquel cas, vous fournissez le nom d'une fonction qui va retourner le label définit (utile par exemple si l'application gère plusieurs langues).
Vous pouvez retrouver toute la documentation sur le site de Microsoft concernant les spécifications.
Vous pouvez vous rendre ici pour la liste des imageMso.
Exemple
Voici mon exemple :
Finalisation
Maintenant que nous avons notre customUI, nous allons l'intégrer dans notre document Excel. Pour cela, vous allez ouvrir le fichier .xlsm avec 7-zip. C'est une archive ZIP, donc il pourra l'ouvrir sans problème. Glissez-y le dossier customUI que nous avons créé avec le fichier XML dedans.
Modifiez ensuite le fichier .rels du dossier _rels du fichier ZIP. Il faut en effet lui indiquer que nous utilisons une personnalisation du ruban :
Ajoutez donc cette ligne au début de la liste des relations. Attention, Excel n'a pas géré les retours lignes, je vous conseille alors de dézipper tout, corriger le fichier dans sa mise en forme et de zipper le tout à nouveau. Techniquement vous pouvez le faire depuis 7-ZIP avec la touche F4, il ouvre le fichier dans l'éditeur configuré, vous faites votre modification, vous enregistrez, fermer ensuite l'éditeur et 7-ZIP vous proposera de mettre l'archive à jour.
Maintenant, vous pouvez rouvrir votre fichier Excel et vous constatez l'apparition d'un nouvel onglet. Dans celui-ci, le bouton que nous avons ajouté. Si vous cliquez dessus, vous obtenez bien le MsgBox.
ATTENTION ! Adaptez votre rId. Vu qu'il met en dernier le premier, je recommande de faire comme Excel, donc vos relations sont empilés les uns sur les autres avec un rId suivant celui juste en dessous.
Conclusion
Le système de ruban est assez complexe à comprendre, mais on est ici basé sur le système mis en place par Microsoft sur la version 2007 d'office, soit la première version avec le système de ruban.