Microsoft 365 Tri Nombre avec Tirets en VBA

eric72

XLDnaute Accro
Bonjour,
J'ai un tableau avec des nombres (code article) ex: 2400 puis d'autres avec ex: 2400-1, 2400-3, 2400-18 etc...
J'aimerais faire un tri par macro pour tous les nombres et arriver au résultat suivant:
2400
2400-1
2400-3
2400-18
Malheureusement le résultat n'est pas au rendez-vous, raison pour laquelle je fais appel à votre savoir, vous les chamions pour résoudre ce genre de problèmes.
Merci beaucoup pour votre aide.
Cordialement.
Eric
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Je vous mets le résultat de ce que j'ai trouvé :
2500
2501
2500-1
2500-3
2500-5
2501-4
2502-5
2500-10
2500-14
2500-140
2500-143
2500-145

Le résultat aurait du être :
2500
2500-1
2500-10
2500-14
2500-140
2500-143
2500-145
2500-3
2500-5
2501
2501-4
2502-5
Il me semble pourtant que c'est le résultat que donne le tri d'Excel, simplement en utilisant le tri croissant de la colonne B de ton fichier de #2. Non ? 🤔

En tout cas, c'est ce que semble me donner Excel 2016 sous Windows 10 1902.


[edit]
Après avoir relu la question de #1, c'est visiblement l'inverse que tu voulais dire, et du coup je comprends mieux le problème.

Tu veux en fait un tri un peu particulier qu'il faudrait faire en deux étapes : d'abord un tri sur la partie après le tiret, puis un tri sur la partie avant le tiret.
[/edit]
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
En partant de ton fichier de #2,

de même que tu as créé une colonne "Colonne1" en colonne D avec la formule
Code:
=GAUCHE([@[Code Article]];4)

tu crées une colonne "Colonne2" en colonne E avec la formule
Code:
=SIERREUR(DROITE("000000" & STXT([@[Code Article]];CHERCHE("-";[@[Code Article]])+1;999);6);"")


Tu peux masquer les deux colonnes D et E. ;)


Tu crées un bouton pour lancer le tri, et tu lui associes cette macro :
VB:
Sub TriSpecial()
'
    Application.ScreenUpdating = False

    With ActiveWorkbook.Worksheets("Référencement").ListObjects("TbReferencement").Sort

        .SortFields.Clear
        .SortFields.Add Key:=Range("TbReferencement[[#All],[Colonne2]]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply

        .SortFields.Clear
        .SortFields.Add Key:=Range("TbReferencement[[#All],[Colonne1]]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply

        .SortFields.Clear
    End With

    Application.ScreenUpdating = True

End Sub
 

chris

XLDnaute Barbatruc
Bonjour à tous

Ou
VB:
=GAUCHE([@[Code Article]];CHERCHE("-";[@[Code Article]]))&TEXTE(STXT([@[Code Article]];CHERCHE("-";[@[Code Article]])+1;5);"000")
ou
Code:
=GAUCHE([@[Code Article]];5)&TEXTE(STXT([@[Code Article]];6;5);"000")
 

Discussions similaires

Réponses
13
Affichages
296

Statistiques des forums

Discussions
313 985
Messages
2 104 201
Membres
108 942
dernier inscrit
MicVog