Excel 2007 tri alpha numérique

jmst1 Messages postés 41 Statut Membre -  
jmst1 Messages postés 41 Statut Membre -

Bonjour, un petit souci avec un tri alpha numérique

F1
F10
F11
F12
F13
F14
F15
F16
F17
F18
F19
F2
F20
F22
F23
F3
F4
F5
F6
F7
F8
F9
T1
T10
T100

Comment trier pour avoir

F1

F2

ect 

F9

F10

F11

avec mes remerciements 

,


Windows / Chrome 132.0.0.0

11 réponses

Résumé de la discussion

Pour trier des codes alphanumériques comme F1, F10, F11, T100, il faut généralement séparer la partie lettre de la partie numérique et les trier sur ces deux critères. Une approche répandue consiste à extraire les lettres dans une colonne et les chiffres dans une autre, puis à trier d'abord sur la colonne lettre puis sur la colonne chiffre, en s’appuyant sur des formules basées sur STXT/TROUVE/SUBSTITUE et CNUM. En cas de données en une seule colonne, une colonne auxiliaire peut combiner une lettre et un nombre formaté, par exemple =GAUCHE(A1;1)&TEXTE(DROITE(A1;NBCAR(A1)-1)*1;"000"), puis trier sur cette clé. Pour les versions anciennes d’Excel, certains remplacent DANSLIGNE par TRANSPOSE et utilisent AGREGAT pour permettre le tri sur plusieurs colonnes.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     

    Bonjour,

    Admis vos données en colonne A .

    Une solution avec une colonne supplémentaire avec en B1 cette formule

    =DROITE(A1;NBCAR(A1)-1)*1

    La tirer vers le bas et ensuite vous réalisez le tri en choisissant cette colonne


    0
  2. PapyLuc51 Messages postés 4567 Date d'inscription   Statut Membre Dernière intervention   1 511
     

    Bonjour,

    Salutations Le Pingou

    Une variante pour éviter la mauvaise place dans le tri de T1, T10 et T100

    en colonne B =GAUCHE(A1;1)&TEXTE(DROITE(A1;NBCAR(A1)-1)*1;"000")

    et faire le tri par rapport à la colonne B après sélection des deux colonnes

    Cordialement

    0
    1. jmst1 Messages postés 41 Statut Membre
       

      Bonjour, PapyLuc51 et Le Pingou

      Super idée super formule, Bravo

      Ne pas oublier de trié avec toute les colonnes 

      Une surprise, dans le tri il y a T128P8

      et il risque dans avoir plusieurs je ne sais pas encore.

      Merci beaucoup en attendant 

      curieux je n'ai pas reçus d'emails pour vos réponses 

      0
  3. danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   286
     

    Bonjour à tous,

    En supposant, pour rire, qu'il y ait plusieurs lettres et non une seule :

    1. en B1, à recopier vers le bas :

    =GAUCHE(A1;AGREGAT(15;6;DANSLIGNE(CHERCHE({1;2;3;4;5;6;7;8;9;0};A1));1)-1)

    2. En C1, à recopier vers le bas :

    =CNUM(STXT(A1;AGREGAT(15;6;DANSLIGNE(CHERCHE({1;2;3;4;5;6;7;8;9;0};A1));1);9^9))

     Tri personnalisé sur la colonne B et la colonne C.

    Daniel


    0
  4. PapyLuc51 Messages postés 4567 Date d'inscription   Statut Membre Dernière intervention   1 511
     

    Bonjour,

    Salutations danielc0 bien vu l'histoire du nombre de lettres à extraire.

    Ça ne fonctionne pas sur mon Excel 2013 (pas de fonction DANSLIGNE()) ; donc à fortiori pas non plus sur le 2007 de jmst1 qui n'a pas non plus la fonction AGREGAT()

    Comme j'ai gardé quelques exemples ; je propose d'extraire d'abord les nombres avec cette formule : en C1 à recopier vers le bas

    =CNUM(STXT(A1;TROUVE("!";SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(A1;1;"!");2;"!");3;"!");4;"!");5;"!");6;"!");7;"!");8;"!");9;"!");0;"!"));99))

    Puis les lettres : en B1 à recopier vers le bas

    =STXT(A1;1;NBCAR(A1)-NBCAR(C1))

    Faire le tri de l'ensemble en fonction des colonnes B & C

    Cordialement

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   286
     

    Bonjour à tous,

    @PapyLuc :

    Quand les données sont sur une seule colonne, comme ici, on peut remplacer DANSLIGNE par TRANSPOSE.

    Daniel


    0
  7. PapyLuc51 Messages postés 4567 Date d'inscription   Statut Membre Dernière intervention   1 511
     

    OK pour moi ça fonctionne avec TRANSPOSE mais pour l'Excel 2007 par quoi remplacer AGREGAT ?

    Cordialement

    0
  8. danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   286
     

    Oups, c'est vrai. Essaie  :

    =GAUCHE(A1;MIN(SI(ESTERR(CHERCHE({1;2;3;4;5;6;7;8;9;0};A1));9^9;CHERCHE({1;2;3;4;5;6;7;8;9;0};A1)))-1)

    Daniel


    0
    1. danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   286
       

      PS. Il est possible qu'il faille valider la formule matriciellement.

      Daniel

      0
  9. PapyLuc51 Messages postés 4567 Date d'inscription   Statut Membre Dernière intervention   1 511
     

    OK ça fonctionne sans valider en matricielle, en tout cas sur mon Excel 2013, à confirmer par jmst1.

    Les formules qu'on a données ne vont plus aller avec la surprise de jmst1 dans cette réponse où l'alpha numérotation peut être du type "T128P8".

    @jmst1 StatutMembre bien vouloir fournir une copie de ton tableau, sans les données confidentielles et en expliquant ce que tu cherches à obtenir avant le tri.

    Cordialement

    0
    1. jmst1 Messages postés 41 Statut Membre
       

      Re-bonjour PapyLuc51,

      Je n'ai pas de tableau actuellement avec cette surprise (sauf un cas:T128P8)

      Mais ce que je sais, si la progression continue, elle sera 

      T128P8, T128P16, T128P24,T128P32 etc. ceci aussi avec F1P8, F1P16, F2P8, F3P8 etc.

      Pour l'instant je n'ai que deux lettres F et T et le max que j'ai c'est T140.

      Donc dans le tri j'ai T126, T127, T128, T129 etc. et le T128P8 n'est pas à la suite de T128, mais après T139-> T128P8.

      Je suppose qu'il vaudras une troisième extraction pour isoler ce P.

      P.S les mails fonctionnent 

      0
  10. danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   286
     

    Bonjour,

    Quelle est ta version d'Excel ?

    Daniel


    0
    1. jmst1 Messages postés 41 Statut Membre
       

      Excel 2007

      0
  11. danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   286
     

    En supposant qu'il y a une seule lettre au début de la chaîne et potentiellement une seule autre lettre dans la chaîne :

    Pour la partie gauche, en ligne 1 à recopier vers le bas  :

    =SIERREUR(GAUCHE(A1;EQUIV(FAUX;STXT(A1;LIGNE(INDIRECT(NBCAR(A1)&":2"));1)<="9";0)+1);GAUCHE(A1;1))

    Pour la partie droite, en ligne 1 à recopier vers le bas :

    =SIERREUR(CNUM(DROITE(A1;NBCAR(SUBSTITUE(A1;GAUCHE(A1;EQUIV(FAUX;STXT(A1;LIGNE(INDIRECT(NBCAR(A1)&":2"));1)<="9";0)+1);""))));CNUM(STXT(A1;2;9^9)))

    Daniel


    0
    1. jmst1 Messages postés 41 Statut Membre
       

      Merci Danielc0

      Je n'ai pas fait l'essai faute de temps(je dois partir) mais apparemment la progression est fausse 

      Le T128P875 doit être après le T127, T128, T128P8, T128P16 etc..  et non pas au milieu du F12 et F13

      0
      1. jmst1 Messages postés 41 Statut Membre > jmst1 Messages postés 41 Statut Membre
         

        J'avait un peu plus de temps.

        La deuxième formule ce casse le nez  avec l'extraction du P8 ou P875

        T128P8   T    #VALEUR!  idem avec 

        T128P875 T   #VALEUR!

        J'ai supposé au deux points avant le 2 mais ce n'est pas ça

        =SIERREUR(CNUM(DROITE(U155;NBCAR(SUBSTITUE(U155;GAUCHE(U155;EQUIV(FAUX;STXT(U155;LIGNE(INDIRECT(NBCAR(U155)&"2"));1<="9";0)+1);""))));CNUM(STXT(U155;2;9^9)))

        ***

        =SIERREUR(CNUM(DROITE(A1;NBCAR(SUBSTITUE(A1;GAUCHE(A1;EQUIV(FAUX;STXT(A1;LIGNE(INDIRECT(NBCAR(A1)&":2"));1)<="9";0)+1);""))));CNUM(STXT(A1;2;9^9)))

        0
      2. danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   286 > jmst1 Messages postés 41 Statut Membre
         

        Pas d'accord :

        Daniel

        0
  12. danielc0 Messages postés 2175 Date d'inscription   Statut Membre Dernière intervention   286
     

    En B1 :

    =GAUCHE(A1;MIN(SI(STXT(A1;LIGNE(INDIRECT(NBCAR(A1)&":1"));1)>"9";LIGNE(INDIRECT("1:"&NBCAR(A1))))))

    en C1 :

    =CNUM(SIERREUR(GAUCHE(SUBSTITUE(A1;B1;"");EQUIV(FAUX;SI(STXT(SUBSTITUE(A1;B1;"");LIGNE(INDIRECT("1:"&NBCAR(SUBSTITUE(A1;B1;""))));1)<="9";LIGNE(INDIRECT("1:"&NBCAR(A1)-NBCAR(B1))));0)-1);SUBSTITUE(A1;B1;"")))

    en D1 :

    =SIERREUR(GAUCHE(SUBSTITUE(A1;B1&C1;"");EQUIV(FAUX;SI(STXT(SUBSTITUE(A1;B1&C1;"");LIGNE(INDIRECT("1:"&NBCAR(SUBSTITUE(A1;B1&C1;""))));1)<="9";LIGNE(INDIRECT("1:"&NBCAR(SUBSTITUE(A1;B1&C1;"")))));0));"")

    En E1 :

    =SIERREUR(CNUM(SUBSTITUE(A1;B1&C1&D1;""));"")

    A recopier vers le bas. Trier sur B, C, D et E

    Daniel


    0
    1. jmst1 Messages postés 41 Statut Membre
       

      Merci Danielc0, PapyLuc51 et Le Pingou

      1) Formules matricielles (le piège)

      2) Accepte 875

      3) Peu importe le Nb de chiffres [T1285P5668]

      4) N'accepte pas plusieurs lettres [TF1285AC1000] (ce qui n'est pas mon cas actuellement)

      5) Ne différencie pas minuscule ou majuscule (un bien ou un mal ?)

      Merci à danielc0

      Bonne journée à vous tous.

      0
      1. jmst1 Messages postés 41 Statut Membre > jmst1 Messages postés 41 Statut Membre
         

        Ne pas oublié, dans le tri, de sélectionner toutes les colonnes en plus de trier sur B, C, D et E

        0