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

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
 

Pierrot93

XLDnaute Barbatruc
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
@+
 

Troudz

XLDnaute Occasionnel
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.
 

Pierrot93

XLDnaute Barbatruc
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
 

Discussions similaires

Réponses
29
Affichages
982

Statistiques des forums

Discussions
312 379
Messages
2 087 767
Membres
103 662
dernier inscrit
rterterert