patricktoulon
XLDnaute Barbatruc
Bonjour a tous
de bon matin a la fraîche j'ai une énigme a résoudre
j'ai une toute petite classe combobox en cascade (exemple assez succin) qui oublie après la première sélection dans les 3 combo
j'explique je lance le userform il rempli la première appelle la classe pour l'event combobox
je sélectionne dans la première OK , la 2d OK , la 3eme OK
je reviens sur une des précédente et là ça plante
je contrôle pour quoi en débogage et j'ai mon tableau d'object combobox ("Combosoeurs") vide
je suis perplexe ai-je oublié quelque chose
me serais je levé trop tot
dans mon userform j'ai 3 comb (cmb1,cmb2,cmb3)
le code
on se moque pas je sais la méthode sans doublons avec le( .value/.listindex-1) est archaïque
le code ma classe
l'erreur
de bon matin a la fraîche j'ai une énigme a résoudre
j'ai une toute petite classe combobox en cascade (exemple assez succin) qui oublie après la première sélection dans les 3 combo
j'explique je lance le userform il rempli la première appelle la classe pour l'event combobox
je sélectionne dans la première OK , la 2d OK , la 3eme OK
je reviens sur une des précédente et là ça plante
je contrôle pour quoi en débogage et j'ai mon tableau d'object combobox ("Combosoeurs") vide
je suis perplexe ai-je oublié quelque chose
me serais je levé trop tot
dans mon userform j'ai 3 comb (cmb1,cmb2,cmb3)
le code
on se moque pas je sais la méthode sans doublons avec le( .value/.listindex-1) est archaïque
VB:
Dim cls As New Classecomb
Private Sub UserForm_Activate()
Dim tbl
tbl = Range("tableau1")
cls.initcombo Me, Range("tableau1").Value
With cmb1
For i = 1 To UBound(tbl)
.Value = tbl(i, 1)
If .ListIndex = -1 Then .AddItem tbl(i, 1)
Next
.Value = ""
End With
End Sub
le code ma classe
VB:
Public WithEvents cmb As MSForms.ComboBox
Dim cl(1 To 3) As New Classecomb
Public Combosoeurs
Public T
Public indexo&
Public Function initcombo(uf, tabl)
Dim toutes(1 To 3), i&, z&, T
For i = 1 To 3
Set cl(i).cmb = uf.Controls("cmb" & i)
Set toutes(i) = uf.Controls("cmb" & i)
cl(i).T = tabl
cl(i).indexo = i
Next
For z = 1 To 3: cl(z).Combosoeurs = toutes: Next
End Function
Private Sub cmb_Click()
If indexo <= 2 Then 'on arrete la gestion du clik a la 2d
With Combosoeurs(indexo + 1)
.Clear
For a = 1 To UBound(T)
.Value = T(a, indexo + 1)
If T(a, indexo) = cmb.Value Then If .ListIndex = -1 Then .AddItem T(a, indexo + 1)
Next
.Value = ""
End With
End If
End Sub
l'erreur