XL 2021 Comment activer un onglet du ruban

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

DenisHen

XLDnaute Nouveau
Bonjour à la communauté.
J'ai créé des onglets dans mon ruban avec des icones perso qui appellent des Subs, des UserForm... Personnalisés dans VBA
Ces onglets sont contenu dans un XLSM.
Mon but est d'activer un onglet (ex : "Dossiers") quand je clique sur l'icone "Dossier" de l'onglet "Devis".
Attention, l'onglet "Dossier" a pour id, "Dossier", étonnant, non ?
XML:
...
<tab id="Devis" label="Devis">
  <group id="AffGestion" label="Gestion">
    <button id="AffDossier" label="Dossier" size="large" onAction="AcAffDossier" image="Dossier" />
    ...
  </group>
    ...
</tab>
<tab id="Dossiers" label="Dossier">
    ...
</tab>
...
Si quelqu'un a une diée, une astuce, un conseil... Je suis preneur.
Bien à toi la communauté.
Denis...
 
Dernière édition:
bonsoir
l'activation d'un onglet ce fait par la fonction activateTab de l'object ruban
il faut que ton ruban soit variabiliser en utilisant le callback onload
si tu ne l'a pas prévu dans ton ruban c'est mort
il te faudra alors jouer de la librairie iaccessible et là c'est pas triste et même bancale
je te suggère de reprendre le xml et d'y mettre le onload a ta balise customUI
et bien sur coder son callback et variabiliser une variable object ruban
pour l'utiliser ou tu veux après "variableruban.activateTab("id de l onglet)"
 
Bonjour à tous,
Tu entends quoi par activer ?

tu dois bien gérer ton fichier Xml voici un petit exemple :
HTML:
<!--Valtrase (Jean-Paul) révision du : 02/2025-->
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnRibbonLoad">
    <ribbon>
         <!---->
         <tabs>
              <tab id="tab0" label="Tests affichages">
                   <group id="grp0" label="Premier groupe">
                        <button id="button1" label="Afficher" onAction="OnActionButton" imageMso="SlideHide"/>
                        <button id="button2" label="Masquer" onAction="OnActionButton" imageMso="SlideHide"/>
                   </group>
                   <group id="grp1" label="Second groupe" getVisible="GetVisible">
                        <button id="button3" label="Calculer" onAction="OnActionButton" imageMso="CalculateNow"/>
                   </group>
              </tab>
         </tabs>
    </ribbon>
</customUI>
Tu remarqueras que dans le second groupe je définis getVisible, ce qui te permettra de rendre visible ou non le second groupe, ceci est valable pour la plupart des contrôles.

Ensuite tu gère aux niveau des Callback voici un exemple minimaliste.
Code dans un module exemple "Callbacks"
VB:
' //      Valtrase (Jean - Paul) révision du 20/2025
Option Explicit

Public UIRibbon As Office.IRibbonUI
Private mVisible As Boolean

Public Property Get Visible() As Boolean
    Visible = mVisible
End Property
Public Property Let Visible(ByVal NewValue As Boolean)
    mVisible = NewValue
End Property

'@Description "Définit la procédure VBA qui doit être déclenchée lors du chargement du ruban."
Public Sub OnRibbonLoad(ribbon As IRibbonUI)
    Set UIRibbon = ribbon
    UIRibbon.ActivateTab "tab0"
    mVisible = False
End Sub

'@Description "Callback for Button-Click."
Public Sub OnActionButton(Control As IRibbonControl)
    Select Case Control.ID
        Case "button1"
            mVisible = True
            UIRibbon.InvalidateControl ("grp1")
        Case "button2"
            mVisible = False
            UIRibbon.InvalidateControl ("grp1")

        Case "button3"
            MsgBox "Vous avez sélectionné le bouton " & Control.ID
        Case Else
            Debug.Print "Case """; Control.ID; """" '; vbTab; " "; Control.Tag; """"
    End Select
End Sub

'@Description "Set the Boolean value for ribbon control visibility."
Public Sub GetVisible(Control As IRibbonControl, _
                      ByRef Visible)

    Select Case Control.ID
        Case "grp1"
            Visible = mVisible

        Case Else
            Visible = mVisible
    End Select
End Sub

'@Description "Sets the Label for a Ribbon Control."
Public Sub GetLabel(Control As IRibbonControl, _
                    ByRef Label)
    Select Case Control.ID
        Case "myLabel1"
            Label = "Time:"
        Case "myLabel2"
            Label = Format$(Now, "hh:mm:ss")
        Case "MyButton1"
            Label = "Labels refresh"
        Case Else
            Label = " "
    End Select
End Sub

Voilà bonne programmation.
PS. Patrick fournit un application pour créer des rubans, tu as aussi d'autres applications comme Assistant Ruban
Un peu de lecture ici et puis là.
 

Pièces jointes

Dernière édition:
bonsoir
l'activation d'un onglet ce fait par la fonction activateTab de l'object ruban
il faut que ton ruban soit variabiliser en utilisant le callback onload
si tu ne l'a pas prévu dans ton ruban c'est mort
il te faudra alors jouer de la librairie iaccessible et là c'est pas triste et même bancale
je te suggère de reprendre le xml et d'y mettre le onload a ta balise customUI
et bien sur coder son callback et variabiliser une variable object ruban
pour l'utiliser ou tu veux après "variableruban.activateTab("id de l onglet)"
Merci pour ta deuxième réponce (😉 car je te connais, Ô maitre) Mais j'avais oublié de précisé que j'avais fais les trucs dans "l'ordre". Mon ruban est bien déclaré avec un onLoad.
Encore merci à toi...
 
Bonjour à tous,
Tu entends quoi par activer ?

tu dois bien gérer ton fichier Xml voici un petit exemple :
HTML:
<!--Valtrase (Jean-Paul) révision du : 02/2025-->
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnRibbonLoad">
    <ribbon>
         <!---->
         <tabs>
              <tab id="tab0" label="Tests affichages">
                   <group id="grp0" label="Premier groupe">
                        <button id="button1" label="Afficher" onAction="OnActionButton" imageMso="SlideHide"/>
                        <button id="button2" label="Masquer" onAction="OnActionButton" imageMso="SlideHide"/>
                   </group>
                   <group id="grp1" label="Second groupe" getVisible="GetVisible">
                        <button id="button3" label="Calculer" onAction="OnActionButton" imageMso="CalculateNow"/>
                   </group>
              </tab>
         </tabs>
    </ribbon>
</customUI>
Tu remarqueras que dans le second groupe je définis getVisible, ce qui te permettra de rendre visible ou non le second groupe, ceci est valable pour la plupart des contrôles.

Ensuite tu gère aux niveau des Callback voici un exemple minimaliste.
Code dans un module exemple "Callbacks"
VB:
' //      Valtrase (Jean - Paul) révision du 20/2025
Option Explicit

Public UIRibbon As Office.IRibbonUI
Private mVisible As Boolean

Public Property Get Visible() As Boolean
    Visible = mVisible
End Property
Public Property Let Visible(ByVal NewValue As Boolean)
    mVisible = NewValue
End Property

'@Description "Définit la procédure VBA qui doit être déclenchée lors du chargement du ruban."
Public Sub OnRibbonLoad(ribbon As IRibbonUI)
    Set UIRibbon = ribbon
    UIRibbon.ActivateTab "tab0"
    mVisible = False
End Sub

'@Description "Callback for Button-Click."
Public Sub OnActionButton(Control As IRibbonControl)
    Select Case Control.ID
        Case "button1"
            mVisible = True
            UIRibbon.InvalidateControl ("grp1")
        Case "button2"
            mVisible = False
            UIRibbon.InvalidateControl ("grp1")

        Case "button3"
            MsgBox "Vous avez sélectionné le bouton " & Control.ID
        Case Else
            Debug.Print "Case """; Control.ID; """" '; vbTab; " "; Control.Tag; """"
    End Select
End Sub

'@Description "Set the Boolean value for ribbon control visibility."
Public Sub GetVisible(Control As IRibbonControl, _
                      ByRef Visible)

    Select Case Control.ID
        Case "grp1"
            Visible = mVisible

        Case Else
            Visible = mVisible
    End Select
End Sub

'@Description "Sets the Label for a Ribbon Control."
Public Sub GetLabel(Control As IRibbonControl, _
                    ByRef Label)
    Select Case Control.ID
        Case "myLabel1"
            Label = "Time:"
        Case "myLabel2"
            Label = Format$(Now, "hh:mm:ss")
        Case "MyButton1"
            Label = "Labels refresh"
        Case Else
            Label = " "
    End Select
End Sub

Voilà bonne programmation.
PS. Patrick fournit un application pour créer des rubans, tu as aussi d'autres applications comme Assistant Ruban
Un peu de lecture ici et puis là.
Bonsoir (ou bonjour) Val
Bonjour à tous,
Tu entends quoi par activer ?

tu dois bien gérer ton fichier Xml voici un petit exemple :
HTML:
<!--Valtrase (Jean-Paul) révision du : 02/2025-->
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnRibbonLoad">
    <ribbon>
         <!---->
         <tabs>
              <tab id="tab0" label="Tests affichages">
                   <group id="grp0" label="Premier groupe">
                        <button id="button1" label="Afficher" onAction="OnActionButton" imageMso="SlideHide"/>
                        <button id="button2" label="Masquer" onAction="OnActionButton" imageMso="SlideHide"/>
                   </group>
                   <group id="grp1" label="Second groupe" getVisible="GetVisible">
                        <button id="button3" label="Calculer" onAction="OnActionButton" imageMso="CalculateNow"/>
                   </group>
              </tab>
         </tabs>
    </ribbon>
</customUI>
Tu remarqueras que dans le second groupe je définis getVisible, ce qui te permettra de rendre visible ou non le second groupe, ceci est valable pour la plupart des contrôles.

Ensuite tu gère aux niveau des Callback voici un exemple minimaliste.
Code dans un module exemple "Callbacks"
VB:
' //      Valtrase (Jean - Paul) révision du 20/2025
Option Explicit

Public UIRibbon As Office.IRibbonUI
Private mVisible As Boolean

Public Property Get Visible() As Boolean
    Visible = mVisible
End Property
Public Property Let Visible(ByVal NewValue As Boolean)
    mVisible = NewValue
End Property

'@Description "Définit la procédure VBA qui doit être déclenchée lors du chargement du ruban."
Public Sub OnRibbonLoad(ribbon As IRibbonUI)
    Set UIRibbon = ribbon
    UIRibbon.ActivateTab "tab0"
    mVisible = False
End Sub

'@Description "Callback for Button-Click."
Public Sub OnActionButton(Control As IRibbonControl)
    Select Case Control.ID
        Case "button1"
            mVisible = True
            UIRibbon.InvalidateControl ("grp1")
        Case "button2"
            mVisible = False
            UIRibbon.InvalidateControl ("grp1")

        Case "button3"
            MsgBox "Vous avez sélectionné le bouton " & Control.ID
        Case Else
            Debug.Print "Case """; Control.ID; """" '; vbTab; " "; Control.Tag; """"
    End Select
End Sub

'@Description "Set the Boolean value for ribbon control visibility."
Public Sub GetVisible(Control As IRibbonControl, _
                      ByRef Visible)

    Select Case Control.ID
        Case "grp1"
            Visible = mVisible

        Case Else
            Visible = mVisible
    End Select
End Sub

'@Description "Sets the Label for a Ribbon Control."
Public Sub GetLabel(Control As IRibbonControl, _
                    ByRef Label)
    Select Case Control.ID
        Case "myLabel1"
            Label = "Time:"
        Case "myLabel2"
            Label = Format$(Now, "hh:mm:ss")
        Case "MyButton1"
            Label = "Labels refresh"
        Case Else
            Label = " "
    End Select
End Sub

Voilà bonne programmation.
PS. Patrick fournit un application pour créer des rubans, tu as aussi d'autres applications comme Assistant Ruban
Un peu de lecture ici et puis là.
Bonsoir, ou bonjour Valtrase (JP ?)
Un super grand merci pour ton aide.
Mais ma question n'était pas dans l'affichage d'une partie du ruban (mais je garde ton code précieusement, extraordinaire) mais dans l'affichage (ou plutot l'activation) d'un autre onglet du ruban.
 
finalement office ribbonX editor ne fait pas tant de merveille que ça hein !!
tu ne l'a pas volé celle là 😉
C'est très vrai Patrick, mais Office RibbonX Editor ne fait presque rien(une petite mise en forme et un petit controle de validité), mais il laisse la main sur tout.
J'attend juste que "CreatorRibbonX ImageMso evolution V6" passe à la version 7, et là, les 5 étoiles sont promises...
Mais je l'ai déjà dis, "CreatorRibbonX" est une merveille, mais si on fouille, ça devient complex, même pour les pro !
Et "vulgariser" ce language est déjà un chalenge hors norme, donc CréatorRibbonX est un exploit, je me répète...
Mais je conseil à tous les novices qui veulent s'attaquer au ruban d'utiliser ton "CreatorRibbonX", c'est un fait, il est une super passerelle.
Et non, je ne l'ai pas volée... 😉 Bien à toi Patrick. (rien que pour ça, c'est une étoile en plus 😉, mais comment le faire ?)
Et un super grand merci pour toutes les choses que tu fais pour nous, les novices curieux...
Denis.
 
Dernière édition:
si tu l'avais fait avec creatorRibbonX tu n'aurais même pas posé la question
bon je te l'accorde il ne fait pas les images intégrées mais pour n'importe quel personne un peu au courant facile de l’éditer même dans un blocnot ton xml
l'avantage c'est a chaque création je le rappelle dans le module des callback
et j'offre même le safe ribbon ce que ORE ne fait pas bien entendu
voila un exemple de code vba dans un classeur ayant un ruban creatorRibbonX
regarde bien les commentaires
j'assiste plus là je tiens la main 😉
1738961888449.png

le creator de harkam de DVP est bien aussi a condition de ne pas avoir de problème avec le control treeview
mais lui ne compile pas le fichier ou ne l'integre pas dans une fichier xl il fait juste le xml et les callback
 
Re,
Mais ma question n'était pas dans l'affichage d'une partie du ruban (mais je garde ton code précieusement, extraordinaire) mais dans l'affichage (ou plutot l'activation) d'un autre onglet du ruban.
Si j'ai bien compris cette fois-ci, tu dois utiliser comme Patrick te l'a indiquer l'IdMso de l'onglet.
Si j'ajoute un bouton sur le ruban qui devra afficher l'onglet Accueil voici le code à changer.
VB:
'@Description "Callback for Button-Click."
Public Sub OnActionButton(Control As IRibbonControl)
    Select Case Control.ID
        Case "button1"
            mVisible = True
            UIRibbon.InvalidateControl ("grp1")
            
        Case "button2"
            mVisible = False
            UIRibbon.InvalidateControl ("grp1")
            
        Case "button3"
            ' // Activation de l'onglet "Accueil"
            UIRibbon.ActivateTabMso ("TabHome")
            
        Case "button4"
            MsgBox "Vous avez sélectionné le bouton " & Control.ID
            
        Case Else
            Debug.Print "Case """; Control.ID; """" '; vbTab; " "; Control.Tag; """"
    End Select
End Sub

Bonne programmation...
 
Bonjour à tout les deux
du coup je me suis un peu amusé moi aussi
voilà comment on travaille avec creatorRibbonX
Pour afficher ce contenu, nous aurons besoin de votre consentement pour définir des cookies tiers.
Pour plus d'informations, consultez notre page sur les cookies.
le dossier de projet avec le xml de base créé avec creatorRibbonX et le sample.xlsm final
et là tes switch sont sécurisés
 

Pièces jointes

Bonjour a tout les deux
@DenisHen
j'ai téléchargé ton fichier
j'ai repris ton xml et tes images et refait avec le creatorRibbonX AllImages
voila ce que ça donne
j'ai ai profité pour ajouter le saferibbon
fonctionnel a partir de 2010 à 2024
maintenant tu pourra faire de l'activate (Tab) ou (TabMso)
patrick
zip le fichier et va voir les xml comme c'est propre 😉 et pas que le customUI
les référence aux images sont leur noms original dans les relationships
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
3 K
Retour