XL 2019 Trier les lignes d'un tableau

bobafric

XLDnaute Occasionnel
Bonjour, comment trier par ordre alphabétique toutes les lignes d'un tableau. Ci-joint un exemple pour essai, mon tableau comporte 500 lignes.
Merci d'avance pour votre aide
 

Pièces jointes

  • tri.xlsx
    9.1 KB · Affichages: 5
Solution
On va finir par converger ... ;)
En PJ un essai avec :
VB:
Sub Trier()
    Dim T, T0, L, C, C2
    T0 = Timer
    T = [A1].CurrentRegion
    For L = 2 To UBound(T, 1)
        For C = 1 To UBound(T, 2)
            For C2 = C To UBound(T, 2)
                If T(L, C) > T(L, C2) Then
                    Buffer = T(L, C): T(L, C) = T(L, C2): T(L, C2) = Buffer
                End If
            Next C2
        Next C
    Next L
    [G1].Resize(UBound(T, 1), UBound(T, 2)) = T
    [M1] = 1000 * (Timer - T0)
End Sub
En M1 il y a le temps d'éxécution pour 500 lignes, sur mon PC ça prends autour de 35ms.

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Bobafric, Djidji,
comment trier par ordre alphabétique toutes les lignes d'un tableau.
Sans plus de précision, faites donc un "Trier" sur votre tableau.
1686129488966.png
 

bobafric

XLDnaute Occasionnel
Salut Djidji, salut Sylvanu je joint le fichier avec le résultat escompté, mais j'ai plus de 500 lignes et la solution de Sylvanu va être trop longue. N'y a t'il pas une solution par macro?
 

Pièces jointes

  • tri.xlsx
    9.4 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Quelle(s) règle(s) doit on suivre ?
Désolé, mais je ne détecte aucun tri alpha.
CBDAE n'est pas le tri alpha de DAECB. ( ce serait ABCDE )
En colonne pareil.
Au mieux que j'ai trouvé c'est par le N° de colonne cela ferait 45123 soit bien CBDAE mais ça ne marche pas pour toutes les lignes.
Alors question simple :
Qu'appelez vous "trier par ordre alphabétique toutes les lignes" ?

Autre point, sauf erreur de ma part vos deux PJ sont identiques.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
On va finir par converger ... ;)
En PJ un essai avec :
VB:
Sub Trier()
    Dim T, T0, L, C, C2
    T0 = Timer
    T = [A1].CurrentRegion
    For L = 2 To UBound(T, 1)
        For C = 1 To UBound(T, 2)
            For C2 = C To UBound(T, 2)
                If T(L, C) > T(L, C2) Then
                    Buffer = T(L, C): T(L, C) = T(L, C2): T(L, C2) = Buffer
                End If
            Next C2
        Next C
    Next L
    [G1].Resize(UBound(T, 1), UBound(T, 2)) = T
    [M1] = 1000 * (Timer - T0)
End Sub
En M1 il y a le temps d'éxécution pour 500 lignes, sur mon PC ça prends autour de 35ms.
 

Pièces jointes

  • tri CORRECTION.xlsm
    42.2 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Anoter cependant ( j'ai oublié de le préciser ) que le code tient compte de la casse. Le tri est dans l'ordre
0-9, A-Z, a-z, donc suppose que tout soit en majuscules ou minuscules.
Si la casse ne doit pas entrer en ligne de compte alors changez la ligne :
VB:
If T(L, C) > T(L, C2) Then
en
If LCase(T(L, C)) > LCase(T(L, C2)) Then
 

Discussions similaires

Statistiques des forums

Discussions
312 210
Messages
2 086 281
Membres
103 170
dernier inscrit
HASSEN@45