Microsoft 365 Trier de A à Z

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 !

Gourbi1986

XLDnaute Nouveau
Bonjour à tous,

J'ai un souci, dans le fichier que j'ai joint je n'arrive pas à conserver l'ordre de mes données dans la colonne, quand j'utilise la fonction trier de A à Z.
Pourriez-vous m'aider svp ?

Merci pour votre soutien.
 

Pièces jointes

Bonjour,
Remplace les "." par des ","

Bonjour M12,

Merci pour cette astuce mais j'y ai déjà pensé...
J'ai des sous numéros qui peuvent dépasser la dizaine donc ça va poser problème (décimale après la virgule), et aussi j'ai plusieurs sous niveaux par exemple 8.3/8.4/8.4.1/8.4.2 et si je mets des virgules ça ne prends pas en compte les autres niveaux.

donc impasse pour le moment.
 
Bonjour @ tous,
c'est normal ce que fait Excel quand tu fais un tri de A à Z, car pour Excel un texte est toujours plus grand que n'importe quel nombre.
Une âme charitable va surement passer par là pour te faire un code VBA pour tromper Excel.

Cordialement
 
Bonjour à tous,

Voir le fichier joint.
Une méthode "tout Excel" y est proposée.

Bonjour @mapomme,

Merci pour cette solution, elle est pas mal mais elle me crée deux autres colonnes, ce qui me gène car mon tableau initial contient déjà pas mal de colonnes, y'aurait-il une autre solution qui me permettrait d'avoir juste une colonne en conservant la forme des données ?

Merci pour votre soutien.
 
Bonsoir Gourbi1986, M12, R@chid, mapomme,

Voyez le fichier .xlsm joint et cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Calculate()
Dim T As Range, ordre%
Set T = ListObjects(1).DataBodyRange 'tableau structuré
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
On Error Resume Next 'si aucune SpecialCell
ordre = IIf(T(1) < T(T.Rows.Count, 1), xlAscending, xlDescending)
With Workbooks.Add.Sheets(1) 'nouveau document
    .[A:A].NumberFormat = "@" 'format Texte
    .[A1].Resize(T.Rows.Count) = T.Value
    .[A:A].TextToColumns .[B1], xlDelimited, Other:=True, OtherChar:="." 'commande Convertir
    .UsedRange.SpecialCells(xlCellTypeBlanks) = 0 'pour que le classement soit correct
    .UsedRange.Sort .[B1], ordre, .[C1], , ordre, .[D1], ordre, Header:=xlNo 'tri sur 3 colonnes
    T.Columns(1).NumberFormat = "@" 'format Texte
    T = .[A1].Resize(T.Rows.Count).Value 'restitution
    T.Columns(1).NumberFormat = "General" 'format Standard
    .Parent.Close False 'ferme le document
End With
Application.EnableEvents = True 'réactive les évènements
Application.ScreenUpdating = True
End Sub
La formule en B1 se recalcule quand on trie le tableau, ce qui lance la macro.

Edit : entré des zéros dans les cellules vides du document auxiliaire.

A+
 

Pièces jointes

Dernière édition:
Bonjour à tous ,
Cela sent les formats hiérarchiques :
A placer dans un module et à tester :
VB:
Option Explicit
Sub test()
    Tri_Hierarchique [Tableau1[Colonne1]]
End Sub
Sub Tri_Hierarchique(TargetCol) ' le nom de la colonne de la table
Dim Tb      As Variant
Dim Tlo     As ListObject   ' Table structurée
Dim Tlc     As ListColumn   ' Colonne de travail
Dim Cell    As Range
Dim Hn      As String       ' Nom du TargetCol
Dim N       As Integer      ' nombre max de points dans la cellule
Dim I       As Integer

Set Tlo = TargetCol.ListObject
    Hn = TargetCol.Cells(0)
    Set Tlc = Tlo.ListColumns.Add(Position:=Tlo.ListColumns(Hn).Index + 1)
    With Tlc
        'On compte le nombre de "."
        .DataBodyRange.NumberFormat = "General"
        .DataBodyRange.Formula = "=LEN([" & Hn & "])-LEN(SUBSTITUTE([" & Hn & "],""."",""""))"
        ' On récupère le nombre max de points
        N = WorksheetFunction.Max(.DataBodyRange)
        ' On fait un "formatage" spécial aux valeurs
        For Each Cell In .DataBodyRange.Cells
            Tb = Split(Cell.Offset(0, -1).Text & String(N - Cell, "."), ".")
            For I = 0 To UBound(Tb): Tb(I) = Right(100000 + Val(Tb(I)), 5): Next
            Cell.Formula = Join(Tb, ".")
        Next
        ' Tri de la colonne
        Tlo.Sort.SortFields.Clear
        Tlo.Sort.SortFields.Add Key:=.Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        Tlo.Sort.Header = xlYes
        Tlo.Sort.Apply
        ' suppression colonne de travail
        .Delete
    End With
End Sub
 
@job75, re-salut, décidément on se croise.
Un petit pb avec ta proposition:
1605634553526.png
 
Re,

Bonjour @mapomme,
Merci pour cette solution, elle est pas mal mais elle me crée deux autres colonnes, ce qui me gène car mon tableau initial contient déjà pas mal de colonnes, y'aurait-il une autre solution qui me permettrait d'avoir juste une colonne en conservant la forme des données ?

Ne vous battez pas! ça m'étonnerait que le tableau structuré soit limité à une seule colonne. Et si il y a plusieurs colonnes, alors le tableau à trier sera sans doute tout le tableau structuré et non pas seulement une seule colonne.
 
Ne vous battez pas! ça m'étonnerait que le tableau structuré soit limité à une seule colonne. Et si il y a plusieurs colonnes, alors le tableau à trier sera sans doute tout le tableau structuré et non pas seulement une seule colonne.
Cela ne pose pas de problème avec ma méthode, voyez ce fichier (2) et la macro adaptée :
VB:
Private Sub Worksheet_Calculate()
Dim T As Range, ordre%, cc%
Set T = ListObjects(1).DataBodyRange 'tableau structuré
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
On Error Resume Next 'si aucune SpecialCell
ordre = IIf(T(1) < T(T.Rows.Count, 1), xlAscending, xlDescending)
cc = T.Columns.Count
With Workbooks.Add.Sheets(1) 'nouveau document
    .[A:A].NumberFormat = "@" 'format Texte
    .[A1].Resize(T.Rows.Count, cc) = T.Value
    .[A:A].TextToColumns .Cells(1, cc + 1), xlDelimited, Other:=True, OtherChar:="." 'commande Convertir
    .UsedRange.Columns(cc + 1).Resize(, .UsedRange.Columns.Count - cc).SpecialCells(xlCellTypeBlanks) = 0 'pour que le classement soit correct
    .UsedRange.Sort .Columns(cc + 1), ordre, .Columns(cc + 2), , ordre, .Columns(cc + 3), ordre, Header:=xlNo 'tri sur 3 colonnes
    T.Columns(1).NumberFormat = "@" 'format Texte
    T = .[A1].Resize(T.Rows.Count, cc).Value 'restitution
    T.Columns(1).NumberFormat = "General" 'format Standard
    .Parent.Close False 'ferme le document
End With
Application.EnableEvents = True 'réactive les évènements
Application.ScreenUpdating = True
End Sub
Le tri du tableau se fait toujours sur la 1ère colonne, il sera inopérant sur les autres colonnes.

A+
 

Pièces jointes

Dernière édition:
Dans ce fichier (3) j'utilise 2 OptionButtons pour lancer le tri :
VB:
Private Sub OptionButton1_Change()
Tri IIf(OptionButton1, xlAscending, xlDescending)
End Sub

Sub Tri(ordre%)
Dim T As Range, cc%
Set T = ListObjects(1).DataBodyRange 'tableau structuré
Application.ScreenUpdating = False
On Error Resume Next 'si aucune SpecialCell
cc = T.Columns.Count
With Workbooks.Add.Sheets(1) 'nouveau document
    .[A:A].NumberFormat = "@" 'format Texte
    .[A1].Resize(T.Rows.Count, cc) = T.Value
    .[A:A].TextToColumns .Cells(1, cc + 1), xlDelimited, Other:=True, OtherChar:="." 'commande Convertir
    .UsedRange.Columns(cc + 1).Resize(, .UsedRang.Columns.Count - cc).SpecialCells(xlCellTypeBlanks) = 0 'pour que le classement soit correct
    .UsedRange.Sort .Columns(cc + 1), ordre, .Columns(cc + 2), , ordre, .Columns(cc + 3), ordre, Header:=xlNo 'tri sur 3 colonnes
    T.Columns(1).NumberFormat = "@" 'format Texte
    T = .[A1].Resize(T.Rows.Count, cc).Value 'restitution
    T.Columns(1).NumberFormat = "General" 'format Standard
    .Parent.Close False 'ferme le document
End With
Application.ScreenUpdating = True
End Sub
 

Pièces jointes

Dernière édition:
- 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

Réponses
6
Affichages
185
Réponses
7
Affichages
312
Réponses
3
Affichages
249
Réponses
8
Affichages
487
  • Question Question
Microsoft 365 Erreur de formule ?
Réponses
14
Affichages
477
Retour