XL 2019 VBA Tri personnalisé

CYRIL CAMPAS

XLDnaute Junior
Bonjour la communauté !

j'ai besoin de vos lumières car je ne m'en sors pas.... je vous explique ce que j'aimerai pouvoir faire : j'ai un fichier Excel avec dans la colonne A, une liste de machines par numéro et dans la colonne B les codes clients.

j'aimerai pouvoir trier la colonne A par machine (j'ai crée une macro pour ça et ça fonctionne sans soucis), mais ensuite j'aimerai que par machine, ça me trie les codes clients par ordre croissant, et ça je ne sais pas faire !

Les 2 macros du fichier :

1/ ajouter une ligne (va directement en bas du tableau pour trouver la première ligne vide

2/ trier dans l'ordre (trie la colone A par ordre croissant à partir de la cellule A4)

est-il doc possible d'avoir une macro qui regroupe chaque machine en fusionnant les cellules pour le numéro de machines n'apparaisse qu'une seule fois et qui pour chaque machine me trie la colone B par ordre croissant ?

merci par avance à vous !
 

Pièces jointes

  • Temps PFT tout client test.xlsm
    132.5 KB · Affichages: 4
Solution
Bonjour la communauté !

j'ai besoin de vos lumières car je ne m'en sors pas.... je vous explique ce que j'aimerai pouvoir faire : j'ai un fichier Excel avec dans la colonne A, une liste de machines par numéro et dans la colonne B les codes clients.

j'aimerai pouvoir trier la colonne A par machine (j'ai crée une macro pour ça et ça fonctionne sans soucis), mais ensuite j'aimerai que par machine, ça me trie les codes clients par ordre croissant, et ça je ne sais pas faire !

Les 2 macros du fichier :

1/ ajouter une ligne (va directement en bas du tableau pour trouver la première ligne vide

2/ trier dans l'ordre (trie la colone A par ordre croissant à partir de la cellule A4)

est-il doc possible d'avoir une macro qui regroupe...

TooFatBoy

XLDnaute Barbatruc
Bonjour,

j'aimerai pouvoir trier la colonne A par machine (j'ai crée une macro pour ça et ça fonctionne sans soucis)
Pourquoi créer une macro pour trier un tableau selon une colonne ?
Le tri Excel "manuel" ne convient pas ?

mais ensuite j'aimerai que par machine, ça me trie les codes clients par ordre croissant, et ça je ne sais pas faire !
Normalement il suffit, là aussi, d'utiliser le tri Excel "manuel". 😉
 

chris

XLDnaute Barbatruc
Bonjour
VB:
Sub Trier()

    With ActiveWorkbook.Worksheets("Tableau des temps")
        .Sort.SortFields.Clear
        NBlig = ActiveWorkbook.Worksheets("Tableau des temps").Range("A4").CurrentRegion.Rows.Count
        .Sort.SortFields.Add2 Key:=Range("A4:A" & NBlig), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Sort.SortFields.Add2 Key:=Range("D4:D" & NBlig), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With .Sort
            .SetRange Range("A3").CurrentRegion
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .Apply
        End With
    End With
End Sub

Pas une bonne idée de fusionner : tu auras des difficulutés ensuite pour cxploiter : utilise une MFC pour masquer la répétition

Tu devrais travailler en tableau structuré ce qui simplifierait l'ajout d'une ligne
 

M12

XLDnaute Accro
Bonjour la communauté !

j'ai besoin de vos lumières car je ne m'en sors pas.... je vous explique ce que j'aimerai pouvoir faire : j'ai un fichier Excel avec dans la colonne A, une liste de machines par numéro et dans la colonne B les codes clients.

j'aimerai pouvoir trier la colonne A par machine (j'ai crée une macro pour ça et ça fonctionne sans soucis), mais ensuite j'aimerai que par machine, ça me trie les codes clients par ordre croissant, et ça je ne sais pas faire !

Les 2 macros du fichier :

1/ ajouter une ligne (va directement en bas du tableau pour trouver la première ligne vide

2/ trier dans l'ordre (trie la colone A par ordre croissant à partir de la cellule A4)

est-il doc possible d'avoir une macro qui regroupe chaque machine en fusionnant les cellules pour le numéro de machines n'apparaisse qu'une seule fois et qui pour chaque machine me trie la colone B par ordre croissant ?

merci par avance à vous !
Bonjour,
Regarde si cela convient
 

Pièces jointes

  • Temps PFT tout client test.xlsm
    93.1 KB · Affichages: 6

Laurent78

XLDnaute Occasionnel
Bonjour,

Je pense qu'il y a plein de solutions à ton souci.
Personnellement, je transformerai ton "tableau des temps" en tableau Excel (Onglet "Accueil", "Mettre sous forme de tableau". Dans le fichier que je te joins il y a une macro Trier2, que j'ai juste enregistré par l'enregistreur de macro, en utilisant la fonctionnalité de "tri personnalisé" qui permet d'avoir plusieurs clés de tri. Enfin, pour n'afficher qu'un seul code machine (je n'ai pas fait de fusion contrairement à ta demande), j'ai utilisé une mise en forme conditionnelle sur la colonne "Machines".
Voila, c'est juste une piste parmi d'autres
Bonne journée
Laurent
 

Pièces jointes

  • Temps PFT tout client test.xlsm
    33.1 KB · Affichages: 5

CYRIL CAMPAS

XLDnaute Junior
Bonjour,


Pourquoi créer une macro pour trier un tableau selon une colonne ?
Le tri Excel "manuel" ne convient pas ?


Normalement il suffit, là aussi, d'utiliser le tri Excel "manuel". 😉
parce que les utilisateurs de mon fichier ne sont pas des champions, le but c'est que ça se fasse tout seul car le nombre de datas que je vais y implémenter va etre exponentiel !
 

CYRIL CAMPAS

XLDnaute Junior
Bonjour
VB:
Sub Trier()

    With ActiveWorkbook.Worksheets("Tableau des temps")
        .Sort.SortFields.Clear
        NBlig = ActiveWorkbook.Worksheets("Tableau des temps").Range("A4").CurrentRegion.Rows.Count
        .Sort.SortFields.Add2 Key:=Range("A4:A" & NBlig), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Sort.SortFields.Add2 Key:=Range("D4:D" & NBlig), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With .Sort
            .SetRange Range("A3").CurrentRegion
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .Apply
        End With
    End With
End Sub

Pas une bonne idée de fusionner : tu auras des difficulutés ensuite pour cxploiter : utilise une MFC pour masquer la répétition

Tu devrais travailler en tableau structuré ce qui simplifierait l'ajout d'une ligne
Bonjour ! je viens de tester, la macro plante à partir de NBlig, tu peses que ça peut venir d'ou ?
 

CYRIL CAMPAS

XLDnaute Junior
Bonjour,

Je pense qu'il y a plein de solutions à ton souci.
Personnellement, je transformerai ton "tableau des temps" en tableau Excel (Onglet "Accueil", "Mettre sous forme de tableau". Dans le fichier que je te joins il y a une macro Trier2, que j'ai juste enregistré par l'enregistreur de macro, en utilisant la fonctionnalité de "tri personnalisé" qui permet d'avoir plusieurs clés de tri. Enfin, pour n'afficher qu'un seul code machine (je n'ai pas fait de fusion contrairement à ta demande), j'ai utilisé une mise en forme conditionnelle sur la colonne "Machines".
Voila, c'est juste une piste parmi d'autres
Bonne journée
Laurent
Bonjour Laurent, déjà merci pour les idées, je viens de regarder et ça réponds quasi parfaitement à ma demande, la seule chose c'est qu'en fin de tableau je n'ai plus les menus déroulant, est-ce lié à la macro ?
 

chris

XLDnaute Barbatruc
Bonjour ! je viens de tester, la macro plante à partir de NBlig, tu peses que ça peut venir d'ou ?
Sur ton fichier exemple cela ne plante pas (je ne poste jamais sans tester)

On peut d'ailleurs simplifier cette ligne du fait du With

Tu as peut-être plusieurs classeurs ouverts donc on peut assurer le With à ce classeur
Code:
Sub Trier()

    With ThisWorkbook.Worksheets("Tableau des temps")
        .Sort.SortFields.Clear
        NBlig = .Range("A4").CurrentRegion.Rows.Count
        .Sort.SortFields.Add2 Key:=Range("A4:A" & NBlig), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Sort.SortFields.Add2 Key:=Range("D4:D" & NBlig), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With .Sort
            .SetRange Range("A3").CurrentRegion
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .Apply
        End With
    End With
End Sub
 

Statistiques des forums

Discussions
314 716
Messages
2 112 153
Membres
111 445
dernier inscrit
elmansour81