Bonjour,


Le projet qui m'amène ici est un modèle .dotm qui sera chargé par l'utilisateur en tant que modèle global
C'est un customUI contenant :
- 10 boutons de macros
- 1 bouton, ouvrant "MonFormulaire" (défini par onAction dans le xml), qui déclecnche "Sub Code1_OuvreFormulaire(control As IRibbonControl)"
Le formulaire contient :
- 10 CheckBox (1 à 10), chacun devant permettre à l'utilisateur de choisir les boutons de macros qu'il souhaite afficher (un souci ultérieur sera de mémoriser ses choix, mais je n'en suis pas là...)
- 1 bouton OKButton_Click pour valider les choix, et fermer le formulaire.


Comme je ne suis pas développeur, j'ai fait appel à... j'ai un peu honte de le dire... ChatGPT version gratuite.
Voici les derniers codes, si ça intéresse quelqu'un :


' MonFormulaire
Public Sub OKButton_Click()
    Dim i As Integer
    For i = 1 To 10
        Module1.buttonVisibility(i) = Me.Controls("CheckBox" & Format(i, "00")).Value
    Next i
    Module1.Code3_UpdateButtonVisibility
    Me.Hide
End Sub
' Module1 du TemplateProject
Option Explicit
Public myForm As Object ' Vous pouvez déclarer le formulaire en tant qu'objet générique
' mon "conseiller" a voulu déclarer le formulaire en Objet, après les échecs d'autres méthodes
Public buttonVisibility(1 To 10) As Boolean
Public myRibbonUI As IRibbonUI
Sub Code1_OuvreFormulaire(control As IRibbonControl)
    ' Vérifier si le formulaire n'est pas déjà ouvert
    If myForm Is Nothing Then
        ' Créer une nouvelle instance du formulaire
        Set myForm = New MonFormulaire
        ' Afficher le formulaire
        myForm.Show
    Else
        ' Le formulaire est déjà ouvert, le mettre au premier plan
        myForm.Show
    End If
End Sub
Sub Code3_UpdateButtonVisibility()
    Dim i As Integer
    ' Mettez à jour les états de visibilité des boutons en fonction des valeurs dans le tableau buttonVisibility
    On Error Resume Next
    For i = 1 To 10
        myRibbonUI.InvalidateControl "button" & Format(i, "00")
    Next i
    On Error GoTo 0
End Sub
Sub ToggleButtonVisibility(control As Office.IRibbonControl)
    Dim buttonIndex As Integer
    buttonIndex = CInt(Right(control.ID, 2))
    
    If buttonIndex >= 1 And buttonIndex <= 10 Then
        buttonVisibility(buttonIndex) = Not buttonVisibility(buttonIndex)
        Code3_UpdateButtonVisibility
    End If
End Sub
Sub MacroButton(control As Office.IRibbonControl)
    Select Case control.ID
        Case "button01"
Call Message01
        Case "button02"
Call Message02
        Case "button03"
Call Message03
'ETC.
EndSub
Voilà !
Si ça fait Tilt à une âme charitable, ce sera avec joie que je suivrai ses instructions ; sinon je posterai dans le forum English, la semaine prochaine.
Merci !