Bonsoir Zving, bonsoir le forum,
Tu compares la valeur d'une cellule numérique avec la valeur d'une combobox de type String (texte). L'égalité n'y est pas car, par exemple, 2011 est différent de "2011"... Il faut convertir la valeur de la cellule en texte avec CStr. C'est pour cela que le code marche bien jusqu'aux sites (texte) mais dès qu'on arrive aux années (numériques), ça plante...
Ton code adapté et modifié (si une combobox ne contient qu'une seul élément, celui-ci s'affiche, sinon elle est vide et attend le choix de l'utilisateur) :
Private F As Worksheet
Private Sub UserForm_Initialize()
Set F = Sheets("Médecine de travail") 'Menu cascade pour zone/equip consultation
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range(F.[B2], F.[B65000].End(xlUp))
mondico(c.Value) = c.Value
Next c
Me.ComboBox2_siteDeTravail.List = mondico.items
End Sub
Private Sub ComboBox2_siteDeTravail_Change()
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range(F.[B2], F.[B65000].End(xlUp))
If c.Value = Me.ComboBox2_siteDeTravail Then mondico(c.Offset(, 10).Value) = c.Offset(, 10).Value
Next c
Me.ComboBox4_Annee.List = mondico.items
If UBound(mondico.items) = 0 Then
Me.ComboBox4_Annee.ListIndex = 0
Else
Me.ComboBox4_Annee.ListIndex = -1
End If
End Sub
Private Sub ComboBox4_Annee_Change()
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range(F.[B2], F.[B65000].End(xlUp))
If c.Value = Me.ComboBox2_siteDeTravail And CStr(c.Offset(, 10).Value) = Me.ComboBox4_Annee Then mondico(c.Offset(, 11).Value) = c.Offset(, 11).Value
Next c
Me.ComboBox5_Mois.List = mondico.items
If UBound(mondico.items) = 0 Then
Me.ComboBox5_Mois.ListIndex = 0
Else
Me.ComboBox5_Mois.ListIndex = -1
End If
End Sub
Private Sub ComboBox5_Mois_Change()
Set mondico = CreateObject("Scripting.Dictionary")
For Each c In Range(F.[B2], F.[B65000].End(xlUp))
If c.Value = Me.ComboBox2_siteDeTravail And CStr(c.Offset(, 10).Value) = Me.ComboBox4_Annee _
And CStr(c.Offset(, 11).Value) = Me.ComboBox5_Mois Then mondico(c.Offset(, 12).Value) = c.Offset(, 12).Value
Next c
Me.ComboBox6_Jour.List = mondico.items
If UBound(mondico.items) = 0 Then
Me.ComboBox6_Jour.ListIndex = 0
Else
Me.ComboBox6_Jour.ListIndex = -1
End If
End Sub