Salut à tous,
Pour ma part je gère toujours les contrôles du ruban de la même manière exemple ce bouton :
<button id="btnAbout"
size="large"
label="A propos"
screentip="A propos."
supertip="Informations sur l'application."
imageMso="About"
tag="RibbonName:=;inMenu:=;CustomTagValue1:=;CustomTagValue2:=;CustomTagValue3:=;CustomPicture:=;CustomPicturePath:="
onAction="OnActionButton"
getVisible="GetVisible"
getEnabled="GetEnabled"/>
Je gère onAction, getVisible, et getEnabled, j'appelle toujours les même procédures, je gère ensuite les différents boutons avec un Select Case.
Exemple dans un module que je nomme Callbacks j'ai les procédure du ruban :
'@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 mUIRibbon = Ribbon
mUIRibbon.ActivateTab "tab0"
' // Save the Ribbon Handle
'ExcelProperties.SetProperty "RibbonHandle", CStr(ObjPtr(mUIRibbon)), msoPropertyTypeNumber
End Sub
'@Description "Spécifie une valeur booléenne qui indique si le contrôle doit être activé (true ou 1) ou désactivé (false ou 0)."
Public Sub GetEnabled(Control As IRibbonControl, ByRef Enabled)
Select Case Control.ID
Case Else
Enabled = True
End Select
End Sub
'@Description "Renvoie une valeur booléenne qui indique si le contrôle est visible (true) ou masqué (false)."
Public Sub GetVisible(Control As IRibbonControl, ByRef Visible)
Select Case Control.ID
Case Else
Visible = True
End Select
End Sub
'@Description "Déclenchée lorsque vous cliquez sur le contrôle afin de l'utiliser."
Public Sub OnActionButton(Control As IRibbonControl)
Select Case Control.ID
Case Else
Debug.Print "Case """; Control.ID; """" ' vbTab; "' "; Control.Tag; """" ' // cette ligne crée automatiquement la section case avec le nom du contrôle ;)
End Select
End Sub
Tu remarquera que les Case ne sont pas remplie, quand tu va cliquer sur les boutons cela va créer les case pour tes Select dans la fenêtre d'exécution.
Tu n'as plus qu'a faire un copier coller aux endroits que tu veux.
'@Description "Déclenchée lorsque vous cliquez sur le contrôle afin de l'utiliser."
Public Sub OnActionButton(Control As IRibbonControl)
Select Case Control.ID
Case "btnAbout"
' // Lance la fenêtre d'aide
Ribbon.RunInformationsForm
Case "btnHelpMicrosoft"
' // Lance l'explorateur sur l'aide Microsoft
Ribbon.RunHelpMicrosoftLink
Case "btnRunMacro"
' // Lance une procédure
Case Else
Debug.Print "Case """; Control.ID; """" ' vbTab; "' "; Control.Tag; """" ' // cette ligne crée automatiquement la section case avec le nom du contrôle ;)
End Select
End Sub
Ensuite je créer un module Ribbon par exemple qui regroupe les fonctions et procédures d'action des contrôles (Exemple sur le bouton About ci-dessus)
Module Ribbon :
'@IgnoreModule
'@Folder "Ribbon management"
Option Explicit
Public Sub RunInformationsForm()
Dim localForm As InformationsClasseur
Set localForm = New InformationsClasseur
With localForm
.Show
End With
End Sub
Public Sub RunHelpMicrosoftLink()
ThisWorkbook.FollowHyperlink Address:="https://learn.microsoft.com/fr-fr/office/vba/api/overview/", NewWindow:=True
End Sub
Voilà, si cela t'intéresse je peux t'en dire plus, et te donner l'intégralité du module Callbacks qui regroupe les procédures des contrôles les plus utilisés.