XL 2019 Trier les lignes d'un tableau

  • Initiateur de la discussion Initiateur de la discussion bobafric
  • Date de début Date de début

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 !

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

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.
... encore un petit effort et vous nous expliquez ce que vous attendez par "trier par ordre alphabétique toutes les lignes" car dans votre fichier je ne vois pas de tri alpha.
Quelle(s) règle(s) doit on suivre ?
 
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.
 
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

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
 
- 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

  • Question Question
Microsoft 365 tri dans Excell
Réponses
19
Affichages
528
Réponses
6
Affichages
198
Réponses
3
Affichages
128
Retour