Trier cellule avec texte et nombre [Fermé]

Messages postés
2
Date d'inscription
jeudi 16 février 2012
Statut
Membre
Dernière intervention
16 février 2012
- - Dernière réponse : lermite222
Messages postés
8713
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
- 17 févr. 2012 à 11:49
Bonjour,

je cherche a faire le tri croissant d'une plage de données qui est composée de cellules toute construite de cette façon : "YA ###" .
N° abri
YA 1
YA 100
YA 101
YA 102
YA 103
YA 11
YA 12
YA 13
YA 14
YA 15
YA 16
YA 17
YA 18
YA 2
YA 20
YA 200


j'ai essayé par format de cellule personnalisé : "YA" ### mais il continue à trier de A-Z et non pas un tri croissant par le nombre.

Merci d'avance !

Afficher la suite 

9 réponses

Meilleure réponse
1
Merci
Bonjour,

Ton tri est-il fait ponctuellement ?

Si oui, en imaginant que ta colonne "n° Abri" soit la colonne A, tu peux ajouter dans une colonne voisine la formule : =SUBSTITUE(A1;"YA ";;1)

Tu copies vers le bas la formule puis tu appliques un tri sur cette dernière colonne.

(cette colonne peut être supprimé après tri)

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 59150 internautes nous ont dit merci ce mois-ci

michel_m
Messages postés
15906
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
24 août 2019
2781 -
Bonjour,

Bien vu, mais il faudrait que l'on ait toujours 3 caractères au nombre, par ex 011, sinon "108" est inférieur à 11
il faut alors transformer la colonne de tri en format nombre
=CNUM(SUBSTITUE(A1;"YA";;1))
donc ton idée modifiée me semble être la bonne
de mémoire, n'y a t il pas une limite au nombre de ligne à trier ?
lermite222
Messages postés
8713
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
977 -
Bonjour Michel,
D'après ce que je constate le YA n'est pas dans la cellule mais dans la mise en forme, donc il n'y a que des nombres à trier.
A+
michel_m
Messages postés
15906
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
24 août 2019
2781 -
bonjour,
Oui , mais skipass a dit "j'ai essayé par format de cellule personnalisé : "YA" ###", ce que j'ai interprété comme" j'arrivais pas à trier donc j'ai essayé etc?."
ce qui m'a amené à présenter la macro à partir d'une cellule "YA ###"

mais en fait, ça marche sans macro si en format personnalisé on opte pour "YA "000 et non "YA "###
ça semble d'ailleurs la solution si skipass travaille avec un format personnalisé
lermite222
Messages postés
8713
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
977 -
Et bien oui, mais le tri se fait comme il le dis..
1
10
101
105
110
2
21
200
VOIR
Le code que j'ai mis fonctionne bien.
J'y ai copier tes Transpose :-)
0
Merci
Salut, elle est dans quoi ta liste ?
Messages postés
8713
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
977
0
Merci
Bonjour,
Avec le format "YA" ###
Ca fonctionne impec.
A+
Messages postés
2
Date d'inscription
jeudi 16 février 2012
Statut
Membre
Dernière intervention
16 février 2012
0
Merci
Liste sur excel 2007. J'ai re-essayé encore suite à ton post lermite222 mais ca ne trie pas sur le nombre croissant :

concrètement excel trie :
YA 1
YA 100
...
YA 2
YA 20
YA 200

ce ne convient pas !

merci pour voter aide !
Messages postés
8713
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
977
0
Merci
Oui, Mais ça c'est inévitable et inhérent au logiciel. (malheureux mais c'est comme ça)
Même sans format tu va avoir le même résultat.
Seule façon de faire, formater la colonne en texte et mettre des YA 001, YA 002, YA 010, YA 100 etc.
A+
Messages postés
12247
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
19 juillet 2019
2130
0
Merci
Bonjour,

Essayez comme ceci :
1- saisir des chiffres, de 1 à 500,
2- sélectionner les cellules / Format de cellule / choisir "texte"
3- OK
4- sélectionner les cellules / Format de cellule / choisir "personnalisé" et saisir : "YA" ###
5- OK
6- Triez...

Un classeur exemple
Messages postés
15906
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
24 août 2019
2781
0
Merci
Bonjour

par VBA: résultat du tri effectué sur une autre colonne "pour voir l'essai du code") A ADAPTER A LA STRUCTURE DU CLASSEUR

http://cjoint.com/?3BqqbQ2ZCLn

Option Base 1  

Sub trier_par_nombre()  
Dim T_in, T_sep, separ  
Dim Fin As Integer
  
Fin = Range("A1").End(xlDown).Row  
T_in = Application.Transpose(Range("A1:A" & Fin).Value)  
ReDim T_sep(Fin, 2)
  
For cptr = 1 To Fin  
     separ = Split(T_in(cptr))  
     T_sep(cptr, 1) = separ(0)  
     T_sep(cptr, 2) = separ(1)  
Next
  
TriMulti T_sep, 2, LBound(T_sep), UBound(T_sep) 
 
For cptr = 1 To Fin  
     T_in(cptr) = T_sep(cptr, 1) & " " & T_sep(cptr, 2)  
Next
  
Range("C1").Resize(Fin, 1) = Application.Transpose(T_in)  

End Sub 
 

  Sub TriMulti(Tablo, Col As Byte, Min&, Max&)  
  'Auteurs : Ti et Zon  
    Dim I&, J&, K&, M, Chaine 
 
     I = Min  
     J = Max  
     M = Tablo((Min + Max) / 2, Col)
  
     While (I <= J)  
       While (Tablo(I, Col) < M And I < Max)  
         I = I + 1  
       Wend  
       While (M < Tablo(J, Col) And J > Min)  
         J = J - 1  
       Wend

Michel
michel_m
Messages postés
15906
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
24 août 2019
2781 -
fin du code !!!

 If (I <= J) Then 
         For K = LBound(Tablo, 2) To UBound(Tablo, 2) 
           Chaine = Tablo(I, K) 
           Tablo(I, K) = Tablo(J, K) 
           Tablo(J, K) = Chaine 
         Next K 
         I = I + 1 
         J = J - 1 
       End If 
     Wend 
     If (Min < J) Then TriMulti Tablo, Col, Min, J 
     If (I < Max) Then TriMulti Tablo, Col, I, Max 
  End Sub
Messages postés
8713
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
977
0
Merci
Bonjour Michel,
Je suis d'accord avec toi, seul une fonction VBA pourra résoudre sont problème.
A+
Messages postés
8713
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
977
0
Merci
Bonjour tous,
Une tite fonction ?
Sub TriPerso()
Dim TB, T As Boolean, Buff As Double
Dim Fin As Integer
    Fin = Range("A1").End(xlDown).Row
    TB = Application.Transpose(Range("A1:A" & Fin).Value)
    Do
        T = False
        For i = 2 To Fin
         If TB(i) < TB(i - 1) Then
            T = True: Buff = TB(i)
            TB(i) = TB(i - 1): TB(i - 1) = Buff
         End If
        Next i
    Loop Until T = False
    Range("A1").Resize(Fin, 1) = Application.Transpose(TB)
End Sub

A+