Tri personnalisé

Bonjour,

Je souhaite pouvoir faire un tri personnalisé dans une sélection toujours 6 colonnes de largeur, mais qui change de position, d'abords par la colonne 6 puis la 1 puis la 2.

Avec la fenêtre de tri personnalisé ça fonctionne, mais je dois bien pouvoir l'automatiser.

Merci pour vos réponses.

Bonjour,A tester

sans fichier, ce n'est pas facile

Amicalement

Pierrot

tri colonne
17tri-col-poirs.xlsm (15.40 Ko)

Voici le fichier avec plus de précision sur ma recherche.

Merci

17tri-col-poirs.xlsm (16.96 Ko)

Voilà, mon ami

une seule macro pour les trois

un double-clic sur la 1ère cellule du groupe déclenche la macro

amicalement

Pierrot

bonjour

salut Pierre

autre suggestion, sans VBA, avec un TCD

(ne pas activer la macro)

Bonjour, JMD

j'utilise rarement des TCD

amitiés

bonne journée

Pierrot

Bonjour,

Une proposition à étudier.

Cdlt.

15tri-col-poirs.xlsm (29.82 Ko)
Option Explicit

Private Sub cmdSortTable_Click()
Dim Table As ListObject
    Application.ScreenUpdating = False
    If ActiveCell.ListObject Is Nothing Then Exit Sub
    Set Table = ActiveCell.ListObject
    With Table
        .Sort.SortFields.Add .ListColumns(6).DataBodyRange, xlSortOnValues, xlAscending
        .Sort.SortFields.Add .ListColumns(1).DataBodyRange, xlSortOnValues, xlAscending
        .Sort.SortFields.Add .ListColumns(2).DataBodyRange, xlSortOnValues, xlAscending
        .Sort.Apply
        .Sort.SortFields.Clear
    End With
    Set Table = Nothing
End Sub

Bonjour,

Merci pour vos réponses, je vais essayer avec tout ça.

Bonne journée

Bonjour,

Il y a des choses très intéressante dans vos réponse, mais pour ce classeur ce n'est pas ce que je recherche,

je l'ai modifié pour être le plus clair possible pour une macro qui fonctionne.

Merci messieurs

12tri-poirs.xlsm (19.87 Ko)

Bonjour,

Une nouvelle proposition, toujours avec les données mises sous forme de tableau.

Cdlt.

21tri-poirs.xlsm (22.42 Ko)
Option Explicit
Option Private Module

Public Sub Sort_Table()
    If MsgBox("Trier ?", vbYesNo, "Confirmer") = vbYes Then
        With ActiveSheet.ListObjects(1)
            .Sort.SortFields.Add .ListColumns(6).DataBodyRange, xlSortOnValues, xlAscending
            .Sort.SortFields.Add .ListColumns(1).DataBodyRange, xlSortOnValues, xlAscending
            .Sort.SortFields.Add .ListColumns(2).DataBodyRange, xlSortOnValues, xlAscending
            .Sort.Apply
            .Sort.SortFields.Clear
        End With
        MsgBox "Terminé"
    End If
End Sub

Arg, j'ai un bug.

Cdlt

14tri-poirs.xlsm (21.19 Ko)

Re,

Ma proposition fonctionnera avec des données mises sous forme de tableau.

Cdlt.

Bonjour et merci Jean-Eric, ça fonctionne.

Est'il possible de faire ce tri mais sans être obligé de mettre en tableau ?

juste sélectionner la plage de la bonne largeur et trier automatiquement

Cdlt

Bonjour,

Une nouvelle proposition à étudier (et mesurer ses limites!).

Cdlt.

10tri-poirs.xlsm (23.48 Ko)
Option Explicit

Public Sub Sort_Data()
Dim rng As Range
    If MsgBox("Trier ?", vbYesNo, "Confirmer") = vbYes Then
        Set rng = ActiveCell.CurrentRegion
        With rng
            .Sort key1:=.Cells(1, 6), order1:=xlAscending, Header:=xlNo
            .Sort key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlNo
            .Sort key1:=.Cells(1, 2), order1:=xlAscending, Header:=xlNo
        End With
        MsgBox "Terminé"
    End If
End Sub

Re

Il tri chaque colonnes indépendamment, du coup au final le tri n'est fait que sur la colonne 2 sans prendre en compte les autres.

Cdlt

12tri-poirs.xlsm (17.66 Ko)

Re,

Je verrai cela plus tard car je dois m'absenter.

Je n'utilise plus le tri sur des plages depuis un certain temps (Excel 2003 ?).

Cela va m'obliger à me repencher sur le sujet.

Cdlt.

Bonjour,

A tester.

Cdlt.

13tri-poirs.xlsm (24.46 Ko)
Public Sub Sort_Data()
Dim rng As Range
Dim rw As Long
    If MsgBox("Trier ?", vbYesNo, "Confirmer") = vbYes Then
        If ActiveCell.CurrentRegion.Count = 1 Then Exit Sub
        Set rng = ActiveCell.CurrentRegion
        rw = rng.Cells(1).Row
        rng.Sort key1:=rng.Cells(rw, 6), order1:=xlAscending, _
                 key2:=rng.Cells(rw, 1), order2:=xlAscending, _
                 key3:=rng.Cells(rw, 2), order3:=xlAscending, _
                 Header:=xlNo
        MsgBox "Terminé"
    End If
    Set rng = Nothing
End Sub
Rechercher des sujets similaires à "tri personnalise"