Tri formules matricielles vs "Scripting.Dictionary"

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 !

Magic_Doctor

XLDnaute Barbatruc
Supporter XLD
Bonjour,

Je veux trier une liste (par orfre alphabétique et sans doublons). Pour ce faire j'ai, dans un premier temps, utilisé des formules matricielles glanées dans le forum. Ça marche parfaitement.
Je me demandais, découvrant le fameux "Scripting.Dictionary", si c'était possible d'y parvenir par ce biais. Je n'en doute pas et, avant de me lancer dans cette nouvelle aventure passionnante, je me suis plongé dans des aides trouvées sur le Net. Il y en a beaucoup dans toutes les langues. J'ai essentiellement retenu celles d'"Excellabo" et de BOISGONTIER.
Je signale que dans VBA menu "Outils/références" j'ai bien coché "Microsoft Scripting Runtime" (curieux, du reste, que ça ne le soit pas par défaut... Envoyez votre classeur à votre belle-mère, je la vois mal, pour que ça marche, cocher ce truc-là...).
Dans un premier temps je me suis attelé à virer les doublons. L'ordre alphabétique viendra après.
J'ai à peu près compris la "philosophie" du "Scripting.Dictionary", il n'empêche que ce que j'ai tenté de faire pour l'instant échoue lamentablement, comme d'hab...

Ci-joint mes tentatives.

Un grand merci pour me tirer d'affaire.
 

Pièces jointes

Re : Tri formules matricielles vs "Scripting.Dictionary"

Bonjour Magic_Doctor, le forum,

En toute rigueur, si la 1ère liste peut être vide, il faut ajouter un test :

Code:
If dico.Count Then
  .Columns(1).Resize(dico.Count) = Application.Transpose(dico.keys)
  .Columns(2).Resize(dico.Count) = Application.Transpose(dico.items)
  .Sort .Columns(1)
End If
Ce test est inutile si l'on ne teste pas avec c <> "" :

Code:
Sub ListeSansDoublons()
Dim dico As Object, c As Range
Set dico = CreateObject("scripting.dictionary")
For Each c In [BigListe1].Columns(1).Cells
  If Not dico.Exists(c.Value) Then dico(c.Value) = c(1, 2)
Next
With [BigListe2]
  Application.ScreenUpdating = False
  .ClearContents
  .Columns(1).Resize(dico.Count) = Application.Transpose(dico.keys)
  .Columns(2).Resize(dico.Count) = Application.Transpose(dico.items)
  .Sort .Columns(1)
End With
End Sub
En effet il y a toujours au moins une valeur dans dico.

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
Retour