Rattacher tous les boutons de mon classeur à un seul module de classe

  • Initiateur de la discussion Initiateur de la discussion Troudz
  • Date de début Date de début

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 !

Troudz

XLDnaute Occasionnel
Bonjour le forum !

Je voudrais relier l'ensemble des CommandButton d'un classeur à un même module de classe. Ne connaissant ni le nom, ni le nombre de ces boutons, j'aurai aimé créer ce lien dès l'ouverture du classeur en procédant par boucle :

Code:
Private Bouton_Valideur() As New Bouton_Validation
Private Sub Workbook_Open()
    Dim Bouton As Shape
    Dim Feuille As Worksheet
    
    For Each Feuille In ThisWorkbook.Sheets
        For Each Bouton In Feuille.Shapes
                Cptr = Cptr + 1
            End If
        Next
    Next
    ReDim Bouton_Valideur(Cptr)
    Cptr = 1
    For Each Feuille In ThisWorkbook.Sheets
        For Each Bouton In Feuille.Shapes
                Set Bouton_Valideur(Cptr).MonBouton = Bouton
                Cptr = Cptr + 1
            End If
        Next
    Next
End Sub

Le module de classe :
Code:
Option Explicit
Public WithEvents MonBouton As MSForms.CommandButton

Private Sub MonBouton_Click()
    MsgBox MonBouton.Name & " est bien relié au module de classe"
End Sub

Mon soucis est que je n'arrive pas à gérer le fait que ces boutons sont considérés comme des shapes et non comme des CommandButton.

Auriez vous quelques pour m'aider ?

Je vous remercie par avance pour toute aide.

Bonne journée
 
Re : Rattacher tous les boutons de mon classeur à un seul module de classe

Bonjour,

essaye peut être en bouclant ainsi :
Code:
For Each Feuille In ThisWorkbook.Sheets
    For Each Bouton In Feuille.OLEObjects
        If TypeOf Bouton.Object Is MSForms.CommandButton Then
bon après midi
@+
 
Re : Rattacher tous les boutons de mon classeur à un seul module de classe

Bonjour Pierrot93 et merci pour ton aide,

Effectivement, en bouclant sur les OLEObjects, ça passe impeccable !
J'avoue que j'ai du mal à comprendre la différence entre les Controls, Shapes et autres OLEObjects et encore plus de mal à jongler entre ces différents types.

Pour ceux que ça pourrait aider, voici le code complet et opérationnel :
Code:
Private Sub Workbook_Open()
    Dim Bouton As Object
    Dim Feuille As Worksheet
    
    For Each Feuille In ThisWorkbook.Sheets
        For Each Bouton In Feuille.OLEObjects
            If TypeOf Bouton.Object Is MSForms.CommandButton And Bouton.Name Like "Bouton_*" Then Cptr = Cptr + 1
        Next
    Next
    ReDim Bouton_Valideur(Cptr)
    Cptr = 1
    For Each Feuille In ThisWorkbook.Sheets
        For Each Bouton In Feuille.OLEObjects
            If TypeOf Bouton.Object Is MSForms.CommandButton And Bouton.Name Like "Bouton_*" Then
                Set Bouton_Valideur(Cptr).MonBouton = Bouton.Object
                Cptr = Cptr + 1
            End If
        Next
    Next
End Sub

Merci beaucoup pour ton aide et bon après midi.
 
Re : Rattacher tous les boutons de mon classeur à un seul module de classe

Re,

tu pourrais faire qu'une seule boucle :
Code:
    Dim Bouton As Object
    Dim Feuille As Worksheet
    
    For Each Feuille In ThisWorkbook.Sheets
        For Each Bouton In Feuille.OLEObjects
            If TypeOf Bouton.Object Is MSForms.CommandButton And Bouton.Name Like "Bouton_*" Then
            Cptr = Cptr + 1
            ReDim Preserve Bouton_Valideur(1 To Cptr)
            Set Bouton_Valideur(Cptr).MonBouton = Bouton.Object
End If
        Next
    Next
 
- 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

Retour