Tri alphabétique avec caractères spéciaux

stefiskool

XLDnaute Nouveau
Bonjour à tous, j'ai besoin d'aide pour un truc apparemment très simple mais pour lequel je ne trouve pas de solution.

J'ai une liste de noms, dont certains commencent par un "-".

Et j'aimerai les trier par ordre alphabétique de la première lettre du nom, sans tenir compte des caractères spéciaux.

Dans le petit fichier que je vous met en exemple, on voit bien que ce "-" n'est pas gênant s'il n'y a pas d'espace entre celui-ci et la première lettre.

Par contre, en cas d'espace entre les 2, alors ce nom se met automatiquement en premier, et je n'arrive pas à contourner celà.

La contrainte est évidemment que je ne veux pas changer la syntaxe des noms, sinon je n'aurai pas ce problème et je n'aurai pas besoin de vous.

Merci beaucoup pour votre aide!!!
 

Pièces jointes

  • tri.xlsx
    8.9 KB · Affichages: 50
  • tri.xlsx
    8.9 KB · Affichages: 48

stefiskool

XLDnaute Nouveau
Re : Tri alphabétique avec caractères spéciaux

Merci, en fait dans mon fichier, il n'y a qu'une seule colonne 'noms', la colonne noms triés que j'ai mis c'était pour montrer le résultat.

Par contre ta proposition peut fonctionner si je crée une autre colonne avec ta formule, et que je fais un tri personnalisé avec celle-ci comme critère, au besoin je la masque si je ne la veut pas.

Je garde ça sous le coude, en attendant de voir si d'autres réponses, merci pour ton aide ;)
 

CISCO

XLDnaute Barbatruc
Re : Tri alphabétique avec caractères spéciaux

Bonjour à tous

Une possibilité en pièce jointe, avec une formule matricielle en colonne E à valider par Ctrl+maj tempo+entrer.

@ plus

P.S : Bonjour aux amis de Bretagne...
 

Pièces jointes

  • tri.xlsx
    9.2 KB · Affichages: 41
  • tri.xlsx
    9.2 KB · Affichages: 28
Dernière édition:

stefiskool

XLDnaute Nouveau
Re : Tri alphabétique avec caractères spéciaux

Bonjour à tous

Une possibilité en pièce jointe, avec une formule matricielle en colonne E à valider par Ctrl+maj tempo+entrer.

@ plus

P.S : Bonjour aux amis de Bretagne...

je n'arrive pas à le faire fonctionner, le "- certam -" reste en haut de liste, de plus la formule implique je j'ai 3 colonnes avec les mêmes infos, moi idéalement je n'en veux qu'une, si impossible, 2 max avec une que je masquerai.

Ou alors j'ai loupé un truc, dsl
 

CISCO

XLDnaute Barbatruc
Re : Tri alphabétique avec caractères spéciaux

Bonjour

La colonne D donne les noms dans un ordre, la E dans l'autre, mais elle sont indépendantes. Tu peux donc supprimer l'une ou l'autre, et ne garder par exemple que la colonne A et la colonne E. Ce sont presque les mêmes formules dans la colonne D et la colonne E. Dans un cas, il y a deux <, dans l'autre deux >.

Pour ce qui est du - certam -, dans ton exemple, il est aussi en haut, ce que donne la colonne E. Que veux tu à la place ?

@ plus

P.S : Petit rappel "Formules à valider avec Ctrl+maj tempo+entrer".
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Tri alphabétique avec caractères spéciaux

Bonjour à tous,

Une solution de tri par cette macro :

Code:
Sub Trier()
Dim dest As Range, t, a(), i&
Set dest = [C2] 'cellule de destination, à adapter
t = Range("A2", Range("A" & Rows.Count).End(xlUp)(2))
ReDim a(1 To UBound(t), 1 To 1)
For i = 1 To UBound(a)
  a(i, 1) = Trim(Replace(t(i, 1), "-", ""))
Next
Application.ScreenUpdating = False
dest.Resize(Rows.Count - dest.Row + 1).ClearContents 'RAZ
dest.Resize(UBound(t)) = t
dest.EntireColumn.Insert 'insert une colonne
dest(1, 0).Resize(UBound(t)) = a
dest(1, 0).Resize(UBound(t), 2).Sort dest(1, 0), Header:=xlNo 'tri
dest(1, 0).EntireColumn.Delete 'supprime la colonne
End Sub
On peut bien sûr mettre [A2] au lieu de [C2] comme cellule de destination.

Fichier joint.

A+
 

Pièces jointes

  • tri(1).xlsm
    26 KB · Affichages: 34
  • tri(1).xlsm
    26 KB · Affichages: 31

PMO2

XLDnaute Accro
Re : Tri alphabétique avec caractères spéciaux

Bonjour,

Une piste en avec le code suivant à copier dans un module Standard
Code:
Sub aa()
Const MAXI_CHAR As Long = 50
Dim S As Worksheet
Dim R As Range
Dim var
Dim i&
Dim A$
'--- Validité de la sélection ---
If TypeName(Selection) <> "Range" Then Exit Sub
Set R = Selection
If R.Columns.Count > 1 Then Exit Sub
'--- Enlève les tirets (-), uniformise la longueur de   ---
'--- la chaîne (50 caractères) et met l'orignal au bout ---
var = R
For i& = 1 To UBound(var, 1)
  A$ = var(i&, 1)
  A$ = Trim(Replace(A$, "-", ""))
  var(i&, 1) = A$ & Space(MAXI_CHAR - Len(A$)) & var(i&, 1)
Next i&
'--- Inscrit le tableau dans une nouvelle feuille ---
Set S = Sheets.Add
Set R = S.Range("a1:a" & UBound(var, 1) & "")
R = var
'--- Opère le tri ---
With S.Sort
  .SortFields.Clear
  .SortFields.Add Key:=R, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  .SetRange R
  .Header = xlNo
  .MatchCase = False
  .Orientation = xlTopToBottom
  .SortMethod = xlPinYin
  .Apply
End With
'--- Retire les 50 premiers caractères ---
var = R
For i& = 1 To UBound(var, 1)
  var(i&, 1) = Trim(Mid(var(i&, 1), MAXI_CHAR + 1))
Next i&
R = var
End Sub

Sélectionner la plage à trier sur une seule colonne (ici A1:A5)
Lancer la macro "aa".
Le résultat s'affiche dans une nouvelle feuille.
 

Pièces jointes

  • Tri alphabétique avec caractères spéciaux_pmo.xlsm
    17 KB · Affichages: 30

stefiskool

XLDnaute Nouveau
Re : Tri alphabétique avec caractères spéciaux

Bonjour

La colonne D donne les noms dans un ordre, la E dans l'autre, mais elle sont indépendantes. Tu peux donc supprimer l'une ou l'autre, et ne garder par exemple que la colonne A et la colonne E. Ce sont presque les mêmes formules dans la colonne D et la colonne E. Dans un cas, il y a deux <, dans l'autre deux >.

Pour ce qui est du - certam -, dans ton exemple, il est aussi en haut, ce que donne la colonne E. Que veux tu à la place ?

@ plus

P.S : Petit rappel "Formules à valider avec Ctrl+maj tempo+entrer".

ba ce que je veux c'est que le "- certam -" soit classé à la lettre C et pas au début.

Dans le fichier que tu m'a envoyé, dans la colonne E il y a une formule de fou, qui en fait donne le même résultat que si je fait clic droit "trier de A à Z", du coup je ne comprend pas trop.
 

stefiskool

XLDnaute Nouveau
Re : Tri alphabétique avec caractères spéciaux

Bonjour à tous,

Une solution de tri par cette macro :

Code:
Sub Trier()
Dim dest As Range, t, a(), i&
Set dest = [C2] 'cellule de destination, à adapter
t = Range("A2", Range("A" & Rows.Count).End(xlUp)(2))
ReDim a(1 To UBound(t), 1 To 1)
For i = 1 To UBound(a)
  a(i, 1) = Trim(Replace(t(i, 1), "-", ""))
Next
Application.ScreenUpdating = False
dest.Resize(Rows.Count - dest.Row + 1).ClearContents 'RAZ
dest.Resize(UBound(t)) = t
dest.EntireColumn.Insert 'insert une colonne
dest(1, 0).Resize(UBound(t)) = a
dest(1, 0).Resize(UBound(t), 2).Sort dest(1, 0), Header:=xlNo 'tri
dest(1, 0).EntireColumn.Delete 'supprime la colonne
End Sub
On peut bien sûr mettre [A2] au lieu de [C2] comme cellule de destination.

Fichier joint.

A+

Ca fonctionne nickel, il ne me reste plus qu'à adapter mes cellules sources et ma cellule de destination, et le tour est joué.

Je comprend rien au langage des macros du coup, je sais pas vraiment comment tu as fait, mais ça fonctionne parfaitement, merci!!!
 

stefiskool

XLDnaute Nouveau
Re : Tri alphabétique avec caractères spéciaux

Bonjour,

Une piste en avec le code suivant à copier dans un module Standard
Code:
Sub aa()
Const MAXI_CHAR As Long = 50
Dim S As Worksheet
Dim R As Range
Dim var
Dim i&
Dim A$
'--- Validité de la sélection ---
If TypeName(Selection) <> "Range" Then Exit Sub
Set R = Selection
If R.Columns.Count > 1 Then Exit Sub
'--- Enlève les tirets (-), uniformise la longueur de   ---
'--- la chaîne (50 caractères) et met l'orignal au bout ---
var = R
For i& = 1 To UBound(var, 1)
  A$ = var(i&, 1)
  A$ = Trim(Replace(A$, "-", ""))
  var(i&, 1) = A$ & Space(MAXI_CHAR - Len(A$)) & var(i&, 1)
Next i&
'--- Inscrit le tableau dans une nouvelle feuille ---
Set S = Sheets.Add
Set R = S.Range("a1:a" & UBound(var, 1) & "")
R = var
'--- Opère le tri ---
With S.Sort
  .SortFields.Clear
  .SortFields.Add Key:=R, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
  .SetRange R
  .Header = xlNo
  .MatchCase = False
  .Orientation = xlTopToBottom
  .SortMethod = xlPinYin
  .Apply
End With
'--- Retire les 50 premiers caractères ---
var = R
For i& = 1 To UBound(var, 1)
  var(i&, 1) = Trim(Mid(var(i&, 1), MAXI_CHAR + 1))
Next i&
R = var
End Sub

Sélectionner la plage à trier sur une seule colonne (ici A1:A5)
Lancer la macro "aa".
Le résultat s'affiche dans une nouvelle feuille.

Merci beaucoup pour ta proposition, mais celle de job75 me convient parfaitement pour le moment.

Merci à tous pour votre participation et votre aide précieuse.

Je vais appliquer la méthode de job75 sur mon gros fichier dans la journée, et je reviendrai vers vous pour vous dire si tout est ok pour moi.
 

job75

XLDnaute Barbatruc
Re : Tri alphabétique avec caractères spéciaux

Re,

Notez qu'on peut trier de la même manière un tableau de plusieurs colonnes :

Code:
Sub Trier()
Dim ncol%, dest As Range, t, a(), i&
ncol = 3 'nombre de colonnes, à adapter
Set dest = [E1] 'cellule de destination, à adapter
t = [A1].Resize(Range("A" & Rows.Count).End(xlUp).Row, ncol)
ReDim a(1 To UBound(t), 1 To 1)
For i = 2 To UBound(a)
  a(i, 1) = Trim(Replace(t(i, 1), "-", ""))
Next
Application.ScreenUpdating = False
dest.Resize(Rows.Count - dest.Row + 1, ncol).ClearContents 'RAZ
dest.Resize(UBound(t), ncol) = t
dest.EntireColumn.Insert 'insert une colonne
dest(1, 0).Resize(UBound(t)) = a
dest(1, 0).Resize(UBound(t), ncol + 1).Sort dest(1, 0), Header:=xlYes 'tri
dest(1, 0).EntireColumn.Delete 'supprime la colonne
End Sub
Fichier (2).

A+
 

Pièces jointes

  • tri(2).xlsm
    26.3 KB · Affichages: 28

stefiskool

XLDnaute Nouveau
Re : Tri alphabétique avec caractères spéciaux

Re,

Notez qu'on peut trier de la même manière un tableau de plusieurs colonnes :

Code:
Sub Trier()
Dim ncol%, dest As Range, t, a(), i&
ncol = 3 'nombre de colonnes, à adapter
Set dest = [E1] 'cellule de destination, à adapter
t = [A1].Resize(Range("A" & Rows.Count).End(xlUp).Row, ncol)
ReDim a(1 To UBound(t), 1 To 1)
For i = 2 To UBound(a)
  a(i, 1) = Trim(Replace(t(i, 1), "-", ""))
Next
Application.ScreenUpdating = False
dest.Resize(Rows.Count - dest.Row + 1, ncol).ClearContents 'RAZ
dest.Resize(UBound(t), ncol) = t
dest.EntireColumn.Insert 'insert une colonne
dest(1, 0).Resize(UBound(t)) = a
dest(1, 0).Resize(UBound(t), ncol + 1).Sort dest(1, 0), Header:=xlYes 'tri
dest(1, 0).EntireColumn.Delete 'supprime la colonne
End Sub
Fichier (2).

A+

Ta méthode m'intéresse vraiment beaucoup, mais je n'arrive pas à l'adapter à mon fichier, je galère un max dans le langage des macros, je te prépare un petit fichier test pour t'expliquer ce que je recharche...
 

CISCO

XLDnaute Barbatruc
Re : Tri alphabétique avec caractères spéciaux

Bonjour

A lire cela

la colonne noms triés que j'ai mis c'était pour montrer le résultat.
on pourrait croire que c'est que tu veux obtenir... ce qui est en contradiction avec
ba ce que je veux c'est que le "- certam -" soit classé à la lettre C et pas au début.

Tu aurais mieux fait d'écrire
la colonne noms triés que j'ai mis c'était pour montrer le mauvais résultat.
Conclusion : A quoi sert cette colonne "noms triés" dans ton fichier ?

Si je trouve une formule, je la posterai un peu plus tard...

@ plus
 
Dernière édition:

Discussions similaires

Réponses
43
Affichages
2 K
Réponses
8
Affichages
437

Statistiques des forums

Discussions
312 046
Messages
2 084 851
Membres
102 687
dernier inscrit
Biquet78