Bonjour Sam,
En souhaitant avoir bien compris ta demande...
Il faut tout d'abord un user form, ici uf00 contenant les deux combos Cbo1 et Cbo2, ainsi qu'un module pour recevoir le code.
Le code directement associé au userform: (En cliquant sur le userform, en mode développement)
Private Sub UserForm_initialize()
Call Init ' Appelle la procédure Init située dans le Module1
End Sub
Private Sub Cbo1_Change() ' ... lorsque change la valeur de Cbo1
uf00.cbo2.Value = "" ' Efface la valeur du Cbo2
Call fillCbo3 ' Remplit un tableau en fonction de la sélection de Cbo1
uf00.cbo2.List = vCbo3 ' Attribue à Cbo2 les choix identifiés dans la procédure fillCbo3
End Sub
MODULE1
Sub Init() ' Procédure appelée directement lorsque uf00 est chargé.
'Remplissage du tableau vCbo1
ReDim vCbo1(4)
vCbo1(1) = "A"
vCbo1(2) = "B"
vCbo1(3) = "C"
vCbo1(4) = "D"
'Remplissage du tableau vCbo2
ReDim vCbo2(9, 2)
vCbo2(1, 1) = "A"
vCbo2(1, 2) = "2"
vCbo2(2, 1) = "A"
vCbo2(2, 2) = "3"
vCbo2(3, 1) = "A"
vCbo2(3, 2) = "3.5"
vCbo2(4, 1) = "B"
vCbo2(4, 2) = "2.9"
vCbo2(5, 1) = "C"
vCbo2(5, 2) = "2.55"
vCbo2(6, 1) = "C"
vCbo2(6, 2) = "1.0"
vCbo2(7, 1) = "D"
vCbo2(7, 2) = "4.0"
vCbo2(8, 1) = "D"
vCbo2(8, 2) = "2.0"
vCbo2(9, 1) = "D"
vCbo2(9, 2) = "1.0"
'Attribution des valeurs au premier combo
uf00.cbo1.List = vCbo1
'On peut aussi attribuer les valeurs initiales au combo
uf00.cbo1.Value = "A"
End Sub
Sub fillCbo3() ' Procédure appelée lors du changement de valeur de Cbo1
'Calcul du nombre de valeurs à prévoir dans le menu Cbo2, en fonction du choix effectué dans Cbo1
Dim vL1, vL2, vL3 As Single
vL1 = 1
vL2 = UBound(vCbo2)
vL3 = 0
Do While vL1 <= vL2
If vCbo2(vL1, 1) = uf00.cbo1.Value Then
vL3 = vL3 + 1
End If
vL1 = vL1 + 1
Loop
'Redimensionner vCbo3 en fonction du choix de Cbo1
ReDim vCbo3(vL3)
'Remplissage de vCBO3 en fonction du choix de Cbo1
vL1 = 1
vL3 = 1
Do While vL1 <= vL2
If vCbo2(vL1, 1) = uf00.cbo1.Value Then
vCbo3(vL3) = vCbo2(vL1, 2)
vL3 = vL3 + 1
End If
vL1 = vL1 + 1
Loop
End Sub
bon succès.