Icône de la ressource

un recueil des méthodes de tri d'un array 2.0

patricktoulon

XLDnaute Barbatruc
patricktoulon a soumis une nouvelle ressource:

un receuil des méthodes de tri d'un array - diverses méthodes de tri d'un array sont presentées ici

Bonjour à tous
je vous présente ici un recueil que quelques méthodes de tri d'un array et vous en fait la démonstration
afin que vous puissiez en comprendre le fonctionnement
et que vous puissiez faire le choix de l'utilisation d'une ou autre méthode selon la quantité d'elements à trier


En savoir plus sur cette ressource...
 

patricktoulon

XLDnaute Barbatruc
Bonjour à tous
j'ai fait une petite mise a jour avec une nouvelle méthode inédite
de Ryuautodidacte qui même mes hybride InsertBubble avec un object collection
y compris changer la vidéo
 

surgeon84fr

XLDnaute Junior
Bonjour et merci pour cet extraordinaire outil qui exploite bien les méthodes ARRAY.
Je suis très loin d'être expert.
J'ai testé dans un de mes fichiers "glossaire et acronymes", plus de 7000 lignes.
Cependant, mon glossaire comprend 2 colonnes (forcément pour la traduction d'un acronyme)

Je ne sais pas du tout adapter les différentes techniques pour que les 2 colonnes soient traitées.

Merci infiniment pour votre aide

Eric
 

patricktoulon

XLDnaute Barbatruc
si tu veux trier ton tableau par la colonne 1 ou 2 tu demande dans les arguments

maintenant si tu veux trier tes deux colonnes séparément il te faudra relancer deux fois l’opération sur chaque colonne
comme il s'agit d'acronyme je pense que la colonne non trier suit le changement d'ordre que celle qui est demandée de trier
situation classique de tri
cela dit 7000 lignes c'est du pipi de chat, le tri excel devrait pouvoir faire ça en deux coups de cuillères a pot
surtout si tu ne fait pas de transfert ou quoi qu'est ce
ça commence a être intéressant de travailler avec mes fonctions a partir de 80 000 lignes et plus
ou en vba sur des variables bien entendu
mais si tu y tiens pour toi se sera le quicksort mais sous cette version ou tu peux choisir la colonne de tri

VB:
Sub testcolonne()   
    Dim a
    a = feuil1.[A1:b7000].Value' veuiller a preciser la feuille !!!!!!!!!
    feuil1.[A1:b7000] = TableOrderByChooseColumn(a, Colonne:=1)  '2 pour la colonne 2'   ' pour ordre croissant plus d'arguments necessaires
   End Sub


Function TableOrderByChooseColumn(a, Optional gauc = -1, Optional droi = -1, Optional sens As Long = 0, Optional Colonne As Long = 1)    ' Quick sort
    'Auteur patricktoulon
    Dim ref, g&, d&, temp1, temp2, C&
    If TypeName(a) = "Range" Then a = a.Value
    droi = IIf(droi = -1, UBound(a), droi): gauc = IIf(gauc = -1, LBound(a), gauc)
    ref = a((gauc + droi) \ 2, Colonne)
    g = gauc: d = droi
    Do
        Select Case sens 'en fonction du sens  de tri choisi
        Case 0
            ' Pour un tri croissant
            Do While a(g, Colonne) < ref: g = g + 1: Loop
            Do While ref < a(d, Colonne): d = d - 1: Loop
        Case 1
            ' Pour un tri décroissant
            Do While a(g, Colonne) > ref: g = g + 1: Loop
            Do While ref > a(d, Colonne): d = d - 1: Loop
        End Select
        If g <= d Then
            'récupération des deux lignes entieres du tableau (a)
            temp1 = Application.Index(a, g, 0): temp2 = Application.Index(a, d, 0)
            'transfert d'une ligne a l'autre vice et versa
            For C = 1 To UBound(temp1): a(g, C) = temp2(C): a(d, C) = temp1(C): Next
            g = g + 1: d = d - 1
        End If
    Loop While g <= d
    If g < droi Then X = TableOrderByChooseColumn(a, g, droi, sens, Colonne)
    If gauc < d Then X = TableOrderByChooseColumn(a, gauc, d, sens, Colonne)
    TableOrderByChooseColumn = a
End Function
Bonne continuation ;)
patrick
 

surgeon84fr

XLDnaute Junior
Bonjour Patrick
Merci pour ton intervention.
Je pensais qu'il serait plus simple d'adapter le code existant.
Donc double merci d'avoir écrit ce code aussi rapidement ;)
J'ai juste modifié :
VB:
Dim Lg%

Sub testcolonne()
    Dim a
Lg = Range("a65536").End(xlUp).Row
    a = Feuil1.Range("a1:b" & Lg).Value ' veuiller a preciser la feuille !!!!!!!!!
    Feuil1.Range("a1:b" & Lg) = TableOrderByChooseColumn(a, Colonne:=1)  '2 pour la colonne 2'   ' pour ordre croissant plus d'arguments necessaires
   End Sub

Cependant, mon fichier tourne en boucle.

Effectivement je souhaite un tri par ordre croissant uniquement qui prenne nécessairement en compte la colonne 2 décrivant l'acronyme.

S'agissant d'acronymes, il y a nécessairement des doublons en colonne 1 mais qui n'ont pas le même sens en colonne 2..

Merci pour ton aide

Eric
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 284
Messages
2 118 014
Membres
113 406
dernier inscrit
NI-ZE