Combo en cascade

boby63

XLDnaute Nouveau
Bonjour
Je veux ajouter dans un USF 2 combo en cascade.
J'y suis presque parvenu (le combo27 dépend du choix fait dans le combo1)
Dans l'initialisation de l'USF, j'ai rajouté :

With Sheets("Cascade")
Set MonDico = CreateObject("Scripting.Dictionary")
For Each c In .Range([A2], [A65000].End(xlUp))
If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
Next c
temp = MonDico.items
Me.ComboBox1.List = temp
Me.ComboBox1.ListIndex = -1
End With


Puis ajouté cette sub :
Private Sub ComboBox1_Change()
i = 0
Me.ComboBox27.Clear
For Each c In Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
Me.ComboBox27.AddItem c.Offset(0, 1)
i = i + 1
End If
Next c
End Sub


Ça marche super bien, tant que je lance l'USF sur la feuille "Cascade" ... Par contre, ça marche plus du tout si je suis sur une autre feuille (l'USF ne s'ouvre même pas)
Je me doute que c'est un problème de points entre le With et le End With mais mes tentatives sont restées vaines depuis ce matin ....
Désolé, j'essaie, d'apprendre, de comprendre et d'adapter, mais là je sèche vraiment
merci d'avance
 

Bebere

XLDnaute Barbatruc
bonjour Boby
bienvenue

'menu outils , choisir références
'dans laliste choisir microsoft scripting runtime et cocher (pour dictionary)
'dans le code déclarer
Dim mondico As New dictionary
With Sheets("Cascade")
' Set mondico = CreateObject("Scripting.Dictionary")
For Each c In .Range([A2], [A65000].End(xlUp))
mondico(c.Value) = c.Value
Next c
End With

'temp = MonDico.Items
Me.ComboBox1.List = mondico.Items 'temp
Me.ComboBox1.ListIndex = -1


Private Sub ComboBox1_Change()
' i = 0
Me.ComboBox27.Clear
With Sheets("Cascade")
For Each c In .Range([A2], [A65000].End(xlUp))
If c = Me.ComboBox1 Then
Me.ComboBox27.AddItem c.Offset(0, 1)
' i = i + 1
End If
Next c
End With

End Sub
 

Paf

XLDnaute Barbatruc
Bonjour boby63,

Dans l'initialisation de l'USF,
With Sheets("Cascade")
For Each c In .Range([A1], [A65000].End(xlUp))

le range est bien référencé à la feuille Cascade (présence du .) mais ni [A1] ni [A65000] qui sont donc référencés sur la feuille courante.
il faut donc : For Each c In .Range(.[A1], .[A65000].End(xlUp))

dans Private Sub ComboBox1_Change() , rien n'est référencé, on travaille donc sur la feuille courante .

A+

Edit: bonjour Bebere
 

Discussions similaires

Réponses
2
Affichages
156
Réponses
3
Affichages
210

Statistiques des forums

Discussions
312 345
Messages
2 087 477
Membres
103 555
dernier inscrit
Chtio