Effectuer un tri en ligne et sur plusieurs lignes en même temps

C

chris1

Guest
Bonsoir
On me pose une question à laquelle je ne sais répondre ou très mal.

Comment effectuer un tri en ligne (donc pas de transposition).
Par exemple, dans la 1ere ligne soit la plage A1:F1 vous avez
3 12 6 4 8 10

puis dans la 2eme ligne la plage A2:F2
20 3 9 17 1 4
etc. sur 4000 lignes

Comment faire pour trier toutes ces lignes en même temps pour obtenir
dans la 1ere ligne
3 4 6 8 10 12

et puis dans la seconde
1 3 4 9 17 20
etc. pour les autres lignes.

En espèrant être assez explicite.

Merci
 
C

CBernardT

Guest
Bonsoir Chris1

En supposant que la liste des séries de six nombres est placée dans les colonnes "A" à "F".

Macro qui va passer toutes les séries et les trier dans un ordre croissant de la gauche vers la droite.

Sub TriBase()
Dim i As Integer

For i = 1 To Range("A10000").End(xlUp).Row
Range(Cells(i, 1), Cells(i, 6)).Sort Key1:=Cells(i, 1), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
Next i
End Sub

Cordialement

CBernardT
 
C

chris1

Guest
Bonsoir CBernardT
Tu m'as déjà bien dépatouillé dans le passé.
Je vois que tu es toujours fidèle au poste.
Alors je viens d'essayer la macro mais j'obtiens une fenêtre d'avertissement dans le déboggeur me disant Erreur de compilation - Argument introuvable et il me surligne le mot DataOption1.
Merci
 
C

CBernardT

Guest
Re Chris1

C'est une question de version d'Excel, je transforme pour que cela marche pour Excel 2000.

Sub TriBase()
Dim i As Integer

For i = 1 To Range("A10000").End(xlUp).Row
Range(Cells(i, 1), Cells(i, 6)).Sort Key1:=Cells(i, 1), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight
Next i
End Sub

Cordialement

CBernardT
 
C

chris1

Guest
Re CBernardT

I M P E C C A B L E comme dirait Pascal.

Encore merci pour ton intervention, ta rapidité et tes explications toujours très claires.

Ah si je savais le millième de ce que tu sais, j'en saurai des choses.

Je vais de ce pas dépanner le collègue en te citant ainsi que ce forum qui m'a toujours été d'un grand secours.

Christian
 
C

chris1

Guest
Bonjour
Aujourd'hui je reviens juste pour avoir une petite précision.
Dans l'exemple en cours, je disais qu'il y avait 4000 lignes.
Dans l'exemple que tu me donnes, il y en a 10000. Partant du principe "Qui peut le plus, peut le moins", cela me convient parfaitement
En disant ce qui suit, est ce que j'ai raison.
1 - Si le tableau en question était figé à 4000 lignes, je pourrais remplacer ("A10000") par ("A4000") mais en l'occurence rien n'est sûr donc il vaut mieux avoir une marge de manoeuvre afin de ne pas être obligé de modifier la macro lors de chaque changement.
2 - Que ce soit 4000, 10000 ou 65000, le temps de traitement est identique.
3 - Lorsque la boucle /For i = 1 To Range("A10000").End(xlUp).Row/ arrive à la ligne 4001, la macro s'arrête de chercher puisque la ligne 4001 est vide.
C'est bien ça ? je ne dis pas de bétises.
Encore merci pour tout.
 
C

CBernardT

Guest
Bonjour Chris1

Le code :

Range("A10000").End(xlUp).Row

renvoie le numéro de ligne de la dernière cellule non vide de la colonne "A".

Effectivement, pour aller chercher la plus ou moins 4000ième ligne, j'ai adopté ce système qui est très pratique. Pourquoi 10000, pour une certaine marge, tout simplement. Les puristes prennent toujours la dernière ligne de la feuille, la 65536ième.

Si le tableau était figé à 4000 lignes , le code peut aussi être figé :

For i = 1 To 4000

Cordialement

CBernardT
 

Discussions similaires

Réponses
7
Affichages
265
Réponses
3
Affichages
714
Réponses
4
Affichages
360

Statistiques des forums

Discussions
314 203
Messages
2 107 177
Membres
109 766
dernier inscrit
pleutre