Bonjour,

Je crée dynamiquement une série de checkBox auxquelles j'associe (à chaque fois) une classe permettant de gérer l'événement Click sur ces dernières.
Cette classe "pointe" sur d'autres checkBox filles.
Les objets (associés aux checkBox) une fois instanciés sont stockés dans un dictionnaire de données.

Tout marche bien hormis le comportement du Click. En effet celui ci déclenche des événements à la chaîne.

Je m'explique; soit une chechBox, quand je la décoche, je fais en sorte que toutes ses checkBox "filles" (de niveau inférieur) soient décochées:
  1. Le fait de décocher la checkBox parente déclenche bien l’événement Click.
  2. Je parcours ensuite les CheckBox "filles" et modifie leur valeur (.Value = False) et (au malheur ) cette action déclenche l'événement Click pour chacune! Et ça je ne le veux pas et ne le comprends pas!

En effet pour moi le fait de modifier la valeur devrait être lié à l’événement Change et pas Click!!?

Si vous avez déjà rencontré ce problème et réussi à le contourner, je suis preneur.

Ci dessous le code du Click incriminé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
'Pour gérer l'évènement clic sur les objets type CheckBox
Private Sub ChkBx_Clik()
 
    Dim checked As Boolean
    Dim i As Integer
    Dim ChkBxFille As MSForms.CheckBox
    Dim tabFilles As Variant
 
    checked = ChkBx.Value
 
    'On décoche tous les enfants
    If Not checked Then
        If Len(mListeChkBxFilles) > 0 Then
            tabFilles = Split(mListeChkBxFilles, "|")   'la liste des filles est une chaine contenant leur nomsséparés par des "|"
            For i = LBound(tabFilles) To UBound(tabFilles)
                Set ChkBxFille = ChkBx.Parent.Controls(tabFilles(i))
                With ChkBxFille
                    If .Enabled Then .Value = checked   '!!! déclenche un autre onClick :-( !!!!
                End With
            Next i
        End If
    End If
 
    Set ChkBxFille = Nothing
End Sub
Merci d'avance à tous.