FREN
Voir les modules
Guide pratique

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.

Mis à jour le 17 septembre 2026 · 15 min de lecture · Excel sous Windows

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 :

customUI14.xml
<?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.

Pourquoi customUI14 et pas customUI

Il 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 :

  1. Fermez le classeur, faites-en une copie de sauvegarde.
  2. Renommez MonClasseur.xlsm en MonClasseur.zip.
  3. Ouvrez l'archive et créez à la racine un dossier customUI contenant votre customUI14.xml.
  4. Éditez _rels/.rels et 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.

Ne décompressez jamais tout le classeur

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.

Module1 — VBA
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.

La variable du ruban se perd

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 :

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 :

  1. La relation manque dans _rels/.rels. Le XML est là, Excel ne le regarde pas.
  2. Un id en double, ou un attribut mal orthographié. Le XML est strict, et la casse compte : onAction, pas onaction.
  3. Le classeur a été enregistré en .xlsx. Le customUI survit, mais les macros derrière les boutons non.
  4. 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.
  5. 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.

À lire ensuite

Guide Créer vos dossiers depuis Excel La macro à mettre derrière votre premier bouton. Développement Un ruban conçu pour votre métier Voir ce qu'on peut brancher derrière un bouton : API, Python, contrôles, livrables.