Liste déroulante vide après choix multiple
Bonjour à tous,
Travaillant sue Excel 365 version 2202 je cherche à créer une liste déroulante qui puiserai les données dans deux feuilles différentes selon la question précédente.
Je m'explique : La première liste déroulante appelée End use contient 2 item : AAA ou BBB
Si la réponse AAA est sélectionnée, la seconde liste déroulante proposera des options de la feuille Data_AAA
Si la réponse BBB est sélectionnée, la seconde liste déroulante proposera des options de la feuille Data_BBB
Seulement la seconde liste devient vide dès lors que j'essaie d'utiliser une fonction If...
Voici le bout de code en question:
'Choix multiple avec end use
Repuse.AddItem "AAA"
Repuse.AddItem "BBB"
' remplissage des combobox avec tri alphabétique
If Repuse = "AAA" Then
Set f = Sheets("Data_AAA") 'Liste AAA
Set dico = CreateObject("Scripting.Dictionary")
Set plage = f.Range("B8:B" & f.Range("B" & Rows.Count).End(xlUp).Row)
Call sprog
Me.Repsupplier.List = temp
Me.Repsupplier.AddItem o, 0 'rajoute other dans la liste en première position
Set plage = f.Range("A8:A" & f.Range("A" & Rows.Count).End(xlUp).Row)
Call sprog ' fonction pour remplissage des combobox avec tri alphabétique
Me.Repgrade.List = temp
Me.Repgrade.AddItem o, 0
ElseIf Repuse = "BBB" Then
Set f = Sheets("Data_BBB") 'Liste BBB
Set dico = CreateObject("Scripting.Dictionary")
Set plage = f.Range("B8:B" & f.Range("B" & Rows.Count).End(xlUp).Row)
Call sprog
Me.Repsupplier.List = temp
Me.Repsupplier.AddItem o, 0 'rajoute "other dans la liste en première position
Set plage = f.Range("A8:A" & f.Range("A" & Rows.Count).End(xlUp).Row)
Call sprog ' fonction pour remplissage des combobox avec tri alphabétique
Me.Repgrade.List = temp
Me.Repgrade.AddItem o, 0
End If
End SubSi j'enlève la fonction If, le code ramenant à la seconde liste déroulante marche très bien...
Merci par avance pour vos lumières.
Az
Bonjour et bienvenue,
Joins un fichier pour une aide adaptée du forum.
Cdlt.
Bonjour,
Merci pour votre réponse mais le fichier est confidentiel et donc ne peut pas être partagé.
Cependant je viens de trouver une solution à mon problème.
J'ai remplacé la première liste déroulante par des boutons cliquables.
Ces derniers étant dans des subs séparés, ils ne se gênent pas.
Nouveau code si certains peuvent en profiter :
Private Sub AAA_Click()
'Permet de vérifier que les cases réponses ne soient pas vides
If Len(Me.Repname.Value & "") = 0 Or Len(Me.Repmail.Value & "") = 0 Then 'si une des réponse est vide
MsgBox "Please complete all information before validate"
End If
Supplier.Visible = True
Repsupplier.Visible = True
Grade.Visible = True
Repgrade.Visible = True
Set f = Worksheets("Data_AAA")
repuse = "AAA"
Set dico = CreateObject("Scripting.Dictionary")
Set plage = f.Range("B8:B" & f.Range("B" & Rows.Count).End(xlUp).Row)
Call sprog
Welcome.Repsupplier.List = temp
Welcome.Repsupplier.AddItem o, 0 'rajoute "other dans la liste en première position
Set plage = f.Range("A8:A" & f.Range("A" & Rows.Count).End(xlUp).Row)
Call sprog ' fonction pour remplissage des combobox avec tri alphabétique
Me.Repgrade.List = temp
Me.Repgrade.AddItem o, 0
End Sub
Private Sub BBB_Click()
'Permet de vérifier que les cases réponses ne soient pas vides
If Len(Me.Repname.Value & "") = 0 Or Len(Me.Repmail.Value & "") = 0 Then 'si une des réponse est vide
MsgBox "Please complete all information before validate"
End If
Supplier.Visible = True
Repsupplier.Visible = True
Grade.Visible = True
Repgrade.Visible = True
Set f = Worksheets("Data_BBB")
repuse = "BBB"
Set dico = CreateObject("Scripting.Dictionary")
Set plage = f.Range("B8:B" & f.Range("B" & Rows.Count).End(xlUp).Row)
Call sprog
Welcome.Repsupplier.List = temp
Welcome.Repsupplier.AddItem o, 0 'rajoute "other dans la liste en première position
Set plage = f.Range("A8:A" & f.Range("A" & Rows.Count).End(xlUp).Row)
Call sprog ' fonction pour remplissage des combobox avec tri alphabétique
Me.Repgrade.List = temp
Me.Repgrade.AddItem o, 0
End Sub
' fonction pour remplissage des combobox avec tri alphabétique
Sub sprog()
dico.RemoveAll
For Each c In plage
dico(c.Value) = c.Value
Next c
temp = dico.keys
Call Tri(temp, LBound(temp), UBound(temp))
End Sub
' fonction pour remplissage des combobox avec tri alphabétique
Sub Tri(a, gauc, droi) ' Quick sort
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
Do While a(g) < ref: g = g + 1: Loop
Do While ref < a(d): d = d - 1: Loop
If g <= d Then
tempo = a(g): a(g) = a(d): a(d) = tempo
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi)
If gauc < d Then Call Tri(a, gauc, d)
End SubBonne journée !