XL 2019 trier et classer un tableau Excel

  • Initiateur de la discussion Initiateur de la discussion MOEZ-TUN
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

MOEZ-TUN

XLDnaute Occasionnel
Bonjour
J'ai un tableau Excel avec des données variables , je réussi de faire le tri de ces données , mais je vais classer ces données dans un seul colonnes :


1681896002102.png
 

Pièces jointes

Bonjour,
En redéfinissant le Tableau Structuré, et par le biais de Power Query (en natif dans ta version Excel2019), voici ce qu'on peut obtenir.
Clic droit dans la requête, "Actualiser", pour mettre à jour.
Bonne journée
Edit : Hi, Hasco
Effectivement, plus propre, et en plus, t'as trouvé le code Balise kivabien... 🤪
 

Pièces jointes

Dernière édition:
bonjour,

Par power query également :
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau2"]}[Content],
    #"En Colonne" = List.Transform(Table.ColumnNames(Source), each Table.Column(Source,_)),
    #"Converti en table" = Table.FromList(#"En Colonne", Splitter.SplitByNothing(), {"Order"}, null, ExtraValues.Error),
    #"Order développé" = Table.ExpandListColumn(#"Converti en table", "Order"),
    #"Lignes filtrées" = Table.SelectRows(#"Order développé", each ([Order] <> null and [Order] <> ""))
in
    #"Lignes filtrées"

Je n'ai pas inclus le noms des colonnes car j'ai pensé qu'ils n'étaient là (hors tableau résultat) que pour démonstration, mais ça peut se corriger rapidement.

[oops]Salut cousin 🙂 [/oops]
 

Pièces jointes

bonjour,

Par power query également :
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau2"]}[Content],
    #"En Colonne" = List.Transform(Table.ColumnNames(Source), each Table.Column(Source,_)),
    #"Converti en table" = Table.FromList(#"En Colonne", Splitter.SplitByNothing(), {"Order"}, null, ExtraValues.Error),
    #"Order développé" = Table.ExpandListColumn(#"Converti en table", "Order"),
    #"Lignes filtrées" = Table.SelectRows(#"Order développé", each ([Order] <> null and [Order] <> ""))
in
    #"Lignes filtrées"

Je n'ai pas inclus le noms des colonnes car j'ai pensé qu'ils n'étaient là (hors tableau résultat) que pour démonstration, mais ça peut se corriger rapidement.

[oops]Salut cousin 🙂 [/oops]
merci pour votre support
 
bonjour,

Par power query également :
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau2"]}[Content],
    #"En Colonne" = List.Transform(Table.ColumnNames(Source), each Table.Column(Source,_)),
    #"Converti en table" = Table.FromList(#"En Colonne", Splitter.SplitByNothing(), {"Order"}, null, ExtraValues.Error),
    #"Order développé" = Table.ExpandListColumn(#"Converti en table", "Order"),
    #"Lignes filtrées" = Table.SelectRows(#"Order développé", each ([Order] <> null and [Order] <> ""))
in
    #"Lignes filtrées"

Je n'ai pas inclus le noms des colonnes car j'ai pensé qu'ils n'étaient là (hors tableau résultat) que pour démonstration, mais ça peut se corriger rapidement.

[oops]Salut cousin 🙂 [/oops]
Merci beaucoup
thank you
 
Bonsoir à tous,

Une autre version en VBA.

Comme dans le tableau initial fourni, la colonne "Order" faisait partie du tableau structuré, j'ai laissé cette colonne résultat dans le tableau structuré. Il a donc fallu agrandir le tableau le cas échéant si le nombre d'éléments à classer est supérieur au nombre de lignes du tableau initial.
On classe toutes les colonnes du tableau structuré sauf la dernière qui le classement.

Cliquez sur le bouton Hop!

Le code est dans le module de la feuille Feuil1.
 

Pièces jointes

Bonsoir à tous,

Une autre solution VBA :
VB:
Sub Classer()
Dim c As Range, col As Range, h&
Application.ScreenUpdating = False
With [Tableau2].ListObject
    If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete xlUp
    Set c = .Range(2, 1)
End With
With [Tableau1].ListObject.Range
    .ListObject.Unlist 'tableau non structuré
    For Each col In .Columns
        col.Sort col, xlAscending, Header:=xlYes
        h = Application.CountA(col) - 1
        If h Then
            col.Offset(1).Resize(h).Copy c
            Set c = c.Offset(h)
        End If
    Next
    .Parent.ListObjects.Add(xlSrcRange, .Cells, , xlYes).Name = "Tableau1" 'tableau structuré
End With
End Sub
A+
 

Pièces jointes

Bonsoir @job75,

J'avais pensé à cette solution (convertir en plage) mais je trouvais plus amusant de ne pas toucher au TS.
En fait un TS est vraiment une structure hybride. Difficile en VBA de ne trier qu'une seule colonne d'un TS en laissant les autres inchangées. Mais je cherche... 😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour