Adapter liste déroulante

Bonjour à tous,

Je vous écris car je ne trouve pas bonheur sur votre forum.

J'ai un fichier Excel avec une liste déroulante par commune. Celui-ci sélectionne des équipements par commune. Celui-ci fonctionne très bien mais j'aimerais effectuer un premier filtre par département afin d'obtenir moins de communes dans la liste déroulante communes.

J'espère être clair Mon fichier est joint.

Encore merci pour votre aide.

PM

20test-vba.xlsm (477.65 Ko)

Bonsoir,

Ajouter un autre ComboBox appelé "ComboBox2" puis remplacer la proc "Initialize" du Formulaire par celle ci-dessous et ajouter la proc "Private Sub ComboBox2_Click()" (ci-dessous aussi) :

Private Sub UserForm_Initialize()

    Dim Plage As Range
    Dim I As Long
    Dim DicoDep As Object
    Dim TT As Variant

    Set DicoDep = CreateObject("Scripting.Dictionary")

    'défini la plage en colonne B à partir de B2
    With Worksheets("Departement"): Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With

    For I = 1 To Plage.Count: DicoDep(Plage(I).Value) = "": Next I

    TT = DicoDep.keys
    Tri TT, LBound(TT), UBound(TT)
    Me.ComboBox2.List = TT

End Sub

Private Sub ComboBox2_Click()

    Dim Plage As Range
    Dim Cel As Range
    Dim Tbl() As String
    Dim Adr As String
    Dim I As Integer

    'défini la plage en colonne B à partir de B2
    With Worksheets("Departement"): Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With

    'effectue la recherche du département
    Set Cel = Plage.Find(ComboBox2.Text, , xlValues, xlWhole)

    'si trouvé, rempli le tableau avec le nom des communes en faisant parties
    If Not Cel Is Nothing Then

        ComboBox1.Clear

        Adr = Cel.Address

        Do

            I = I + 1
            ReDim Preserve Tbl(1 To I)
            Tbl(I) = Cel.Offset(, -1).Value

            Set Cel = Plage.FindNext(Cel)

        Loop While Cel.Address <> Adr

    End If

    'tri...
    Tri Tbl, LBound(Tbl), UBound(Tbl)

    'puis passage au Combo
    Me.ComboBox1.List = Tbl

End Sub

Un grand merci, ça fonctionne parfaitement !

Rechercher des sujets similaires à "adapter liste deroulante"