Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

menu déroulante sans doublons

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Re : menu déroulante sans doublons

Bonjour,

Listes sans doublons triée

0,1 sec pour 5.500 lignes

Code:
Private Sub UserForm_Click()
Private Sub UserForm_Initialize()
  Set f = Sheets("Feuil1")
  Set MonDico = CreateObject("Scripting.Dictionary")
  For Each c In Range(f.[A2], f.[A65000].End(xlUp))
    If c.Value <> "" Then MonDico.Item(c.Value) = c.Value
  Next c
  temp = MonDico.items
  Call Tri(temp, LBound(temp), UBound(temp))
  Me.ComboBox1.List = temp
End Sub

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
        temp = a(g): a(g) = a(d): a(d) = temp
        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 Sub

JB
 

Pièces jointes

Dernière édition:
Re : menu déroulante sans doublons

David,
Si tu utilise SommeProd tu dois definir la plage. Tu ne peux pas mettre la ou les colonnes en entier.
On utilise la meme methode qui me parait etre tres performante.

Je retire ce que jai dis on n'utilise pas la meme methode !!
Je suis pas tout a fait convainu par la tienne... Ya un truc a revoir. Je te fais part de mes avancees.

Cdt
 
Dernière édition:
Re : menu déroulante sans doublons

Re;
"David,
Si tu utilise SommeProd tu dois definir la plage. Tu ne peux pas mettre la ou les colonnes en entier.
On utilise la meme methode qui me parait etre tres performante."
Bonjour Nikless,
de quelle plage parles-tu ?
Ma liste est pourtant définie...et cela fonctionne.
Par contre, sur mon PC, c'est lent...
Qu'est-ce que cela donne sur le tien ?
 
Re : menu déroulante sans doublons

Bonsoir David,
Je parlais de la plage "liste" en Col. C
Voici comment je l'ai redéfini (tu remarqueras que c'est nettement plus rapide):
=DECALER(Feuil1!$C$2;;;SOMMEPROD((Feuil1!$C1:$C18<>"")*1))

L'ennui c'est que ça va aussi afficher une valeur "Null" ce qui n'est pas indispensable.
Regarde mon fichier et compare avec ma manière de faire apparaître les valeurs uniques.

Bonne soirée à tous
 
Re : menu déroulante sans doublons

Bonsoir Nikless,
J'ai pris ton fichier et ai recopié ta manière de faire et la mienne afin de comparer la vitesse sur le même fichier.
Je n'ai rien modifié dans la définition de ma liste, excepté le nombre de cellules sélectionnées dans la colonne A (j'ai sélectionné les 200 premières comme tu l'as fait de ton côté afin de comparer sur les mêmes bases).
Pour voir, j'ai ensuite repris ma façon de faire en retouchant la validation des données comme tu me l'avais conseillé.
Rentre des données colonne A et dis-moi si tu remarques à l'œil nu une différence...
De plus, je te fais remarquer que j'économise une colonne puisque je n'ai pas besoin de la colonne "compteur" que tu utilises.
Fais le test de ton côté et dis-moi ce qu'il en est.
Bonne nuit
 

Pièces jointes

Re : menu déroulante sans doublons

Bonjour le fil,
dans ces conditions je reconnais que les 2 methodes sont aussi rapides l'une que l'autre.

Ma methode est peut etre plus gourmande en colonnes et les formules plus longue mais la tienne utilise une fonction matricielle. Le tout est une affaire d'affinite !

Verdict : ex aequo !
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
17
Affichages
413
Réponses
3
Affichages
375
Réponses
2
Affichages
384
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…