Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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,

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
 

cp4

XLDnaute Barbatruc
Bonsoir, @vgendron , @eric72 ,

à tester, le code insère 2 colonnes puis les suppriment.
J'ai testé sur la base des valeurs que tu nous as communiqué.

Bonne soirée.

edit: Salut Marcel32, pas rafraichi.
 

Pièces jointes

  • Eric72.xlsm
    21.5 KB · Affichages: 1

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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…