Tri d’un Range sur une colonne en alphanumérique

Bonjour à tous,

Avant tout, je vous souhaite à tous et à toutes une bonne fin d’année 2025 et une excellente nouvelle année 2026.

J’ai besoin de votre aide pour réaliser un tri spécial, disons un tri en alphanumérique.

Les données à trier se trouvent dans les colonnes "A:M" à partir de la ligne 2, donc "A2:M" & dernière ligne.

Le tri doit se faire seulement sur les données qui se trouvent dans la colonne "A".

Afin de réaliser ce tri, je vais décrire en détail le contenu des cellules de la colonne "A" afin que vous puissiez apporter une solution à mon problème, on y vas.

Toutes les cellules de la colonne "A" se composent toutes de la même manière, pour mieux vous expliquer le contenu de ces cellules de la colonne "A", nous allons prendre un exemple et nous allons détailler son contenue, prenons par exemple la cellule (HTY27-001/2025 F) :

HTY27-001/2005 F, on va décomposer le contenu de cette cellule pour récupérer trois informations :

La première information (en couleur verte) concerne les données qui se trouvent avant le tiret (-), ces données nous donne le n° de matricule de l’éleveur, ce matricule peut être entièrement numérique ou alphanumérique, il peut aussi se composer de 3, 4 ou plusieurs caractères, dans notre cas ici présent, il se compose de 5 caractères (HTY27).

La 2e information (en couleur orange) est entièrement numérique, elle se compose de trois chiffres, elle représente le n° de bague de l’oiseau, les chiffres qui composent ce numéro se présentent ainsi : 001, 002, 003, 004, …., 010, 011 …. 100, 101, jusqu’à 999, dans notre cas ici présent, le n° de bague est : (001).

La 3e information (en couleur Bleue) représente l’année de naissance de l’oiseau, elle se trouve toujours après le slash et elle est toujours en 4 chiffres, dans notre cas ici présent, l’année de naissance est : (2025).

Ce que je souhaite faire, c’est trier l’ensemble des mes données qui se trouvent en colonnes "A2:M" & dernière ligne, sur les cellules de la colonne "A", en faisant le tri la 1ere fois sur le n° de Matricule c-à-d les données qui se trouvent avant le slash (HTY27), ensuite trier les données sur le n° de bague c-à-d les données qui se trouvent entre le tiret et le slash = (001) et enfin sur l’année en 4 chiffres, c-à-d les données qui se trouvent entre le slash et le caractère vide = (2025).

Libre à vous de mettre en application la méthode que vous souhaitez pour résoudre le problème, toutefois, j’ai réfléchit à la manière qu’on pourrait utiliser sans pour autant être capable de l’écrire avec du code vba, à savoir, qu’on pourrait éventuellement insérer une colonne supplémentaire côté gauche, ce qui nous permet de placer toutes les informations de nos cellules et les placer dans cette colonne fictive pour y faire le tri, lorsque le tri est fait, on pourrait supprimer cette colonne fictive.

Vu la quantité des lignes de mon projet, je me permets de vous demander une solution avec UBound et en vba (SVP), ainsi l’exécution sera plus rapide et je prendrais le même code pour l’utiliser sur d’autres feuilles qui ont besoin du même tri, merci de votre compréhension.

Je reste à votre disposition pour d’autres informations si besoins.

Merci d’avance de vos contributions.

9tri.xlsm (23.04 Ko)

Hello,

je n'ai certainement pas compris parce qu'un tri tout a fait banal en cliquant qqpart dans la colonne A suffit, non ?

2025 12 31 12 27 37

edit : à moins que le F et M soit gênant ?

la partie avant le "-" peut contenir jusqu'à 10 charactères

Sub Trier()
     With Sheets("parents").Range("A1").CurrentRegion.Resize(, 14)
          With .Columns(14)                  'colonne auxiliaire
               'insérer une formule qui met autant d'éspace que nécessaire pour avoir 10 charactères avant le "-" et le reste du contenu de lacellule
               .FormulaR1C1 = "=LEFT(LEFT(RC[-13],SEARCH(""-"",RC[-13])-1)&REPT("" "",10),10)&MID(RC[-13],SEARCH(""-"",RC[-13]),99)"
               .Cells(1).Value = "Aux"
          End With
          .Sort .Cells(1, 14), xlAscending, Header:=xlYes     'trier la plage avec la 14ième colonne
     End With
End Sub

Bonjour Nain porte koi,

Merci pour votre retour.

le tri que je demande n'est justement pas un tri banal puisque il doit tenir compte des trois critères que j’ai mentionnée dans ma demande, à savoir, qu'il doit se faire sur le matricule, ensuite sur le n° de bagues et enfin sur l’année.

Vous pouvez remarquer que les cellules ne sont pas triées sur l’année puisque les années sont mélangées, lorsque le tri est bien fait, on doit trouver toutes les années 2024 les unes en dessous des autres, de même pour les années 2025, dans votre illustration les années sont mélangées.

Je vais faire un le tri manuellement (ça vas demander un peu de temps) et je vais joindre le fichier avec le résultat souhaité.

PS : Ce tri ne doit même pas tenir en compte des lettres F et M à la fin de chaque cellule.

A vous lire.

Bien à vous.

Bonjour,

Il n'y a pas de différence avec le tri sur la première colonne.

7tri-ek.xlsm (40.87 Ko)

@Harzer, je ne suis pas d'accord avec ce que vous dites car l'ordre que vous avez demandé est bien respecté

1 - matricule

2 - numéro de bague

et enfin

3 - année

Il est donc normal que les années ne soient pas "unes en dessous des autres" car c'est le 3ème critère

Si vous voulez les années en ordre effectivement le tri est différent car il faut partir de l'année comme étant l'ordre n° 1 et non pas le 3ème

Bonjour Nain porte koi,

Merci pour votre retour.

Vous avez entièrement raison, je viens de me rendre compte de ma grosse erreur.

Je m’excuse auprès de tout le monde, le tri doit se faire sur l’année suivi du n° de bague et enfin le n° de Matricule.

Je n’ai toujours pas finit de faire le tri manuellement, je vais toujours continuer en espérant pouvoir le publier rapidement.

Désolé encore.

Salutations.

Il suffit de modifier l'ordre du tri dans mon tableau

Sub TrierLeTableau()

    With ActiveWorkbook.Worksheets("Parents")
         With .ListObjects("t_Matricules")
              .Sort.SortFields.Clear
              .Sort.SortFields.Add2 Key:=Range("t_Matricules[Année]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
              .Sort.SortFields.Add2 Key:=Range("t_Matricules[Entre tiret et slash]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
              .Sort.SortFields.Add2 Key:=Range("t_Matricules[Avant tiret]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
         End With
         With .ListObjects("t_Matricules").Sort
              .Header = xlYes
              .MatchCase = False
              .Orientation = xlTopToBottom
              .SortMethod = xlPinYin
              .Apply
        End With
     End With

End Sub

re,

avec ce nouveau tri :

 Sub Trier()
     With Sheets("parents").Range("A1").CurrentRegion.Resize(, 14)
          With .Columns(14)                  'colonne auxiliaire
               'insérer une formule qui met autant d'éspace que nécessaire pour avoir 10 charactères avant le "-" et le reste du contenu de lacellule
               .FormulaR1C1 = "=MID(RC[-13],SEARCH(""/"",RC[-13])+1,4)& MID(RC[-13],SEARCH(""-"",RC[-13]),5) & LEFT(RC[-13],SEARCH(""-"",RC[-13])-1)"
               .Cells(1).Value = "Aux"
          End With
          .Sort .Cells(1, 14), xlAscending, Header:=xlYes     'trier la plage avec la 14ième colonne
     End With
End Sub
5tri-5.xlsm (35.00 Ko)

Bonjour Nain porte koi, BsAlv et Eric Kergresse

Merci pour vos codes respectifs.

J’ai enfin fini de faire le tri manuellement, ça a demandé du temps pour le faire, merci de corriger vos codes respectifs pour aboutir au bon résultat final.

Sauf erreur de ma part, vous trouverez le résultat final dans le fichier joint.

Je m’adresse maintenant à Eric Kergresse, merci pour votre code, pour le moment, il ne donne pas le même résultat sur mon fichier joint.

De plus, vous avez utilisé un tableau "t_Matricules", suite à cela, il me serait très difficile de mettre en application votre code sur un projet similaire qui demande le même tri.

Un autre inconvénient, vous avez ajouté d’autres colonnes de "N" à "S", or dans mon projet j’ai déjà utilisé ces colonnes avec des données que je m’en sert pour d’autres besoins.

Pouvez-vous (SVP) utiliser les données des colonnes "A2:M" & dernière ligne, sans ajouter des colonnes supplémentaires.

Salutations à tous.

@Harzer,

Je ne vois pas où est l'erreur même en rendant les colonnes numériques en alpha.

Laissez tomber ma solution, c'était juste pour vérifier. Vous auriez néanmoins intérêt à utiliser un tableau structuré.

Sub Trier()
     With Sheets("parents")
          Set c = .Range("A1:M" & .Range("A" & Rows.Count).End(xlUp).Row)     'votre plage
          .Range("A1").EntireColumn.Insert   'insérer une colonne à gauche
          c.Columns(1).Offset(, -1).FormulaR1C1 = "=MID(RC[1],SEARCH(""/"",RC[1])+1,4)& MID(RC[1],SEARCH(""-"",RC[1]),5) & LEFT(RC[1],SEARCH(""-"",RC[1])-1)"     'ajouter une formule dans la nouvelle colonne
          With c.Offset(, -1).Resize(, c.Columns.Count + 1)     'trier avec cette nouvelle colonne
               .Sort .Cells(1, 1), xlAscending, Header:=xlYes
               .Cells(1).EntireColumn.Delete     'supprimer la nouvelle colonne
          End With
     End With
End Sub

sans ajouter des colonnes = ajouter une colonne à gauche + la supprimer après exécution de la macro ....

Et je ne vois pas un fichier en PJ.

Bonjour BsAlv et Eric Kergresse

Merci pour vos retours.

Je m’adresse à Eric Kergresse en le remerciant pour le bon travail fourni.

Je vais réfléchir à votre proposition pour utiliser un tableau structuré.

Vous savez, comme je ne suis pas un expert en vba et Excel, quand j’ai quelque chose qui fonctionne, je me contente de ça, j’ai toujours peur en voulant perfectionner mon projet, me retrouver avec quelque chose qui ne fonctionne plus.

Merci encore.

Je m’adresse actuellement à BsAlv, le code proposé fonctionne parfaitement.

Je me permets de te demander une petite mise à jour, à savoir :

Insérer une colonne vide à la première position, en colonne "A", y insérer les formules que tu as mis en colonne "N" et puis faire le tri.

Lorsque le tri est fait, supprimer cette colonne "A" avec ses formules.

J’espère que cela ne te demande pas trop de travail.

Merci d’avance.

Bonjour BsAlv,

Vous avez lu dans mes pensées. Je viens de vous demander une mise à jour et lorsque j’ai envoyé ma demande, je me rendre compte que vous avez envoyé la réponse à ma question avant de recevoir ma demande, c’est ce qu’on appelle de la "transmission de pensée"

Il est vrai que j’ai oublié de joindre le fichier, ce n’est pas grave en soi puisque le résultat donné par ton code correspond à ce que je souhaite avoir.

Merci encore et bonne année 2026, joie, bonheur et santé à tous.

Rechercher des sujets similaires à "tri range colonne alphanumerique"