Bonjour,
Dans le code VBA Excel suivant, je suit face à un problème :
Lorsque j'exécute la fonction AjouterBT, je peux observer que l'évènement est chargé dans ma fenêtre d'exécution.
Cependant, le clic sur le bouton créé n'a pas d'action.
Si maintenant j'exécute la fonction InitBouton, le clic affiche bien le nom du bouton !
Module
Code :
- Option Explicit
- Public Collect As Collection
- Sub AjouterBT()
- Dim tObject As Object
-
- Worksheets.Add
- 'Ajout du bouton
- Set tObject = ActiveSheet.OLEObjects.Add(ClassType:="Forms.Commandbutton.1", _
- Link:=False, _
- DisplayAsIcon:=False, _
- Left:=1, _
- Top:=50, _
- Width:=72, _
- Height:=24)
- tObject.name = "BTest"
- tObject.Object.Caption = "Test"
- 'Destruction du pointeur
- Set tObject = Nothing
- 'Chargement de l'évènement
- Call InitBouton
- Debug.Print "Vérif création OK : " & Collect.Item(1).GroupBoutons.name
- End Sub
- Public Sub InitBouton()
- Dim Obj As OLEObject
- Dim Cl As Classe1
-
- Set Cl = Nothing
- Set Collect = New Collection
- 'boucle sur les objets de la active
- For Each Obj In ActiveSheet.OLEObjects
- 'verifie s'il s'agit d'un bouton
- If TypeOf Obj.Object Is MSForms.CommandButton Then
- Set Cl = New Classe1
- Set Cl.GroupBoutons = Obj.Object
- Collect.Add Cl
- Debug.Print "Bouton ajouté : " & Obj.name
- End If
- Next Obj
- End Sub
- Sub BoutonClick(name As String)
- Cells(1, 1).Value = name
- End Sub
|
Module de classe 'Classe1'
Code :
- Option Explicit
- Public WithEvents GroupBoutons As MSForms.CommandButton
- Private Sub GroupBoutons_Click()
- Call BoutonClick(GroupBoutons.name)
- End Sub
|
Comment ce fait-il que ma collection reste en mémoire si je lance la fonction InitBouton séparément et pas lorsqu'elle est appelée par la fonction AjouterBT ?!?