Trier cellule avec texte et nombre

skipass Messages postés 2 Statut Membre -  
lermite222 Messages postés 9042 Statut Contributeur -
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 !

9 réponses

  1. Nanyick
     
    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)
    1
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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 ?
      0
    2. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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+
      0
    3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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é
      0
    4. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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
  2. forgotten
     
    Salut, elle est dans quoi ta liste ?
    0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Avec le format "YA" ###
    Ca fonctionne impec.
    A+
    0
  4. skipass Messages postés 2 Statut Membre
     
    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 !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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+
    0
  7. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    0
  8. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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

    https://www.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
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
      0
  9. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour Michel,
    Je suis d'accord avec toi, seul une fonction VBA pourra résoudre sont problème.
    A+
    0
  10. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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+
    0