Microsoft 365 Tri Nombre avec Tirets en VBA

  • Initiateur de la discussion Initiateur de la discussion eric72
  • 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 !

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
 
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:
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
 
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")
 
- 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
22
Affichages
1 K
Retour