tri multiple dans excel

lololo007

XLDnaute Nouveau
Bonjour
voila j ai un probleme dans excel et je m arrache un peu les cheveux

j ai un fichier ou je voudrais faire un tri multiple sur plusieurs colonnes
trier d abord la colonne B puis la colonne C etc... tout en conservant bien sur les noms en colonne A et les donnees en lignes


exemple
avant

S12 AA AB AD
S4 AB AB AB
S58 AA AC AA
S6 AA AA AB

je voudrais un tri comme ca
S6 AA AA AB
S12 AA AB AD
S58 AA AC AA
S4 AB AB AB


ca semble facile en utilisant le tri personnalise et en faisant differents niveaux : tri A puis tri B puis tri C etc....

mais le probleme c est que j ai 1500 lignes et 203 colonnes a trier
et 15 fichiers a trier

quelqu un connaitrait une solution

merci beaucoup

Loic
 

lololo007

XLDnaute Nouveau
Re : tri multiple dans excel

merci pour ta reponse mais je ne savais pas que excel ce limiter a 3 colonnes en tout cas en selectionnant le triage personnalite il permet d ajouter autant de niveau que desire

concernant le etc
comme je l ai ecris j ai 203 colonnes donc je veux trier successivement de la colonne B a la colonne GV et ceux pour 1411 lignes

Merci

Loic
 

JNP

XLDnaute Barbatruc
Re : tri multiple dans excel

Bonjour Lololo007 et Skoobi :),
Non limité à 3 colonnes, j'en déduit que tu est en 2007.
Par contre, je ne connais pas la limite supérieure en 2007...
Pour le faire en automatique, le plus simple est d'enregistrer une macro avec un tri de 3 colonnes par exemple. D'après la structure, tu repereras les critères répétitifs (ColA, ColB, ColC). Il te suffit ensuite de faire une boucle type MyString = MyString & Tri Col(I) où tu fait varier I de la première à ta dernière colonne et d'appliquer MyString à ton tri.
Bon courage :cool:
 

pierrejean

XLDnaute Barbatruc
Re : tri multiple dans excel

bonjour lolo007
Salut skoobi :)
Salut JNP :)

A tester:

Code:
Sub test()
Application.ScreenUpdating = False
x = Cells(1, 256).End(xlToLeft).Column
For n = 1 To Range("A65536").End(xlUp).Row
 For m = 1 To x
    tot = tot & Cells(n, m)
 Next m
 Cells(n, x + 1) = tot
 tot = ""
Next n
Range(Cells(1, 1), Cells(Range("A65536").End(xlUp).Row, x + 1)).Sort Key1:=Cells(1, x + 1), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Columns(x + 1).ClearContents
Application.ScreenUpdating = True
End Sub
 

lololo007

XLDnaute Nouveau
Re : tri multiple dans excel

Merci pierreJean
j ai essayer mais ca ne fonctionne pas

j ai aussi essaye autre chose j ai concatemeriser toutes les caracteres de les colonnes dans une seules cellules a la fin de la lignes et ensuite j ai essaye de faire un tri sur la colonne avec les cellues contenat tous les caracteres
example

S12 AA AB AD AAABAD
S4 AB AB AB ABABAB
S58 AA AC AA AAACAA
S6 AA AA AB AAAAAB

mais le probleme c est que j ai envion 700 caractere a la fin dans la cellule et ca ne tri pas correctement

merci

Loic
 

JNP

XLDnaute Barbatruc
Re : tri multiple dans excel

Bonjour Pierrejean :),
Ça fait plaisir d'être lu, Lololo007...
Enfin, comme proposé dans mon raisonnement, une macro valable uniquement sur 2007 avec 2 fonctions de conversions à copier avec.
Testé sur une zone A1:AS367 et fonctionnant très bien dans cette limite (Plus loin, je ne sais pas, je n'avais pas de fichier à tester...). Si tes colonnes dépassent ZZ, il faudra réadapter les 2 fonctions qui étaient prévues pour 2003.
Code:
Sub Tri()
Dim Largeur As String, Hauteur As Integer, I As Integer
Largeur = InputBox("Indiquer la dernière colonne en lettres (AX par exemple)", _
    "Valeur de la dernière colonne de la zone à trier")
Hauteur = InputBox("Indiquer la dernière ligne en chiffres (1521 par exemple)", _
    "Valeur de la dernière ligne de la zone à trier")
Columns("A:" & Largeur).Select
ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
For I = 1 To ConversionCX(Largeur)
ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range( _
        ConversionXC(I) & "2:" & ConversionXC(I) & Hauteur), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
Next I
With ActiveWorkbook.ActiveSheet.Sort
    .SetRange Range("A1:" & Largeur & Hauteur)
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
End Sub
Function ConversionXC(X)
' Conversion colonnes Excel de chiffres en lettres
    If X < 27 Then
        ConversionXC = Chr$(X + 64)
    Else
        ConversionXC = Chr$(X \ 26 + 64) & Chr$(X Mod 26 + 64)
    End If
End Function
Function ConversionCX(C)
' Conversion colonnes Excel de lettres en chiffres
    If Len(C) = 1 Then
        ConversionCX = Asc(C) - 64
    Else
        ConversionCX = (Asc(Left(C, 1)) - 64) * 26 + Asc(Right(C, 1)) - 64
    End If
End Function
A te lire :cool:
 

pierrejean

XLDnaute Barbatruc
Re : tri multiple dans excel

Re

lololo007

la macro proposée fait exactement ce que tu as decrit a savoir
concatener chaque ligne dans la colonne suivant la derniere colonne
puis tri sur cette colonne
Qauand tu dis que ça ne trie pas correctement qu'est-ce que cela veut dire ??
peux tu nous poster quelques lignes avec explications STP

Sauf bien entendu si la solution de JNP te donne satisfaction (je ne peux la tester car je suis sous Office 2000)
 

kiki29

XLDnaute Barbatruc
Re : tri multiple dans excel

Jour Bon, à l'adresse de JNP pour info
Les limites : A à FXSHRXW | 1 à 2147483647
Code:
Function Lettre2NumCol(ByVal Chaine As String) As Long 
Dim i As Long, ValeurCh As Long, v As Long 
Const ChaineAlpha As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
    For i = 1 To Len(Chaine) 
        ValeurCh = InStr(1, ChaineAlpha, Mid(UCase(Chaine), i, 1)) 
        v = v * 26 + ValeurCh 
    Next 
    Lettre2NumCol = v 
End Function 
   
Function NumCol2Lettre(ByVal NumCol As Long) As String 
Dim i As Long, x As Long, s As String 
    For i = 6 To 0 Step -1 
        x = (26 ^ (i + 1) - 1) / 25 - 1 
        If NumCol > x Then 
            s = s & Chr(((NumCol - x - 1) \ 26 ^ i) Mod 26 + 65) 
        End If 
    Next i 
    NumCol2Lettre = s 
End Function
 

lololo007

XLDnaute Nouveau
Re : tri multiple dans excel

Merci beaucoup
c est bon j ai resolu mon probleme
en faite lorsque je disais que ca ne trier pas bien c est presque j ai fait un essait et deux lignes qui devaient theoriquement se suivre ne se suivaient pas

mais en regardant plus en detail les lignes de caracteres j ai vu qu un petit malin qui a eu acces a mon fichier a rajouter ou echanger des caracteres en reprenant une de mes sauvegardes ca a bien fonctionnee

merci beaucoup pour votre aide

Loic
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG