Tri sur les 2 premiers caractères du contenu d'une cellule

Bonjour au Forum !

Une petite question : j'aimerais trier des cellules en ne considérant que les 2 premiers caractères de la cellule, et pas les suivants.

Dans le fichier joint, ça donnerait un tri sur la colonne 2 où seuls les 2 chiffres seraient pris en compte dans le tri.

Y a-t-il un moyen de faire ça en VBA sans avoir à créer une colonne cachée qui isole ces 2 caractères et sur laquelle s'effectuerait le tri ?

Merci !

127exemple.xls (13.50 Ko)

Bonjour

Pourquoi faire? Cela ne change pas le tri, me semble-t-il?

Avec l'enregistreur de macro

Sub Tri()
    Range("B3").Select
    Selection.AutoFilter
    Range("A1:B17").Sort Key1:=Range("B1"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortTextAsNumbers
    Selection.AutoFilter
End Sub

Cordialement

Bonsoir,

Y a-t-il un moyen de faire ça en VBA sans avoir à créer une colonne cachée qui isole ces 2 caractères et sur laquelle s'effectuerait le tri ?

En VBA, il faudra quand même insérer une colonne, isoler les 2 caractères de gauche, trier et supprimer la

colonne insérée.

Prévoir une 2ème clé de tri, car plusieurs fois "00"

Tu peux même enregistrer cette macro

Amicalement

Claude

édit: Salut Amadéus

Bonsoir Claude & Amadeus, et merci pour vos réponses.

Comme je suis une bille en VBA - tout juste bon à bidouiller du code écrit par d'autres - je crois que je vais m'en tenir à une bonne vieille macro en créant une colonne cachée.

Petite précision : trier sur les 2 premiers caractères seuls ne donne pas les mêmes résultats que sur le texte entier, et je le prouve (à l'aide du fichier joint) !

Il s'agit pour moi de trier des tâches (XX-blabla) par interlocuteur (identifié par les 2 chiffres, par exemple : 02-blabla) et par degré d'urgence (notée de 0 = urgent à 9 = pas pressé), qui figure dans la colonne à gauche des tâches.

Si je trie la colonne des tâches sur le contenu intégral des cellules, c'est l'ordre alphabétique du texte qui suit les 2 chiffres qui prime (00-blabla, puis 00-blibli) en ignorant le degré d'urgence, alors que si je trie les tâches uniquement sur les 2 premiers caractères, tout ce qui commence par 00- est trié par ordre d'urgence (si 00-blibli est plus urgent que 00-blabla, il apparait en 1er), puis tout ce qui commence par 01- par ordre d'urgence, etc...

Je sais : ce serait plus simple si mon code à 2 chiffres était dans une colonne et le texte dans une autre, mais pourquoi faire compliqué quand on peut faire encore plus compliqué ?!

78exemple-v2.zip (7.09 Ko)

Bonsoir

alors que si je trie les tâches uniquement sur les 2 premiers caractères, tout ce qui commence par 00- est trié par ordre d'urgence (si 00-blibli est plus urgent que 00-blabla, il apparait en 1er)

C'est un point de vue auquel je ne peux adhérer.

Un tri sur des 0 Nombre ou 00 texte ne fait rien du tout vu que toutes les cellules sont identiques. Alors pour en tirer des priorités ?

Cordialement

Taratata !

Quand je trie ma liste avec pour clés la colonne "objet" et la colonne "priorité", j'obtiens :

3 00-admin

4 00-CDS

5 00-CL SMC

1 00-CRAMIF

2 00-DIUO

0 00-DOE

0 00-GPA

1 00-inaugX

2 00-mém

2 00-RV

1 01-cristallX

0 04-stores

0 07-EA TTL

1 07-écl

2 12-WC R0B

3 13-paillassons

Quand je trie la même liste avec pour clés une colonne contenant seulement les 2 premiers caractères des cellules de la colonne "objet" et la colonne "priorité", 'obtiens :

0 00-DOE

0 00-GPA

1 00-CRAMIF

1 00-inaugX

2 00-DIUO

2 00-mém

2 00-RV

3 00-admin

4 00-CDS

5 00-CL SMC

1 01-cristallX

0 04-stores

0 07-EA TTL

1 07-écl

2 12-WC R0B

3 13-paillassons

On voit que la liste est organisée par n° d'intervenant, et, à l'intérieur de chaque ensemble de lignes correspondant au même intervenant (00-blabla, 00-blibli,...) par ordre de priorité, ce qui n'était pas le cas quand le tri s'effectuait sur la totalité des cellules de la colonne "objet".

CQFD ?

re,

Sub Tri2()
Dim Lg%
    Lg = Range("b65536").End(xlUp).Row
    Application.ScreenUpdating = False
    Application.CutCopyMode = False
    Columns(3).Insert
    Range(Cells(2, 3), Cells(Lg, 3)) = "=MID(RC[-1],1,2)"
    Range(Cells(2, 1), Cells(Lg, 10)).Sort Key1:=Range("c2"), Order1:=xlAscending, Key2:=Range("A2") _
    , Order2:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:= _
    False, Orientation:=xlTopToBottom
    Columns(3).Delete
End Sub

Claude

164gloub-tri.zip (13.00 Ko)

Respect !

(et aussi : merci !)

Re,

Apparemment, j'ai loupé un épisode en chemin, car le sujet de départ ne prenait en compte que cette colonne avec les 2 premiers numéros.

Il est sur qu'avec 2 clées de tri cela ne tiens plus et je suis d'accord avec toi.

Cordialement

Tu as raison? Je me suis relu : j'avions pas tout bien expliqué, désolé.

Rechercher des sujets similaires à "tri premiers caracteres contenu"