Trier plusieurs lignes indépendantes les unes des autres

kioups

XLDnaute Occasionnel
Bonjour,

mon problème est tout bête mais je suis bloqué.

J'ai un tableau d'une dizaine de colonnes sur un bon millier de lignes. Chaque cellule contient une lettre.

Je veux simplement trier chaque ligne par ordre alphabétique.

Pour une ligne, pas de soucis. Mais je ne me vois pas répéter l'opération 999 fois...

Je n'arrive pas à trouver le petit truc pour faire ça facilement.

Merci d'avance !

Kioups
 

kioups

XLDnaute Occasionnel
Re : Trier plusieurs lignes indépendantes les unes des autres

Un début de solution...

Utiliser une macro...

Alors, j'ai utilisé le "créateur" de macros.

Ca me donne ça :

Code:
Sub Tri_alpha()
'
' Tri_alpha Macro
'

'
    Range("E1:M1").Select
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("E1:M1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").Sort
        .SetRange Range("E1:M1")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Bon, a priori, beaucoup de choses inutiles là dedans...

Mon souci maintenant, c'est de faire varier le numéro de la ligne de 1 à 6442.

Merci de m'aiguiller ! ;-)
 

kioups

XLDnaute Occasionnel
Re : Trier plusieurs lignes indépendantes les unes des autres

Je progresse :

Code:
Sub Tri_alpha()
'
' Tri_alpha Macro
'

'
    
For i = 1 To 6442
    Range(Cells(i, 5), Cells(i, 13)).Select
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range(Cells(i, 5), Cells(i, 13)), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").Sort
        .SetRange Range(Cells(i, 5), Cells(i, 13))
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
Next i
End Sub

Gros hic, c'est super lent...
En gros, 2 secondes par ligne, ce qui nous fait 12884 secondes soit un peu plus de 3 h...

Alors bon, s'il y avait moyen de faire plus rapide...

Merci !
 

soenda

XLDnaute Accro
Re : Trier plusieurs lignes indépendantes les unes des autres

Bonjour le fil, kioups

Essai le code suivant
Code:
Sub TriEssai()
    Dim fin As Long
 
    Application.ScreenUpdating = False
    fin = [E16370].End(xlUp).Row
 
    [E1:M1].Resize(fin).Copy
    [o1].PasteSpecial , Transpose:=True
 
    For i = 0 To fin
        [o1:o9].Offset(, i).Sort [o1].Offset(, i)
    Next
 
    [o1:o9].Resize(, fin).Copy
    [E1].PasteSpecial , Transpose:=True
 
    [o1:o9].Resize(, fin).ClearContents
End Sub

Rem :
- Ne pas confondre la lettre 'o', avec le chiffre 0
- Les commentaires suivront si ça convient

A plus
 

soenda

XLDnaute Accro
Re : Trier plusieurs lignes indépendantes les unes des autres

Re,

kioups à dit:
J'ai testé, a priori, ça n'a rien modifié du tout...
Le code que je t'ai envoyé trie chaque ligne de la plage E1:M_dernière_ligne (ligne par ligne).
- La dernière ligne doit-être inférieure ou égale à 16370
- le code testé chez moi tourne en 13" pour 1000 lignes soit un peu moins de 2 minutes pour 9000 lignes. (peut mieux faire :D)

Si le code ne fonctionne pas chez toi ... Tu m'en vois désolé.

A plus
 

kioups

XLDnaute Occasionnel
Re : Trier plusieurs lignes indépendantes les unes des autres

Re soenda

Est-ce que le fait que mes lettres sont déterminées par des fonctions (stxt) est gênant ?

Le but en fait, c'est de trier les lettres d'un mot par ordre alphabétique.
Donc j'ai commencé par séparer les lettres (avec stxt), puis j'ai plus qu'à trier et à concaténer.

Ton code, chez moi, tourne 2 secondes... mais ne change rien...

Merci néanmoins pour ce que tu as fait !
 

kioups

XLDnaute Occasionnel
Re : Trier plusieurs lignes indépendantes les unes des autres

Problème résolu !!!

En fait, j'ai gardé exactement ma macro en rajoutant le

Application.ScreenUpdating=false

J'ai lancé ma macro, et je suis allé voir ailleurs...

En moins de 10 minutes (peut-être une, je ne sais pas), c'était fini...
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 989
dernier inscrit
jralonso