Trier une selection sur 3 critères

Bonjour,

Je viens de rejoindre ce groupe et suis impressionné par tous ces échanges et cette maîtrise du sujet...

Voici ma question :

Je voudrais trier chronologiquement des lignes qui ont en colonnes : le jour, le mois et l'année suivies de noms et divers autres choses.

Je n'arrive pas à lui dire de ne trier que les lignes sélectionnées qui peuvent varier de 3 à 15000 toujours en continu et quel que soit la feuille.

Voici mon code issu de l'enregistreur, il ne me convient pas car les lignes sont fixes ainsi que le nom de la feuille.

Merci à vous qui pourrez surement me faire avancer...

Sub Tri_Dates()

'

' Tri_Dates Macro

' Tri la feuile par dates chronologiquement.

'

' Touche de raccourci du clavier: Ctrl+Shift+D

'

Rows("2:15000").Select

ActiveWorkbook.Worksheets("NAISSANCES").Sort.SortFields.Clear

ActiveWorkbook.Worksheets("NAISSANCES").Sort.SortFields.Add Key:=Range( _

"C2:C15000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _

xlSortNormal

ActiveWorkbook.Worksheets("NAISSANCES").Sort.SortFields.Add Key:=Range( _

"B2:B15000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _

xlSortNormal

ActiveWorkbook.Worksheets("NAISSANCES").Sort.SortFields.Add Key:=Range( _

"A2:A15000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _

xlSortNormal

With ActiveWorkbook.Worksheets("NAISSANCES").Sort

.SetRange Range("A1:AF15000")

.Header = xlYes

.MatchCase = False

.Orientation = xlTopToBottom

.SortMethod = xlPinYin

.Apply

End With

End Sub

Bonjour,

Peux-tu nous joindre un petit fichier (anonymisé) que l'on voit la structure de tes données?

Cdlt.

Bonsoir Jean Eric,

Voici mon fichier joint

Je n'ai mis qu'une feuille, en fait il y en a 3 par fichier et j'ai plusieurs fichier de ce type...

Merci

51classeur2.xlsx (14.31 Ko)

Bonjour,

Tu veux simplement trier du plus ancien au plus récent ?

Tes valeurs aberrantes (??? ou vide) ne seront pas prise en compte mais voici un plan de tri qui te permet d'avoir un ordre chronologique.

Tu selectionne tout le tableau tu vas dans l'onglet données => Tri => Trier par ANN (plus petit au plus grand) et en haut a gauche "ajouter un niveau" et tu ajoute les deux autres une pour Mois et une pour Jour.

Dans l'autre sens ça ne marchera pas ça te triera le jour avant de trier le mois avant de trier l'année.

si c'est bien ça que tu voulais faire, c'est que j'ai compris ton soucis

Re,

Je ne suis pas spécialiste de la chose, mais essaie ceci :

Public Sub Tri_Dates()
Dim wb As Workbook
Dim wsData As Worksheet
Dim rngData As Range

    Application.ScreenUpdating = False
    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets("NAISSANCES")
    Set rngData = wsData.Cells(1).CurrentRegion

    rngData.Sort key1:=rngData.Cells(1, 3), order1:=xlAscending, _
                 key2:=rngData.Cells(1, 2), order2:=xlAscending, _
                 key3:=rngData.Cells(1, 1), order3:=xlAscending, _
                 Header:=xlGuess

    Set rngData = Nothing: Set wsData = Nothing: Set wb = Nothing

End Sub

Bonsoir Avie,

C'est bien ce que je fais régulièrement, mais je voudrai faire ce tri par macro et c'est là que ça se complique...

Cordialement

Denis


re bonsoir Eric,

Le tri fonctionne sur toutes les données, hors mon souhait serait de trier juste les lignes sélectionnées.

J'ai un onglet Naissances puis un autre "Mariage" et enfin un troisième "Décès".

J'ai voulu remplacer Naissances par Active Worksheets mais Excel n'a pas aimé.

Bien à toi

Denis

RE,

On va reprendre tranquillement.

J'ai regardé ta procédure pour la feuille nommée. J'ai déclaré la plage dynamiquement. Et j'ai appliqué le tri de ta procédure.

Je ne comprends pas tes propos :

Le tri fonctionne sur toutes les données, hors mon souhait serait de trier juste les lignes sélectionnées.

Essayons de comprendre tes souhaits sur cette feuille avant de parler des autres feuilles.

Si tu pouvais joindre un exemple de résultat de tri, ce serait un plus.

Cdlt.

Jean Eric,

Je vais essayer de m'exprimer mieux.

Voila le tri fonctionne bien. Mon souhait serai de trier uniquement les lignes que j'aurai sélectionné avant de lancer la procédure.

Exemple je sélectionne 10 lignes qui se suivent (de la 5 à la 14 par exemple)

Et lorsque le lance la procédure seules ces lignes la sont triées...

J'espère avoir été clair, désolé...

Merci d'avance

Bonjour,

Un nouvel essai.

Tu sélectionnes les lignes à trier et tu exécutes la procédure (ALT F8).

Cdlt.

80classeur2.xlsm (19.33 Ko)
Public Sub Tri_Dates()

    Application.ScreenUpdating = False
    With Selection
        .Sort key1:=.Cells(1, 3), order1:=xlAscending, _
                     key2:=.Cells(1, 2), order2:=xlAscending, _
                     key3:=.Cells(1, 1), order3:=xlAscending, _
                     Header:=xlNo
    End With

End Sub

Bonjour Jean Eric,

Super, génial

C'est ce que je voulais.

With Sélection = semble tellement évident que je n'y ai jamais pensé. pour le reste j'ai pas tout compris. Notemment pourquoi l'ordre se fait sur 2 cellules...

Encore merci

Bien à toi

Denis :

L'ordre se fais sur 3 cellules c'est juste que Key1 est décalé légèrement de Key2 et Key3.

Bonjour,

Je crains de te pas comprendre tes propos.

Le tri s'effectue selon ce que tu as spécifié.

1 - colonne 3

2 - colonne 2

3 - colonne 1

Cdlt.

Rechercher des sujets similaires à "trier selection criteres"