Ajouter vos propres boutons au ruban Excel
Une macro qu'on lance par Alt + F8 et une liste de noms n'est utilisée que par celui qui l'a écrite. La même macro derrière un bouton, dans un onglet à votre nom, devient un outil que toute l'équipe emploie sans y penser.
Trois méthodes, une seule sérieuse
Personnaliser le ruban par les options d'Excel (Fichier → Options → Personnaliser le ruban) crée un onglet… sur votre poste, pour tous vos classeurs. Le collègue qui ouvre le fichier ne voit rien. C'est utile pour soi, inutilisable pour diffuser un outil.
La barre d'outils Accès rapide peut, elle, être attachée à un classeur précis. Mais elle n'offre que de petites icônes alignées, sans groupes ni libellés : au-delà de trois boutons, plus personne ne sait ce que fait lequel.
Le fichier customUI est la seule voie qui donne un vrai onglet, voyage avec le classeur et s'affiche à l'identique sur tous les postes. C'est ce que font tous les compléments Excel professionnels. Il demande d'écrire un peu de XML — une trentaine de lignes que vous ne toucherez plus ensuite.
Le fichier customUI, expliqué
Voici un onglet complet, avec deux groupes et trois boutons. Enregistrez-le sous le nom
customUI14.xml, en UTF-8 :
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
<tabs>
<tab id="ongletMaison" label="Mes outils" insertAfterMso="TabHome">
<group id="grpDossiers" label="Dossiers">
<button id="btnCreer"
label="Créer le dossier"
size="large"
imageMso="FolderNew"
onAction="RubanCreerDossier"
screentip="Crée l'arborescence de la ligne active"/>
<button id="btnOuvrir"
label="Ouvrir"
size="large"
imageMso="FileOpen"
onAction="RubanOuvrirDossier"/>
</group>
<group id="grpDocs" label="Documents">
<button id="btnDevis"
label="Générer le devis"
size="large"
imageMso="FileCreateDocumentWorkspace"
onAction="RubanGenererDevis"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Quatre attributs méritent qu'on s'y arrête.
iddoit être unique dans tout le fichier. Un identifiant en double, et l'onglet entier disparaît sans message.insertAfterMso="TabHome"place votre onglet juste après « Accueil ». Sans cet attribut, il atterrit en dernier, tout à droite, là où personne ne le cherche.size="large"donne un bouton haut avec l'icône au-dessus du texte.size="normal"produit une petite ligne : réservez-le aux actions secondaires.screentipest l'infobulle. Sur un outil partagé, c'est elle qui évite la question « ça fait quoi, ce bouton ? ».
customUI14 et pas
customUIIl existe deux espaces de noms : celui de 2006, pour Excel 2007, et celui de 2009,
utilisé ici, qui apporte les onglets contextuels et les menus déroulants. Le fichier doit
porter le nom customUI14.xml et se trouver dans un dossier
customUI. Pour viser aussi Excel 2007, il faut fournir les
deux fichiers.
L'insérer dans le classeur
Un fichier .xlsm est une archive ZIP. Il suffit d'y déposer
le XML et de déclarer sa présence. La manière confortable passe par
Office RibbonX Editor, gratuit et open source : ouvrez le classeur, insérez un
« Office 2010 Custom UI Part », collez le XML, enregistrez. Rien d'autre à faire.
La manière manuelle, utile à comprendre parce que c'est elle qui explique les pannes :
- Fermez le classeur, faites-en une copie de sauvegarde.
- Renommez
MonClasseur.xlsmenMonClasseur.zip. - Ouvrez l'archive et créez à la racine un dossier
customUIcontenant votrecustomUI14.xml. - Éditez
_rels/.relset ajoutez cette ligne juste avant</Relationships>:
<Relationship Id="rIdCustomUI"
Type="http://schemas.microsoft.com/office/2007/relationships/ui/extensibility"
Target="customUI/customUI14.xml"/>
Renommez ensuite l'archive en .xlsm et rouvrez-la. Sans cette
relation, le XML est présent dans le fichier mais Excel ne le lit jamais : c'est la cause la
plus fréquente d'un onglet qui n'apparaît pas.
Extraire l'archive complète puis la recompresser produit un fichier qu'Excel refuse d'ouvrir : l'ordre des entrées et le mode de compression du premier fichier comptent. Travaillez dans l'archive, en glissant-déposant, ou utilisez un outil qui préserve sa structure.
Relier les boutons à vos macros
L'attribut onAction nomme la procédure VBA appelée au clic.
Cette procédure a une signature imposée : elle reçoit un argument, le contrôle qui
l'a déclenchée.
Option Explicit
' La signature est imposée par le ruban : un argument IRibbonControl.
' Sans lui, le clic ne déclenche rien, et sans message d'erreur.
Public Sub RubanCreerDossier(control As IRibbonControl)
CreerLesDossiers ' votre macro habituelle
End Sub
Public Sub RubanOuvrirDossier(control As IRibbonControl)
Dim chemin As String
chemin = ActiveSheet.Cells(ActiveCell.Row, 3).Value
If Len(Dir(chemin, vbDirectory)) > 0 Then
Shell "explorer.exe """ & chemin & """", vbNormalFocus
Else
MsgBox "Aucun dossier pour cette ligne.", vbInformation
End If
End Sub
Le type IRibbonControl n'existe que si le classeur contient
un customUI. Si l'éditeur VBA affiche « Type défini par l'utilisateur non défini », c'est
que le XML n'a pas été chargé : reprenez l'étape de la relation.
Activer ou griser un bouton selon le contexte
Un bouton « Ouvrir le dossier » n'a de sens que sur une ligne qui en possède un. Le ruban sait le gérer, au prix d'un peu de plomberie : une variable qui garde la main sur le ruban, et un rappel qui répond à la question « ce bouton est-il actif ? ».
Public gRuban As IRibbonUI
' Appelé une fois, au chargement du classeur.
Public Sub RubanCharge(ribbon As IRibbonUI)
Set gRuban = ribbon
End Sub
' Appelé par Excel pour savoir s'il faut activer le bouton.
Public Sub BoutonActif(control As IRibbonControl, ByRef retour)
retour = (Len(ActiveSheet.Cells(ActiveCell.Row, 3).Value) > 0)
End Sub
Côté XML, ajoutez onLoad="RubanCharge" sur la balise
<customUI> et getEnabled="BoutonActif"
sur le bouton. Excel n'interroge ce rappel qu'aux moments qu'il juge utiles : pour forcer une
réévaluation après un changement de sélection, appelez
gRuban.Invalidate depuis l'événement
Worksheet_SelectionChange.
Toute erreur VBA non interceptée réinitialise les variables globales :
gRuban devient Nothing, et
Invalidate déclenche l'erreur 91 — l'utilisateur voit alors
un ruban figé. La parade consiste à stocker le pointeur du ruban dans une cellule cachée
et à le reconstruire au besoin. C'est le genre de détail qui sépare une démonstration d'un
outil qui tient en production.
Les icônes : 7 000 disponibles gratuitement
L'attribut imageMso réutilise les icônes d'Office. Elles sont
déjà sur tous les postes, s'adaptent au thème clair ou sombre et aux écrans à haute densité.
Quelques valeurs utiles :
FolderNew,FileOpen,FileSaveAs— fichiers et dossiersTableInsert,RefreshAll,FilterClearAll— donnéesFileCreateDocumentWorkspace,EnvelopesAndLabelsDialog— documents et courrierHappyFace,FlagRed,TagsTaskPane— statuts et repères
Pour voir la liste entière, Office RibbonX Editor propose un sélecteur visuel, et Microsoft publie les galeries complètes en téléchargement. Une icône inconnue ne provoque pas d'erreur : le bouton s'affiche simplement sans image — vérifiez l'orthographe, la casse compte.
Pour votre propre logo, il faut passer par image="monLogo",
déclarer loadImage sur le customUI et fournir l'image depuis VBA.
C'est plus de travail, et le rendu se dégrade souvent sur les écrans très denses : les icônes
d'Office restent le meilleur rapport effort/résultat.
Quand l'onglet n'apparaît pas
Excel ne dit rien par défaut lorsqu'il rejette une personnalisation. Commencez par activer les messages : Fichier → Options → Options avancées → Général → « Afficher les erreurs d'interface utilisateur des compléments ». Excel vous indiquera alors la ligne fautive.
Les causes, par ordre de fréquence :
- La relation manque dans
_rels/.rels. Le XML est là, Excel ne le regarde pas. - Un
iden double, ou un attribut mal orthographié. Le XML est strict, et la casse compte :onAction, pasonaction. - Le classeur a été enregistré en
.xlsx. Le customUI survit, mais les macros derrière les boutons non. - Le fichier est bloqué par Windows parce qu'il vient d'un courriel ou d'un téléchargement : clic droit → Propriétés → Débloquer.
- L'archive a été recompressée en entier, cassant la structure du paquet Office.
Un onglet qui apparaît mais dont les boutons ne font rien relève, lui, d'une seule cause :
la signature de la procédure. Vérifiez qu'elle est bien
Public Sub Nom(control As IRibbonControl), dans un
module standard — jamais dans le module d'une feuille ni dans
ThisWorkbook.
Et si vous ne voulez pas le maintenir vous-même
Quand le ruban doit appeler l'API de votre logiciel métier, lancer vos scripts Python, contrôler une feuille ou produire vos livrables, l'écriture du XML n'est plus le sujet : c'est le métier qu'il faut mettre derrière les boutons.
Voir des exemples de rubans métier → Devis gratuit sous 48 h ouvrées · à partir de 500 € TTC · code source livréQuestions fréquentes
Faut-il installer Office RibbonX Editor pour créer un ruban ?
Non : tout est faisable en éditant l'archive ZIP du classeur à la main, comme décrit plus haut. L'éditeur fait gagner du temps et valide le XML au passage, ce qui évite la plupart des onglets invisibles, mais il n'apporte rien que le format ne permette déjà.
Mon onglet doit-il remplacer les onglets d'Excel ?
Ce serait une mauvaise idée, mais c'est possible : startFromScratch="true" sur la balise customUI masque tout le ruban standard. Les utilisateurs perdent alors l'accès à l'enregistrement, aux formats et au collage spécial. Réservez ce mode aux applications totalement verrouillées.
Le ruban fonctionne-t-il dans Excel pour Mac ?
En partie. Excel pour Mac lit le customUI et affiche l'onglet, mais plusieurs attributs sont ignorés, certaines icônes imageMso n'existent pas, et les rappels getEnabled se comportent différemment. Un ruban conçu pour Windows doit être retesté entièrement sur Mac avant d'être diffusé.
Comment diffuser mon ruban à toute l'équipe ?
Deux voies. Le classeur .xlsm porte son ruban avec lui : chacun ouvre le fichier, l'onglet apparaît. Ou vous convertissez le tout en complément .xlam, installé une fois par poste, et l'onglet devient disponible dans tous les classeurs. La première voie est plus simple, la seconde plus confortable à l'usage.
Peut-on ajouter des listes déroulantes, des cases à cocher, une galerie ?
Oui : dropDown, comboBox, checkBox, gallery, menu et splitButton existent tous dans le schéma. Chacun demande ses propres rappels VBA (getItemCount, getItemLabel, onChange…), ce qui représente vite une centaine de lignes. Commencez par des boutons, et n'ajoutez un contrôle riche que là où il fait gagner un vrai geste.