Salut,
voici un exemple avec 2 boutons dans le ruban :
le customUI.xml :
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="RibbonOnLoad">
<ribbon>
<tabs>
<tab id="tabPerso" label="Mon onglet">
<group id="grpActions" label="Actions">
<button id="btnMonControle1"
label="Bouton Feuil1"
onAction="BtnMonControle1_Click"
getEnabled="GetEnabled"/>
<button id="btnMonControle2"
label="Bouton Rapport"
onAction="BtnMonControle2_Click"
getEnabled="GetEnabled"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Dans un module standard VBA du classeur on récupère l'objet ruban pour pouvoir l'utiliser ensuite :
' Déclaration d'une variable globale pour stocker l'objet ruban
Public gRibbon As IRibbonUI
' Callback appelé automatiquement à l'ouverture du ruban
Public Sub RibbonOnLoad(ribbon As IRibbonUI)
' Stocker l'objet IRibbonUI dans la variable globale
Set gRibbon = ribbon
End Sub
Pour valider un bouton suivant la feuille active on peut faire comme cela :
' Callback pour getEnabled
Public Function GetEnabled(control As IRibbonControl) As Boolean
Dim wsName As String
wsName = Application.ActiveSheet.Name
Select Case control.Id
Case "btnMonControle1"
' Activer uniquement si la feuille s'appelle "Feuil1"
GetEnabled = (wsName = "Feuil1")
Case "btnMonControle2"
' Activer uniquement si la feuille s'appelle "Rapport"
GetEnabled = (wsName = "Rapport")
Case Else
' Par défaut, activer
GetEnabled = True
End Select
End Function
et pour rafraichir le ruban sur changement de feuille on peut mettre ce code dans le vba workbook :
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Not gRibbon Is Nothing Then
gRibbon.Invalidate ' Force Excel à rappeler getEnabled
End If
End Sub
Ami calmant, J.P