XL 2013 cascade liste déroulante triée

erics83

XLDnaute Impliqué
Bonjour,

Inspiré par l'excellent code de JB sur les listes déroulantes, j'ai essayé de modifié sans succès....

Ma liste se présente sous la forme "2 - Auto", donc j'aimerai que la première liste déroulante trie par ordre alphabétique (donc par le "A" de "Auto") et idem pour la seconde liste...En reprenant le code de JB, j'y suis arrivé en mettant un
VB:
monDico=mid(c.value, 5,50)
, et ensuite c'est bien trié par ordre alphabétique, mais pour diverses raisons, j'ai besoin de garder le "2 - Auto" lorsque je clique sur "Auto" dans ma liste déroulante....j'ai essayé en masquant des colonnes, mais cela ne fonctionne pas....Donc pour résumer, il faudrait que je puisse avoir une liste déroulante triée par ordre alphabétique, mais qui garderai la "référence" (="2 - AUTO").

J'ai essayé ça : créer une clef en mettant l'alphabet en 1er (pour le tri "temp" par la suite)), mais je n'arrive pas à récupérer ensuite....ça "bloque" lorsque je veux récupérer le "a"....

VB:
Dim Tbl
Private Sub Userform_Initialize()

 Set d = CreateObject("Scripting.Dictionary")
 Tbl = Feuil1.Range("A2:P" & Feuil1.[a60000].End(xlUp).Row)
 For i = LBound(Tbl) To UBound(Tbl)
   clé = Mid(Tbl(i, 2), 13, 100) & "|" & Tbl(i, 2)
   d(clé) = ""
 Next i

  temp = d.keys
  'les clés du dico dans la table temp()
  Call Tri(temp, LBound(temp), UBound(temp))
 Stop
 For Each c In temp.keys
   
    a = Split(c, "|")

Next
Merci pour votre aide.

Je mets en PJ le fichier de JB avec juste le rajout des numéros....
merci,
 

Pièces jointes

  • FormCascade2nivTriesV2.xlsm
    23.9 KB · Affichages: 12
Dernière édition:

erics83

XLDnaute Impliqué
J'ai trouvé....mais le code est pas très "beau".....
VB:
Private Sub Userform_Initialize()

 Set d = CreateObject("Scripting.Dictionary")
 
 Tbl = Feuil1.Range("A2:P" & Feuil1.[a60000].End(xlUp).Row)
 For i = LBound(Tbl) To UBound(Tbl)
   clé = Mid(Tbl(i, 2), 13, 100) & "|" & Tbl(i, 2)
   d(clé) = ""
 Next i


  temp = d.keys
  'les clés du dico dans la table temp()
  Call Tri(temp, LBound(temp), UBound(temp))
Dim b(): ReDim b(1 To d.Count, 1 To 2)

For Each c In temp 'd.keys
     j = j + 1
    a = Split(c, "|")
    b(j, 1) = a(0): b(j, 2) = a(1)
Next c

Me.APE.List = b


End Sub
 

Discussions similaires

Statistiques des forums

Discussions
315 103
Messages
2 116 246
Membres
112 695
dernier inscrit
ben44115