Tri particulier sur colonne

Flytox21

XLDnaute Nouveau
Bonjour,
Débutant et autodidacte je suis confronté au problème suivant.
J'ai une colonne dont les cellules comportent le(s) prénom(s) et le nom de famille d'une liste de personnes.
Le premier caractère du(des) prénom(s) est(sont) en majuscule.
Tous les caractères du nom de famille sont en majuscules.
Je désire créer une colonne adjacente à droite triée de A vers Z et ne comportant que les noms de famille.
Il me semble que la solution la plus courte consiste à déterminer par la droite de la cellule l'emplacement du premier caractère asc minuscule (asc 97 à 120) "x".
Puis d'afficher dans la cellule adjacente le texte correspondant aux caractères de droite à partir de la position "x-2".
Une fois la colonne ainsi crée la trier par ascendant.

Exemple du texte d'une cellule: "Jean-Marie DE LARUE".

Dans cet exemple "x=10" (le premier caractère minuscule: "e"), la partie restante à partir de "x-2" c.à.d. "8" caractères à transférer sur la cellule adjacente à droite. Répéter pour chaque cellule de la colonne puis tri ascendant sur les cellules de la colonne ainsi crée.

Je n'arrive pas à solutionner, en particulier, la première partie de ce problème avec des fonctions.
Je crois qu'une macro sera indispensable... mais là je bute.
Toute aide est particulièrement bienvenue, merci
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : Tri particulier sur colonne

Bonjour

Je ne sais pas travailler sur du texte de droite à gauche... et je ne crois pas que cela soit faisable avec des formules...

Ci-joint, tu trouveras une formule faisant ce que tu veux. J'ai supposé que les prénoms étaient, au plus composé de deux prénoms.

A toi de tester.

@ plus
 

Pièces jointes

  • nom.xls
    19.5 KB · Affichages: 72
  • nom.xls
    19.5 KB · Affichages: 77
  • nom.xls
    19.5 KB · Affichages: 77

Flytox21

XLDnaute Nouveau
Re : Tri particulier sur colonne

Bonjour

Je ne sais pas travailler sur du texte de droite à gauche... et je ne crois pas que cela soit faisable avec des formules...

Ci-joint, tu trouveras une formule faisant ce que tu veux. J'ai supposé que les prénoms étaient, au plus composé de deux prénoms.

A toi de tester.

@ plus

A part la fonction DROITE() je ne vois pas.
Merci pour la formule (une belle tartine), super. Cela fonctionne sauf...
petit problème si le nom de famille est du genre D'OULTREMONT.(cas que j'avais omis de citer)
As-tu une solution pour ce cas.. je sais j'abuse.
Encore un grand merci.
 
Dernière édition:

Denis132

XLDnaute Impliqué
Re : Tri particulier sur colonne

Bonjour Flytox21, Cisco,

Peut-être comme ceci:

=SI(ESTERREUR(STXT(STXT(A5;CHERCHE(" ";A5)+1;25);CHERCHE(" ";STXT(A5;CHERCHE(" ";A5)+1;25))+1;25))=FAUX;STXT(STXT(A5;CHERCHE(" ";A5)+1;25);CHERCHE(" ";STXT(A5;CHERCHE(" ";A5)+1;25))+1;25);STXT(A5;CHERCHE(" ";A5)+1;25))

@+

Denis

Salut Tibo
 
Dernière édition:

Tibo

XLDnaute Barbatruc
Re : Tri particulier sur colonne

Bonjour,

Une tentative avec une formule matricielle :

Je pars du principe que les prénoms ont une initiale (ou des) en majuscule et les autres lettres en minuscules. Quant aux noms, toutes les lettres sont en majuscules.

En ce qui concerne l'apostrophe, j'ai supposé qu'il n'y avait pas de prénom avec apostrophe (pas cherché en fait ...)

Avec ceci posé, ton nom en A1

en B1 :

Code:
=SI(ESTNUM(CHERCHE("'";A1));STXT(A1;TROUVE("'";A1)+1;99);STXT(A1;
EQUIV(VRAI;EXACT(MAJUSCULE(STXT(A1;LIGNE(INDIRECT("$1:$50"));3));
STXT(A1;LIGNE(INDIRECT("$1:$50"));3));0)+1;99))

Formule matricielle à valider par CTRL + MAJ + ENTREE

Le principe consiste à détecter l'emplacement dans la chaîne où 2 caractères consécutifs sont en majuscule. Dans la formule, j'ai indiqué 3 pour prendre en compte l'espace.

Je te laisse tester

@+

Edit : Salut Denis :)

@+
 

Flytox21

XLDnaute Nouveau
Re : Tri particulier sur colonne

Bonjour Flytox21, Cisco,

Peut-être comme ceci:

=SI(ESTERREUR(STXT(STXT(A5;CHERCHE(" ";A5)+1;25);CHERCHE(" ";STXT(A5;CHERCHE(" ";A5)+1;25))+1;25))=FAUX;STXT(STXT(A5;CHERCHE(" ";A5)+1;25);CHERCHE(" ";STXT(A5;CHERCHE(" ";A5)+1;25))+1;25);STXT(A5;CHERCHE(" ";A5)+1;25))

@+

Denis

Bonjour Denis, Tibo,

Denis, ok j'ai juste adapté l'emplacement de la première cellule à mon cas.

Tibo, ok sauf pour le nom propre avec apostrophe qui perd le premier caractère majuscule ainsi que l'apostrophe.
Merci à vous deux également je suis maintenant totalement dépanné.

@+ 73's
 

Flytox21

XLDnaute Nouveau
Re : Tri particulier sur colonne

Bonjour Denis, Tibo,

Denis, ok j'ai juste adapté l'emplacement de la première cellule à mon cas.

Tibo, ok sauf pour le nom propre avec apostrophe qui perd le premier caractère majuscule ainsi que l'apostrophe.
Merci à vous deux également je suis maintenant totalement dépanné.

@+ 73's

Re bonjour Denis,

J'ai focalisé sur le nom avec une apostrophe et pas remarqué que les noms de famille composés ont maintenant perdu la première partie.
D'OUTRELEPONT ok
DE LARUE not ok donne LARUE

Chacune des deux formules Denis et Tibo sont top à une exception près.

@+ 73's
 

Denis132

XLDnaute Impliqué
Re : Tri particulier sur colonne

Re,

Je crois que ça va avec une légère modification à la formule de Cisco.

=SI(ESTERREUR(CHERCHE("'";A1))=VRAI;SI(ET(65<=CODE(STXT(A1;CHERCHE(" ";A1)+1;1));CODE(STXT(A1;CHERCHE(" ";A1)+1;1))<=90;65<=CODE(STXT(A1;CHERCHE(" ";A1)+2;1));CODE(STXT(A1;CHERCHE(" ";A1)+2;1))<=90);DROITE(A1;NBCAR(A1)-CHERCHE(" ";A1));DROITE(A1;NBCAR(A1)-CHERCHE(" ";A1;CHERCHE(" ";A1)+1)));STXT(A1;CHERCHE("'";A1)-1;1)&"'"&STXT(A1;CHERCHE("'";A1)+1;25))

@+

Denis
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Tri particulier sur colonne

Bonsoir,

Fonction perso.

http://boisgontierjacques.free.fr/fichiers/fonctionsperso/FonctionExtraitNom2.xls

Code:
Function Nom(chaine)
   Application.Volatile
   If UCase(chaine) = chaine Then
     temp = chaine
   Else
    If InStr(chaine, " ") > 0 Then
      a = Split(chaine, " ")
      i = UBound(a)
      Do While UCase(a(i)) = a(i) And i > LBound(a):  i = i - 1: Loop
      For k = i + 1 To UBound(a): temp = temp & a(k) & " ": Next
    Else
      temp = chaine
    End If
  End If
  Nom = Trim(temp)
End Function

JB
 

Discussions similaires

Réponses
31
Affichages
1 K

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa