Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Filtrer ligne a partir du 2éme caractère

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jim9595

XLDnaute Nouveau
Bonjour,

J'ai un ficher excel avec plus de 70 000 lignes contenant du texte et des virgule, qui sont sur la colonne A.
Je voudrais classer mes lignes par ordre alphabétique en prenant en compte seulement le deuxième caractère.
J'ai essayer de faire => convertir => délimité par des ",' => puis trier => le problème est que cela va étaler la ligne sur plusieurs colonne.
Il faut que les lignes tiennes que sur la colonne A.
Il s'agit d'un fichier .CSV => mais le forum n'autorise pas cette extension (comment faire ?)
le trie dois commencer a partir de la ligne A2 pour au total 70 000 lignes.

EXEMPLE de lignes :


,,,Am7,2017149054,,False,False,False,True
,,A,Y,2032753427,,False,False,False,True
,,Yh,Ahmed,1757903046,,False,False,False,True
,,Atlas,Lion,561526980,,False,False,False,True
,,,Ali,1185671459,,False,False,False,True
,,,Amine,1995858381,,False,False,False,True
,ahmedbinks,,MamsðŸ,1691950597,,False,False,False,True
,Attarinno,,Attinno,1193673349,,False,False,False,True
,OldLaady,Mu,A,1674270663,,False,False,False,True
,,,Ab,1949747894,,False,False,False,True
,,SCHMITT,Alexandre,1574317942,,False,False,False,True
,,God can,Adex,1596961643,,False,False,False,True
,,,Aghiles,1906753778,,False,False,False,True
merci pour votre aide
 
Bonjour
Ce que je ferais...
1) convertir (séparateur virgule) sur une nouvelle feuille (tu obiens donc effectivement plusieurs colonnes)
2) tri sur la colonne que tu veux (la seconde si j'ai bien compris)
3) tu reconstruis la colonne A en faisant "Join" avec une virgule
4) tu colles le résultat sur ta colonne A
5) tu supprimes la feuille inutile (ou pas..)
 
Je suis pas trés bon sur excel, mais le problème avec convertir (séparateur virgule) , c'est que cela supprime toutes mes virgules et que aprés avoir trier les lignes, les virgules ne doivent pas être supprimer des lignes. Il n'y a pas une formule qui permet tout simplement de trier a partir de deuxième caractère d'une ligne?
 
Bonjour,

Collez en B2 vos données (telles que vous nous les avez données )
En A2 la formule à tirer vers le bas:
=STXT(B2;INDEX(TRIER(TROUVE(CAR(SEQUENCE(26;1;65;1));MAJUSCULE(B2)));1);2)
Trier sur la colonne A
La formule extrait les 2 premiers caractères entre A et Z après la,les virgule(s) pour trier sur plus de caractères, remplacer le 2 final par le nombre voulu.

Vous trouverez en feuille PQ la requête power query suivant qui fait à peu près la même chose en allant chercher votre fichier et ne vous laisse qu'une colonne
VB:
let
    Source = Lines.FromBinary(File.Contents(Table.FirstValue(Excel.CurrentWorkbook(){[Name="Dossier"]}[Content]) & "exemple_tableau.csv")),
    #"Converti en table" = Table.FromList(Source, Splitter.SplitByNothing(), {"Lignes"}, null, ExtraValues.Error),
    #"Personnalisée ajoutée" = Table.AddColumn(#"Converti en table", "Trier", each Text.Range([Lignes], Text.PositionOfAny(Text.Lower([Lignes]),{"a".."z"}))),
    #"Lignes triées" = Table.Sort(#"Personnalisée ajoutée",{{"Trier", Order.Ascending}}),
    #"Autres colonnes supprimées" = Table.SelectColumns(#"Lignes triées",{"Lignes"})
in
    #"Autres colonnes supprimées"
 

Pièces jointes

Vous parlez de trier sur le 2ème caractère, n'est ce pas sur les textes situés entre la 1ère et la 2ème virgule ?
En l'absence de réponse voyez les fichiers zippés joints et cette macro :
VB:
Sub Trier_CSV()
Dim fichier$, x%, texte$, s, a(), b(), n&, c(), i&
fichier = ThisWorkbook.Path & "\Fichier CSV.csv"
x = FreeFile
Open fichier For Input As #x 'ouverture en lecture séquentielle
While Not EOF(x)
    Line Input #x, texte
    s = Split(texte & ",", ",") 'au moins 1 virgule
    ReDim Preserve a(n): a(n) = s(1)
    ReDim Preserve b(n): b(n) = texte
    n = n + 1
Wend
Close #x
'---transposition---
ReDim c(1 To n, 1 To 2)
For i = 0 To n - 1
    c(i + 1, 1) = b(i)
    c(i + 1, 2) = a(i)
Next i
'---restitution---
Application.ScreenUpdating = False
With [A1]
    .Resize(n, 2) = c
    .Resize(n, 2).Sort .Cells(1, 2), xlAscending, Header:=xlNo 'tri
    .Cells(1, 2).Resize(n).ClearContents 'efface la colonne auxiliaire B
    .Offset(n).Resize(Rows.Count - n - .Row + 1).ClearContents 'RAZ en dessous
End With
End Sub
Les 2 fichiers doivent être placés dans le même dossier.

Pour tester j'ai copié le tableau du fichier CSV sur 70 000 lignes.

La macro s'exécute chez moi en 0,6 seconde.

A+
 

Pièces jointes

Bonjour,

Collez en B2 vos données (telles que vous nous les avez données )
En A2 la formule à tirer vers le bas:

=STXT(B2;INDEX(TRIER(TROUVE(CAR(SEQUENCE(26;1;65;1));MAJUSCULE(B2)));1);2)
Salut @Hasco ,
Intéressant , dommage que cette formule soit réservée à Office365 ou excel 2021 ... 😢

Sinon, ta formule PowerQuery ne semble pas faire le tri demandé ...🤔

Résultat du tri ( en manuel ou via la macro de @job75 )
Résultat de la requête PQ
 
Dernière édition:
Je voudrais classer mes lignes par ordre alphabétique en prenant en compte seulement le deuxième caractère.
On parle bien du deuxième champ délimité par les virgules ? ( et pas le 2ème caractère )
le trie dois commencer a partir de la ligne A2 pour au total 70 000 lignes.
On ignore vraiment la ligne 1 du fichier Csv ?
 
Dernière édition:
Bonjour,

Moi, ce que je ferais...
1) ajout d'une colonne contenant le texte, moins le premier caractère, de la colonne initiale à trier
2) tri sur cette colonne ajoutée.
 
Bonjour le fil,
On parle bien du deuxième champ délimité par les virgules ? ( et pas le 2ème caractère )
C'est la question que j'ai posée hier au post #9.
On ignore vraiment la ligne 1 du fichier Csv ?
Oui s'il y a une ligne de titres il ne faut pas la trier, voyez le nouveau fichier CSV et cette nouvelle macro :
VB:
Sub Trier_CSV()
Dim fichier$, x%, titres$, texte$, s, a(), b(), n&, c(), i&
fichier = ThisWorkbook.Path & "\Fichier CSV.csv"
x = FreeFile
Open fichier For Input As #x 'ouverture en lecture séquentielle
Line Input #x, titres '1ère ligne avec titres
While Not EOF(x)
    Line Input #x, texte
    s = Split(texte & ",", ",") 'au moins 1 virgule
    ReDim Preserve a(n): a(n) = s(1)
    ReDim Preserve b(n): b(n) = texte
    n = n + 1
Wend
Close #x
'---transposition---
ReDim c(1 To n, 1 To 2)
For i = 0 To n - 1
    c(i + 1, 1) = b(i)
    c(i + 1, 2) = a(i)
Next i
'---restitution---
Application.ScreenUpdating = False
With [A2]
    .Cells(0) = titres
    .Resize(n, 2) = c
    .Resize(n, 2).Sort .Cells(1, 2), xlAscending, Header:=xlNo 'tri
    .Cells(1, 2).Resize(n).ClearContents 'efface la colonne auxiliaire B
    .Offset(n).Resize(Rows.Count - n - .Row + 1).ClearContents 'RAZ en dessous
End With
End Sub
A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…