Tri date décroissant dans ComboBox

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 !

cathodique

XLDnaute Barbatruc
Bonjour,

Je voudrai afficher dans une combobox des dates de la plus récente à la plus ancienne et sans doublons.
Pour les dates sans doublons, c'est fait, j'ai utilisé un dictionnaire.
Mon problème, est comment pourrait-on faire pour afficher les dates triées en décroissant dans la combobox sans effectuer de tri sur la feuille où sont contenues les dates.
Code:
Dim f
Private Sub UserForm_Initialize()
Dim mondico As Object
Dim C As Range
 Set f = Sheets("A")
  Set mondico = CreateObject("Scripting.Dictionary")
For Each C In Range(f.Cells(2, 1), f.Cells(Rows.Count, 1).End(3))
  mondico(C.Value) = C.Value
  Next C
  ComboBox1.List = mondico.items
End Sub

En vous remerciant beaucoup. Bonne journée.

Cordialement,
 

Pièces jointes

Re : Tri date décroissant dans ComboBox

Bonjour Cathodique,

Ton fichier en retour, avec non pas un dictionnaire mais un ArrayList (objet du .net framework v2 ou >) qui permet de trier et inverser les éléments.

A+
 
Dernière modification par un modérateur:
Re : Tri date décroissant dans ComboBox

Bonjour Hasco,

Je te remercie pour ton retour. Hélas, le code plante ""Erreur d'execution: 429 - un composant ActiveX ne peut pas créer d'objet"", c'est le message qui s'affiche; le code s'arrête sur Userform1.Show.

Je t'informe que jai simplifié l'userform qu'à une seule combobox. En fait sur mon fichier, j'effectue des sélections en cascades avec 4 comboboxs, puis en sélectionnant des items dans une listBox des textboxs sont alimentées afin de corriger des données dans une BD.

Merci beaucoup.

Cordialement,
 
Re : Tri date décroissant dans ComboBox

Bonjour cathodique,

Code:
Private Sub UserForm_Initialize()
Dim f As Worksheet, C As Range, mondico As Object, temp
Set f = Sheets("A")
Set mondico = CreateObject("Scripting.Dictionary")
For Each C In f.Range(f.Cells(2, 1), f.Cells(Rows.Count, 1).End(3))
  mondico(C.Value) = ""
Next
temp = mondico.keys
Call tri(temp, LBound(temp), UBound(temp))
ComboBox1.List = temp
End Sub

Sub tri(a, gauc, droi)          ' Quick sort
Dim ref, g, d, temp
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
Fichier joint.

Edit : salut Hasco

A+
 

Pièces jointes

Re : Tri date décroissant dans ComboBox

Re,

Va dans les options de l'éditeur de macro et sur l'onglet 'général', dans le cadre 'récupération des erreurs', coche 'Arrêt dans le module de class'. Relance ton USF, il devrait s'arrêter sur la ligne exacte qui pose problème.

Et redis nous. Eventuellement joins un fichier plus parlant avec plus de précisions.

Ce serait le diable que tu n'aies pas un .net framework avec avec une machine qui fait tourner Excel 2007!

A+

[Edit] Hello Job🙂
 
Re : Tri date décroissant dans ComboBox

Re,

J'ai comparé les 2 solutions proposées.

La méthode ArrayList prend 3 fois plus de temps que la méthode Dictionary + Quick sort.

Edit : c'est même pire que ça.

Sur une liste de 10000 dates croissantes, ArrayList prend 279 secondes, Dictionary 0,15 seconde 😱

A+
 
Dernière édition:
[RESOLU] : Tri date décroissant dans ComboBox

Bonjour Job75,

Content de te "revoir". Je te remercie beaucoup pour ton aide. C'est exactement ce que je voulais obtenir.
(c'est pour éviter le tri, de ma précédente discussion). Ton aide m'a été très précieuse.

1000 Mercis. Très bonne journée.

Cordialement,
 
Re : Tri date décroissant dans ComboBox

Re,

@Job, c'est l'initialisation de l'objet la première fois qui semble lente, mais ensuite, je ne vois pas trop la différence. L'as-tu comparée sur plusieurs appels?

@Cathodique, garde la méthode de Job, je t'aurais donné la même si dès le premier post, j'avais connu toutes les données de ton problème.

A+ à tous
 
Re : Tri date décroissant dans ComboBox

Re Hasco,🙂

Je te remercie beaucoup. J'ai parcouru pas mal de discussions, j'ai donc une idée sur tes compétences.

En effet, Job75 m'avait donné un bon coup de main pour cette discussion:https://www.excel-downloads.com/threads/dictionary-textbox-et-date.213033/

Sur le même fichier, j'ai un autre Userform (à peu près similaire au précédent), j'ai tenté d'adapter le code de Job75 sans y parvenir. J'ai donc décidé de garder mon code (je m'étais inspiré des exemples du site de Boisgontier), je ne maitrise pas encore toutes les ficelles et subtilités du codage. Je suis autodidacte et débutant par deçu le marché. Pour info, ces formulaires me serviront à corriger une base de données.

Merci beaucoup.

Cordialement,
 
Re : Tri date décroissant dans ComboBox

Re,

Sur une liste de 10000 dates croissantes, ArrayList prend 279 secondes, Dictionary 0,15 seconde 😱

Une telle différence m'étonnait aussi j'ai fait le test avec GetTickCount sur 10888 cellules triées A-Z puis triées Z-A par macro après extraction des items uniques et j'obtiens :

ArrayList : 343 Millisecondes
Dictionary: 110 Millisecondes

Dictionary reste 3 fois plus rapide
Je ne sais pas d'où vient une telle différence entre nos résultats respectif!? Machine?

A+
 
Re : Tri date décroissant dans ComboBox

Re,

@Cathodique: arf... tu as de la chance, nous faisons dans le sérieux 😛 il y a quelques temps ton fil aurait pu partir en sucette...( digressions hilarantes s'entend ) mais je crois que ce temps est révolu😎.


A+
 
- 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
3
Affichages
205
Réponses
4
Affichages
239
Réponses
3
Affichages
514
Réponses
12
Affichages
557
Réponses
40
Affichages
3 K
Retour