Fonction de tri d'une variable tableau en VBA

Sparrow

XLDnaute Nouveau
Bonjour,

Je recherche si une fonction de tri est applicable à une variable tableau défini par le mot clé DIM en VBA Excel 2010.

J'ai tenté le code suivant :
Sub SortDemo()
Dim a(10), l(10)
a(1) = "N"
a(2) = "A"
a(3) = "T"
a.Sort
End Sub

A l'exécution, une erreur survient : Erreur de compilation - Qualificateur incorrect.
D'où ma question : existe-t-il une fonction qui permet de trier le tableau a et quelle est sa syntaxe ?

Merci.
 
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Fonction de tri d'une variable tableau en VBA

Synthèse de tris avec Quick-Sort, ArrayList, SortedList (10.000 items).

Les tests ont été effectués avec Excel 2010.
Avec Excel 2003, les temps diminuent mais pas en même proportion:

-0,36 s --> 0,18 s Quick Sort sans doublons (gain de 50%)
-2,50 s --> 2,40 s ArrayList sans doublons (gain de 10%)

Cf PJ

http://boisgontierjacques.free.fr/fichiers/Cellules/TriDivers.xls

JB
 

Pièces jointes

  • TriDivers.zip
    393 KB · Affichages: 61
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Fonction de tri d'une variable tableau en VBA

>Post #7 : Cette solution fonctionne-t-elle aussi avec un tableau à plusieurs dimensions, du type DIM tab (100, 2, 2) ?

Tri tableau 2D avec SortedList

Code:
Sub TriTableau2D2Critères()
 Dim clé() As String, index() As Long
 a = [A2:D7].Value
 Dim b()
 ReDim b(LBound(a) To UBound(a), LBound(a, 2) To UBound(a, 2))
 Set oSortedList = CreateObject("System.Collections.Sortedlist")
 For i = LBound(a) To UBound(a)
   oSortedList.Add a(i, 1) & a(i, 2), i
 Next i
 For lig = LBound(a) To UBound(a)
  For col = LBound(a, 2) To UBound(a, 2)
    b(lig, col) = a(oSortedList.GetByIndex(lig - 1), col)
  Next col
 Next lig
[H2].Resize(UBound(b), UBound(b, 2)).Value2 = b
End Sub

JB
 

Pièces jointes

  • TriTableau2DIndex2CritSortedList.xls
    367 KB · Affichages: 53
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Fonction de tri d'une variable tableau en VBA

Bonsoir,

L'objet SortedList n'est pas présent sur tous les PC (et ne doit pas être présent sur Mac)
Voici un module de classe en PJ qui simule SortedList (Il est 2 fois + rapide : 0,28s pour 10.000 lignes).
En outre, il accepte les doublons. Si on veut supprimer ces derniers, on peut utiliser Dictionary qui est très rapide.

Code:
Sub TriSortedList2Col()
  Set SL = New SListe
  a = Range("A2:B" & [A65000].End(xlUp).Row).Value
  For i = LBound(a) To UBound(a)
    SL.Ajout(a(i, 1)) = a(i, 2)
  Next i
  retour = SL.Tri               ' tri objet SL
  [D2].Resize(SL.Count, 1) = SL.ListeCles
  [E2].Resize(SL.Count, 1) = SL.ListeItems
End Sub

JB
 

Pièces jointes

  • ClasseSortedList.zip
    260.4 KB · Affichages: 79
Dernière édition:

Discussions similaires

Réponses
16
Affichages
562

Statistiques des forums

Discussions
312 496
Messages
2 088 978
Membres
103 996
dernier inscrit
KB4175