Bonjour
Voici le code que j'utilise pour remplir mes combobox en cascade, mais je n'arrive pas à trier le combo initial, soit le 3.
Toute aide sera appréciée.
J'aurais préféré utilisé la méthode collection aussi, mais je ne sais pas comment elle fonctionne.
un coup de main est bienvenue.
Merci


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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Option Explicit
 
Dim Ws As Worksheet
Dim NbLignes As Integer
 
Private Sub UserForm_Initialize()
    'Définit la feuille contenant les données
    Set Ws = Worksheets("Empl")
    'Définit le nombre de lignes dans la colonne A
    NbLignes = Ws.Range("A65536").End(xlUp).Row
 
    'Remplissage du ComboBox3
    Alim_Combo 3
 
End Sub
Private Sub ComboBox3_Change()
    'Remplissage Combo4
    Alim_Combo 4, ComboBox3.Value
End Sub
 
'Procédure pour alimenter les ComboBox
Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant)
    Dim j As Integer
    Dim Obj As Control
 
    'Définit le ComboBox à remplir
    Set Obj = Me.Controls("ComboBox" & CbxIndex)
    'Supprime les anciennes données
    Obj.Clear
 
    'alimente le Combobox initial (Combobox3)
    If CbxIndex = 3 Then
        'Boucle sur les lignes de la colonne A (à partir de la 2eme ligne)
        For j = 8 To NbLignes
            Obj = Ws.Range("G" & j)
            'Remplit le ComboBox sans doublons
            If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("G" & j)
        Next j
    Else
        For j = 8 To NbLignes
            If Ws.Range("G" & j).Offset(0, CbxIndex - 4) = Cible Then
                Obj = Ws.Range("G" & j).Offset(0, CbxIndex - 7)
                If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("G" & j).Offset(0, CbxIndex - 7)
            End If
        Next j
   End If
 
   'Enlève la sélection dans le ComboBox
   Obj.ListIndex = -1
End Sub
 
Private Sub CommandButton1_Click()
Unload Me
End Sub