Trier des colonnes en fonction de chiffre

Bonjour à tous !

J'ai tenté de mettre un titre explicite, je m'en excuse et si vous avez des propositions je suis preneur.

Bref,

Voici mon problème (vous aurez besoin de télécharger le petit fichier que j'ai créé pour l'occasion) :

Le tableau qui se présente sous vos yeux, est un tableau parmis d'autres --> c'est à dire qu'avec le code que j'ai, je peux très bien créer des tableaux de 5x5 ou 8x9 ou 10x50 etc...

Je cherche à trier M1, M2, M3...Mn, dans l'ordre decroissant vis-à-vis de la ligne 8 (qui peux elle aussi varier, mais j'adapterai de toute façon) avec les valeurs contenu - par exemple pour M1 - dans B5:B9. C'est donc bien toute la colonne (par exemple : B2:B7 ou encore C2:C7) que je veux trier par ordre décroissant.

Après plusieurs recherches, rien abouti réellement à ce que je veux et je tombe sur pas mal de codes bateaux.

J'aimerai savoir si quelqu'un pouvait m'aiguiller sur un bout de code, ou un code qui servirai à faire ce que je souhaite.

En vous remerciant d'avance pour l'aide que vous m'apporterez,

Jule04

EDIT : J'ai édité le fichier, pour être plus clair.

19tri-colonne.xlsx (9.10 Ko)

Bonsoir,

une solution via une macro

Sub test()
    With ActiveSheet
        dl = .Cells(Rows.Count, 2).End(xlUp).Row 'dernière ligne du tableau
        dc = .Cells(dl, Columns.Count).End(xlToLeft).Column ' dernière colonne du tableau
'tri
        .Sort.SortFields.Clear 
        .Sort.SortFields.Add Key:=.Range(.Cells(dl, 2), .Cells(dl, dc)), _
                             SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .Sort.SetRange .Range(.Cells(2, 2), .Cells(dl, dc))
        .Sort.Header = xlNo
        .Sort.MatchCase = False
        .Sort.Orientation = xlLeftToRight
        .Sort.SortMethod = xlPinYin
        .Sort.Apply
    End With
End Sub

Bonsoir,

Pourriez-vous m'expliquer le principe ici ? Car chez moi ça ne modifie pas les colonnes

Si j'ai bien compris, vous triez tout le tableau ?

Bonsoir,

le principe on lance un tri en colonne sur un tableau dont les dimensions sont déterminées par la dernière valeur en colonne B et la dernière valeur dans la dernière ligne.

pour l'appliquer à ton exemple, il faut supprimer le tableau avec le résultat attendu (j'ai omis de le mentionner)

voir fichier adapté, lancer la macro test par alt-F8

26tri-colonne.xlsm (15.69 Ko)

Ouah ! C'est parfait !

Je te remercie énormément pour ton aide ! Je l'adapte maintenant pour qu'il fasse de meme pour les lignes !

D'ailleurs le ".Sort.Orientation = xlBottomToTop" n'existe pas ?

Est-ce que je devrais modifier la range ou celle-ci fonctionne tout de même ? (J'ai essayé, mais rien a changé, juste une erreur me dit que le .sort.apply est pas bon, donc surement qu'il y a un problème au dessus)

Merci beaucoup,

Jule04

Jule04 a écrit :

Ouah ! C'est parfait !

Je te remercie énormément pour ton aide ! Je l'adapte maintenant pour qu'il fasse de meme pour les lignes !

D'ailleurs le ".Sort.Orientation = xlBottomToTop" n'existe pas ?

Merci beaucoup,

Jule04

.Sort.Orientation=xlsortrows et mettre le order:=xldescending dans la defintion de la clé

J'ai réussi à arranger le code de tel façon à ce qu'il bouge de façon verticale (trier les ligne et non les colonnes comme avant)

Cependant il me tri toujours les cellules du bas, et non celle de ma colonne.

Et d'ailleurs tout ne se suit pas :X (les lignes ne sont pas alignées avec les "x" et Pn correspondant)

Bonsoir,

je ne peux pas t'aider sur base de cette explication.

tu peux essayer l'enregistreur, puis faire le tri que tu souhaites via le menu données,-> tri,

quand tu as le résultat voulu tu arrêtes l'enregistreur

et tu regardes(adaptes éventuellement) le code généré.

tu peux aussi mettre un exemple de ce que tu veux faire si tu ne t'en sors pas.

Re bonsoir,

Je suis un peu limité sur les compétences de Tri d'Excel, et la question "Comment faire pour faire en sorte que ma ligne suive le nombre qui lui est "associé" ?" me tourne un peu dans la tête et me bloque sur pas mal de point.

J'ai regardé votre code et est compris avec MSDN et certains sites, comment cela fonctionnait, d'où mon essai d'adapter le code. Mais il s'avère différent au final mais je n'arrive pas à fixer le problème au bon point. (J'ai tenté 5-6 modifs, sans succès).

Je joint le fichier, pour vous montrer ce que je cherche à faire tout de même. (je vous avoue que votre aide est très précieuse, surtout avec le code "clef en main" qui m'en apprend pas mal)

Cordialement,

Jule04

10tri-colonne.xlsm (16.11 Ko)

re-bonsoir,

fichier adapté pour inclure un tri des colonnes suivis d'un tri des lignes.

14tri-colonne-1.xlsm (16.27 Ko)

Merci beaucoup !

Mon but était de justement séparer ses opérations (excuse moi pour la "non précision" de ce fait)

Ducoup j'ai essayé d'adapter en fesant d'une part ceci (dans une macro) :

Tri des lignes :

 With ActiveSheet
        pl = .Cells(1, 2).End(xlDown).Row ' première ligne du tableau
        dl = .Cells(Rows.Count, 2).End(xlUp).Row 'dernière ligne du tableau
        dc = .Cells(dl, Columns.Count).End(xlToLeft).Column ' dernière colonne du tableau
'tri des colonnes sur ligne dl
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.Range(.Cells(dl, 2), .Cells(dl, dc)), _
                             SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .Sort.SetRange .Range(.Cells(pl, 2), .Cells(dl, dc))
        .Sort.Header = xlNo
        .Sort.MatchCase = False
        .Sort.Orientation = xlLeftToRight
        .Sort.SortMethod = xlPinYin
        .Sort.Apply
    End With

Et de l'autre (tri des lignes):

 With ActiveSheet
        pl = .Cells(1, 2).End(xlDown).Row + 1 ' première ligne du tableau
        dl = .Cells(Rows.Count, 2).End(xlUp).Row - 1 'dernière ligne du tableau
        dc = .Cells(dl, Columns.Count).End(xlToLeft).Column + 1
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.Range(.Cells(pl, dc), .Cells(dl, dc)), _
                             SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .Sort.SetRange .Range(.Cells(pl, 1), .Cells(dl, dc))
        .Sort.Header = xlNo
        .Sort.MatchCase = False
        .Sort.Orientation = xlTopToBottom
        .Sort.SortMethod = xlPinYin
        .Sort.Apply
    End With

Mais cela rend exactement comme mon problème du début (il ne tri pas en ligne). Pourtant, ce sont les même codes que vous

Bonsoir,

bonsoir,

pour le tri des lignes

 With ActiveSheet
        pl = .Cells(1, 2).End(xlDown).Row + 1 ' première ligne du tableau
       dl = .Cells(Rows.Count, 2).End(xlUp).Row  'dernière ligne du tableau
       dc = .Cells(dl, Columns.Count).End(xlToLeft).Column + 1
       dl=dl-1
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.Range(.Cells(pl, dc), .Cells(dl, dc)), _
                             SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        .Sort.SetRange .Range(.Cells(pl, 1), .Cells(dl, dc))
        .Sort.Header = xlNo
        .Sort.MatchCase = False
        .Sort.Orientation = xlTopToBottom
        .Sort.SortMethod = xlPinYin
        .Sort.Apply
    End With

dl étant utilisé dans la formule pour le calcul de dc tu ne peux pas lui soustraire 1 avant ce calcul.

Woh... C'est fou comme une seule petite erreure de calcul fausse tout un code ! C'est dans ces moments que je me sens bête de pas avoir vu ça .

Merci beaucoup, c’est EXACTEMENT ce que je voulais ! Merci beaucoup !!

Rechercher des sujets similaires à "trier colonnes fonction chiffre"