Combobox en cascade

Bonjour,

j'ai un tableau avec 3 colonnes.

1 - ville

2 région

3 - valeur.

ce que j'essaye de faire :

j'ai un userform avec 2 combobox.

  • je veux que dans la première soient listées sans doublon les régions de la colonne 2 (ça, ça marche )
  • je veux que la deuxième combobox soit alimentée avec les villes qui correspondent à la région séléctionnée ( marche pas)

merci de votre aide

21tableau-switch.xlsm (32.14 Ko)

Bonjour Mickey, bonjour le forum,

Je ne comprends pas pourquoi tu utilises des ComboBoxes aussi hautes que des ListBoxes ?!... Ce n'est ni très joli, ni très efficace...

Remplace ton code par :

Option Explicit
Private Ws As Worksheet
Private TV As Variant

Private Sub UserForm_Initialize()
Dim D As Object
Dim I As Integer

Set Ws = Worksheets("data")
TV = Ws.Range("A1").CurrentRegion
Set D = CreateObject("scripting.dictionary")
For I = 2 To UBound(TV, 1)
    D(TV(I, 2)) = ""
Next I
If D.Count > 1 Then Me.ComboBox1.List = Application.Transpose(D.keys)
End Sub

Private Sub ComboBox1_Change()
Dim I As Integer

ComboBox2.Clear '
If ComboBox1.Value = "" Then Exit Sub
For I = 2 To UBound(TV, 1)
    If TV(I, 2) = Me.ComboBox1.Value Then Me.ComboBox2.AddItem TV(I, 1)
Next I
End Sub

J'ai gardé les doublons dans la ComboBox2 car je ne sait pas ce que tu compte faire par la suite...

merci ThauThème ,

ça marche bien sur mon tableau en exemple , code propre et rapide.

cependant, adapté à mon tableau de 25000 lignes et 35 colonnes, j'ai une erreur d’exécution 6 - dépassement de capacité une idée ?

dans l'attente, je garde mon code pas propre

Option Explicit
Dim Ws As Worksheet
Dim NbLignes As Integer

Private Sub ComboBox1_Change()
Dim j As Long
Dim kol As New Collection
 MsgBox NbLignes

For j = CLng(1) To NbLignes
    On Error Resume Next
    If Ws.Range("F" & j).Value = Me.ComboBox1.Value Then kol.Add Ws.Range("E" & j).Value, Range("E" & j).Value
Next j
Me.ComboBox2.Clear
For j = 1 To kol.Count
    Me.ComboBox2.AddItem kol(j)
Next j
End Sub

Private Sub ComboBox2_Change()

End Sub

Private Sub TextBox1_Change()

End Sub

Private Sub UserForm_Initialize()

Dim v, e
Dim i As Integer
Set Ws = Worksheets("data")

Range("F:F") = [index(Upper(F:F),)]

NbLignes = Ws.Cells(Ws.Rows.Count, 1).End(xlUp).Row
With Sheets("data").Range("F:F")
    v = .Value
     End With
With CreateObject("scripting.dictionary")
    .comparemode = 1
    For Each e In v

        If Not .exists(e) Then .Add e, Nothing
    Next
    If .Count Then Me.ComboBox1.List = Application.Transpose(.keys)

End With

End Sub

petite question subsidiaire :

j'aimerai que les valeurs de la colonne X qui correspondent(plusieurs cellules) au choix de ma combobox2 s'affiche dans une textbox.

encore merci (de plus , j'ai découvert la fonction currentregion

Re,

Problème de type de variable Interger limite à 32 767 lignes. Le type Long devrait fonctionner. Comment mettre plusieurs résultat dans une Textbox ?!... J'ai remplacer ta TextBox par une ListBox, tu adapteras.

À tester...

Option Explicit
Private Ws As Worksheet
Private TV As Variant

Private Sub UserForm_Initialize()
Dim D As Object
Dim I As Long

Set Ws = Worksheets("data")
TV = Ws.Range("A1").CurrentRegion
Set D = CreateObject("scripting.dictionary")
For I = 2 To UBound(TV, 1)
    D(TV(I, 2)) = ""
Next I
If D.Count > 1 Then Me.ComboBox1.List = Application.Transpose(D.keys)
End Sub

Private Sub ComboBox1_Change()
Dim I As Long

ComboBox2.Clear '
If ComboBox1.Value = "" Then Exit Sub
For I = 2 To UBound(TV, 1)
    If TV(I, 2) = Me.ComboBox1.Value Then Me.ComboBox2.AddItem TV(I, 1)
Next I
End Sub

Private Sub ComboBox2_Change()
Dim I As Long

Me.listbox1.Clear '
If ComboBox2.Value = "" Then Exit Sub
For I = 2 To UBound(TV, 1)
    If TV(I, 2) = Me.ComboBox1.Value And Me.TV(I, 24) = Me.ComboBox2.Value Then Me.listbox1.AddItem TV(I, 24)
Next I
End Sub

toujours en erreur 6, trop de colonnes je pense

Re,

Oui cette méthode est limitée (mais je ne connais pas les limites) et ton tableau est vraiment très gros... Désolé.

Bonjour,

ci-jointe autre proposition

merci à vous

Rechercher des sujets similaires à "combobox cascade"