[résolu] Problème tri A-Z

klorane

XLDnaute Occasionnel
Bonjour et Joyeux Noel à tous!

Je passe ici car j'ai un soucis en tulisant le tri par filtre A-Z.

J'ai une colonne A avec des références:

F 8000
F 900
MFO 8500
F 7000
...

Sur cette colonne je souhaite faitre un tri (plus petit au plus grand)
je me retrouve avec le classement suivant

F 7000
F 8000
F 900
MFO 8500
...


Alors qur F 900 devrait etre en tete de liste. (Si je dis pas de bétises 900 est bien plus petit que 7000 non?)
Si je supprime les lettres pour tester le classement se fait bien.
J obtiens alors :

900
7000
8000
8500

Y aurait il une solution pour que le tri avec les lettres et numéro se fasse correctement?
Si faut passer par une macro, ça ne me dérange pas. Mais dans ce cas, quel serait cette macro?

Merci

Klorane
 
Dernière édition:

klorane

XLDnaute Occasionnel
Re : Problème tri A-Z

Bonjour Dranreb et merci pour la répoonse.

Me voilà bien, car les références sont des références constructeur imposées et y en à plus de 20000.

Par une macro il n y aurait pas possibilité que le tri se fasse dans le bon ordre? un système pour ruser?

de plus le nombre:
1 ) Les lettres devant le chiffre peut varier de 0 lettres à x lettres (ex: ACVG 850 ou MMKJNNO 7412)
2) Il peut y a voir des lettres après les chiffres (ex : LVGE 1500 A)
3) Le nombre de chiffres composant la référence varie (ex : MPK 8541, HYGFD 75412 V, ....)

Faudrait une macro qui dans la colonne ou il y a les references analyse le nombre de chiffres trouvés au maxi
ex :

A1 : VG 900 MP (3 chiffres)
A2 : MHO 1500 (4 chiffres)
A3 : GVF 94520 M (5 chiffres)
...

maxi trouver dans la colonne A : 5 chiiffres alors rajouté un ou deux 0 devant tout les chiffres de manière a voir la même longueur de chiffres et mettre ça dans la colonne B pour ne pas "casser" les références d'origines.

se qui donnerait à la fin

B1 : VG 00900 MP
B2 : MHO 01500
B3 : GVF 94520 M
...

Si quelqun pouvait m'enlever cette épine du pied ça serait fantastique.

Klorane
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Problème tri A-Z

Avec ce code, ça marche chez moi :
VB:
Sub Macro1()
[B1:B4].FormulaR1C1 = "=SEARCH("" "",RC1)"
[C1:C4].FormulaR1C1 = "=LEFT(RC1,RC2-1)"
[D1:D4].FormulaR1C1 = "=MID(RC1,RC2,10)+0"
[A1:D4].Sort Key1:=[C1], Order1:=xlAscending, Key2:=[D1], Order2:=xlAscending, _
    Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
[B1:D4].ClearContents
End Sub
 

klorane

XLDnaute Occasionnel
Re : Problème tri A-Z

Premiers tests :

Avec la methode de boisgontier ça fonctionne sauf que :
si ma référence n'a pas de valeur derriere les lettres j'ai la ligne : temp = Format(a(0), "000000") qui passe en erreur : execution 5

c'est du au fait que la macro n arrive pas a générer le code sur 5 chiffres : 00001
Faudrait en gros que si pas de chiffre derriere les lettres alors sauter l 'action et passer à la ligne suivante.
Je ne sais pas encore comment elle va réagir lorsque la référence sera sous la forme ex MF 8500 G...mais à mon avis ça va bugger.

Pour la technique de Danreb : je rencontre l'os quand la la référence n'a pas de chiffres

exemple :

A1 :BS 8606
A2 : brother

Brother devrait passer avant BS et là non...

Klorane
 

klorane

XLDnaute Occasionnel
Re : Problème tri A-Z

Pour suivre l'idée de boisgontier, l'idée ne serait pas "déclater" la référence en 3 (dans 3 colonnes) et de la reconstruire dans une 4eme colonne

(voir fichier joint : classeur3)

A1 : V 5000 B1: V C1:05000 D1: E1 : C 05000
A2 : Brother B2: Brother C2: D2: E2 : Brother
A3 : KL 900 G B3: KL C3 : 00900 D3: G E3 : KL 0900 G
A4 : LKJ 15000 LP B4: LKJ C4 : 15000 D4: LP E4 : LKJ 15000 LP

Tout les modèles de références que je rencontre sont dans le fichier excel en colonne A.


et ensuite j'applique le filtre sur la colonne E ou la macro tri la colonne E

Une chose qui serait interessante : En colonne F est rattaché à la référence le nom du produit. Il faudrait que lui aussi se déplace avec le classement de E sinon la référence et le nom du produit ne coincide plus.

Klorane
 

Pièces jointes

  • Classeur3.xlsm
    11.4 KB · Affichages: 51
  • Classeur3.xlsm
    11.4 KB · Affichages: 49
  • Classeur3.xlsm
    11.4 KB · Affichages: 48
Dernière édition:

klorane

XLDnaute Occasionnel
Re : Problème tri A-Z

Merci JB pour ton fichier.

C'est mieux car je n'ai plus l erreur par contre l ordre alpha n'est pas toujours respecté.

Après passage de la macro le resultat est :
(alors que brother devrait etre en tete de liste, V 5000 à la fin)

JK-E 700 N
KL 900 G
HM-L 2500
V 5000
LKJ 15000 LP
Brother
LPMO-THBG
TSXCV PMHT

Peux-tu regarder le fichier excel que je joins et me dire si techniquement il est possible "déclater" par une macro la référence située dans A et de la recomposer dans une colonne E. je n aurai plus qu 'a appliquer un filtre sur E et F. (tout les types de références que je rencontre doivent être dans le fichier excel)

En gros : les lettres situées à gauche dans la colonne B, les chiffres colonne C, les lettre à droite colonne D, et colone E = B+C+D

klorane
 

Pièces jointes

  • Classeur3.xlsm
    11.6 KB · Affichages: 45
  • Classeur3.xlsm
    11.6 KB · Affichages: 48
  • Classeur3.xlsm
    11.6 KB · Affichages: 51
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Problème tri A-Z

J'ai considéré que toutes les parties pouvaient être numériques ou pas.
Remarque: je ne me sers pas des autres colonnes que la A, je classe ce qu'il y a, c'est tout.
 

Pièces jointes

  • TIdxKlorane.xls
    99.5 KB · Affichages: 52

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Problème tri A-Z

Cf la PJ

Code:
Sub TriNumChaine2()
  [B:B].EntireColumn.Insert
  For Each c In Range("A2:A" & [A65000].End(xlUp).Row)
    a = Split(c & " ", " ")
    If Not IsNumeric(a(1)) Then temp = a(0) & " " & a(1) Else temp = a(0)
    If UBound(a) > 0 And IsNumeric(a(1)) Then temp = temp & Format(a(1), "000000")
    If UBound(a) > 1 Then temp = temp & a(2)
    c.Offset(, 1) = temp
  Next
  [A2].CurrentRegion.Sort Key1:=[B2], Order1:=xlAscending, Header:=xlYes
  [B:B].Delete
End Sub

JB
 

Pièces jointes

  • Classeur3 (3).zip
    17.6 KB · Affichages: 36
Dernière édition:

david84

XLDnaute Barbatruc
Re : [ résolu] Problème tri A-Z

Bonsoir,
concernant la question initiale (celle du message #1) :
Code:
Sub TrierNumChaine()
[B:B].EntireColumn.Insert
Set obj = CreateObject("vbscript.regexp")
obj.ignorecase = True
obj.Pattern = "^[a-z]+"
For Each c In Range("A2:A" & [A65000].End(xlUp).Row)
    If obj.test(c) Then c.Offset(, 1) = obj.Replace(c, "") Else c.Offset(, 1) = c
Next c
[A2].CurrentRegion.Sort Key1:=[B2], Order1:=xlAscending, Header:=xlYes
[B:B].Delete
End Sub

Pour celle du message #8 (le fait "d'éclater" la référence) :
Code:
Sub ScinderChaine()
Set obj = CreateObject("vbscript.regexp")
obj.ignorecase = True
obj.Pattern = "^([a-z-]+\s)?([0-9]+)(\s*[a-z]+)?$"
i = 2
For Each c In Range("A2:A" & [A65000].End(xlUp).Row)
    If obj.test(c) Then
        Set a = obj.Execute(c)
        Cells(i, 2) = a.Item(0).submatches(0)
        Cells(i, 3) = a.Item(0).submatches(1)
        Cells(i, 4) = a.Item(0).submatches(2)
        Cells(i, 5) = c.Value
        Cells(i, 6) = "Produit " & i - 1

    Else
        Cells(i, 2) = c.Value
        Cells(i, 5) = c.Value
        Cells(i, 6) = "Produit " & i - 1
    End If
    i = i + 1
Next c
End Sub
Par contre, n'ayant pas compris si tu veux trier ou pas et quel type de tri tu veux obtenir, je n'ai pas trié le tableau obtenu.
A+
 

klorane

XLDnaute Occasionnel
Re : [ résolu] Problème tri A-Z

Merci David d avoir toi aussi pris le temps de travailler sur mon problème.

C'est pourquoi par principe je vais les tester.

Et le fait "d'éclater" les références dans un tableau me servira peut etre un jour.

Encore merci à tous

Klorane
 

Discussions similaires

Statistiques des forums

Discussions
312 194
Messages
2 086 071
Membres
103 110
dernier inscrit
Privé