Bonjour a tous
J'ai de nouveau besoin de votre aide.
Pouvez vous me dir, pourquoi dans l'exemple que je vous joint,
si la valeur de la colonne B de la base est un chiffre,la cascade s'arrete
Cordialement J-C
J'ai de nouveau besoin de votre aide.
Pouvez vous me dir, pourquoi dans l'exemple que je vous joint,
si la valeur de la colonne B de la base est un chiffre,la cascade s'arrete
Cordialement J-C
Code:
Option Explicit
Dim Ws As Worksheet
Dim NbLignes As Integer
[COLOR="Green"]'Les données sont dans les colonnes A à D, d'un onglet nommé "Base".
'La procédure effectue un remplissage conditionnel des Combobox en fonction de
'ce qui est sélectionnée dans le contrôle précédent:
'La sélection du ComboBox1 (données colonne A) définit le contenu du ComboBox2 (données colonne B) ,
'La sélection du ComboBox2 définit le contenu du ComboBox3 (données colonne C) …etc...[/COLOR]
Private Sub UserForm_Initialize()
[COLOR="green"]'Définit la feuille contenant les données[/COLOR]
Set Ws = Worksheets("Base")
[COLOR="green"] 'Définit le nombre de lignes dans la colonne A[/COLOR]
NbLignes = Ws.Range("A65536").End(xlUp).Row
[COLOR="green"]'Remplissage du ComboBox1[/COLOR]
Alim_Combo 1
End Sub
Private Sub ComboBox1_Change()
[COLOR="green"]'Remplissage Combo2[/COLOR]
Alim_Combo 2, ComboBox1.Value
End Sub
Private Sub ComboBox2_Change()
[COLOR="green"]'Remplissage Combo3[/COLOR]
Alim_Combo 3, ComboBox2.Value
End Sub
Private Sub ComboBox3_Change()
[COLOR="green"]'Remplissage Combo4[/COLOR]
Alim_Combo 4, ComboBox3.Value
End Sub
[COLOR="green"]'Procédure pour alimenter les ComboBox[/COLOR]
Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant)
Dim j As Integer
Dim Obj As Control
[COLOR="green"]'Définit le ComboBox à remplir[/COLOR]
Set Obj = Me.Controls("ComboBox" & CbxIndex)
[COLOR="green"] 'Supprime les anciennes données[/COLOR]
Obj.Clear
[COLOR="green"] 'alimente le Combobox initial (Combobox1)[/COLOR]
If CbxIndex = 1 Then
[COLOR="green"] 'Boucle sur les lignes de la colonne A (à partir de la 2eme ligne)[/COLOR]
For j = 2 To NbLignes
Obj = Ws.Range("A" & j)
[COLOR="green"] 'Remplit le ComboBox sans doublons[/COLOR]
If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j)
Next j
Else
[COLOR="green"] 'Alimentation conditionnelle des autres Combobox en fonction de
'ce qui est sélectionnée dans le contrôle précédent:
'(La sélection du ComboBox1 définit le contenu du ComboBox2,
'La sélection du ComboBox2 définit le contenu du ComboBox3 …etc...)[/COLOR]
For j = 2 To NbLignes
If Ws.Range("A" & j).Offset(0, CbxIndex - 2) = Cible Then
Obj = Ws.Range("A" & j).Offset(0, CbxIndex - 1)
If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j).Offset(0, CbxIndex - 1)
End If
Next j
End If
[COLOR="green"] 'Enlève la sélection dans le ComboBox[/COLOR]
Obj.ListIndex = -1
End Sub
Pièces jointes
Dernière édition: