est-ce possible ?

  • Initiateur de la discussion Romain
  • Date de début
R

Romain

Guest
Bonjour,

Je dispose d'une colonne A contenant, pour chaque cellule, un prénom et un nom séparé par un espace.
Je souhaite, par formule ou vba, récupérer dans la colonne B le prénom, et dans la colonne C, le nom.
Evidemment, les prénoms et noms de la colonne A sont de longueurs différentes.

Merci pour votre aide.

Romain
 
R

Romain

Guest
La réflexion d'André est intéressante et complique singulièrement la tâche. En attendant, grand merci à Yeahou dont la solution est parfaite. Pour les cas particuliers du style Jean de la Fontaine, je gèrerais à la main.
En attendant... (Car je suis sûr que certains vont trouver quelque solution).

Romain
 

andré

XLDnaute Barbatruc
Salut Romain, ... et les autres qui n'ont pas de solution (lol).

Voici la façon dont je procède, c'est pas fameux, mais je n'ai pas encore trouvé mieux.

En première instance je sélectionne la colonne et je lui applique une MeFC avec la formule : =NBCAR(A1)-NBCAR(SUBSTITUE(A1;' ';''))>1 avec un format (motif jaune par exemple).
Toutes les cellules ayant plus d'un espace sont repérées.

Puis je parcours ces cellules en plaçant une , (virgule) à la fin du nom de famille.

Puis en colonne B et C j'emploie des formules similaires à celles qui t'ont été proposées par nos deux compères, mais avec une condition :
S'il n'y a qu'un espace, j'emploie cet espace comme séparateur, dans les autres cas j'emploie la virgule.

Il reste un problème, c'est un nom de famille sans prénom.
Tes formules renvoyent un message d'erreur puisqu'elles ne trouvent ni d'espace ni de virgule.
Tu corriges cela en ajoutant un espace dans ta formule de recherche.

Si cela te semble nébuleux (ce qui ne m'étonnarait pas), mets un petit extrait avec tous les cas de figure que rencontres en pièce jointe, je me ferai un plaisir de te résoudre ce problème.

Ândré.
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour à tous

je gérerai cela un peu différemment
plusieurs possibilités
1- les prénoms composés sont liès par -
2- les champs sont de format nom prénom, pas de problème la formule s'applique.
3- les champs sont de format prénom nom et il faut récupérer l'emplacement du dernier espace pour modifier la formule en conséquence.
en ajoutant une gestion d'erreur, un simple repérage du nombre d'espace dans la cellule, cela devrait tout caler, je regarde

Cordialement, A+
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Re bonjour

voici la gestion du cas 3 en formule, champ de type prénom nom, accepte les noms composés avec séparation espace comme entre prénom nom, l'absence d'espace est gérée(actuellemnt champ vide mais on peut remplacer par champ d'origine).
en B1
=SI(ESTERREUR(CHERCHE(' ';A1;1));'';GAUCHE(A1;SI(ESTERREUR(CHERCHE(' ';A1;CHERCHE(' ';A1;1)+1));CHERCHE(' ';A1;1)-1;CHERCHE(' ';A1;CHERCHE(' ';A1;1)+1)-1)))
en C1
=SI(ESTERREUR(CHERCHE(' ';A1;1));'';DROITE(A1;NBCAR(A1)-SI(ESTERREUR(CHERCHE(' ';A1;CHERCHE(' ';A1;1)+1));CHERCHE(' ';A1;1);CHERCHE(' ';A1;CHERCHE(' ';A1;1)+1))))

Cordialement, A+
 

JeanMarie

XLDnaute Barbatruc
Bonjour

Si le prénom composé a comme séparateur le trait d'union.

Une formule matricielle à valider par les touches Ctrl+Shift+Entrer, peut retourner le nom quel que soit le nombre de caractères 'espace'

Pour le nom :
=MAJUSCULE(GAUCHE(SUPPRESPACE(A1);MAX(SI(STXT(SUPPRESPACE(A1);LIGNE(DECALER(A$1;;;NBCAR(A1)));1)=' ';LIGNE(DECALER(A$1;;;NBCAR(A1)))))-1))

Pour le prénom :
=NOMPROPRE(DROITE(SUPPRESPACE(A1);NBCAR(SUPPRESPACE(A1))-MAX(SI(STXT(SUPPRESPACE(A1);LIGNE(DECALER(A$1;;;NBCAR(A1)));1)=' ';LIGNE(DECALER(A$1;;;NBCAR(A1)))))))

Dans les deux formules, la référence A1 correspond à la cellule qui contient la donnée 'Nom Prénom'.
La référence $A$1 doit rester la référence $A$1, elle permet de retournée une matrice, qui contient les valeurs {1;2;3;4;.....; à NB.CAR()}. Cette matrice va saucissonner la donnée 'Nom Prénom', caractère par caractère (par la fonction STXT) pour trouver la dernière position de l'espace (par MAX(SI(='';LIGNE())) ).

@+Jean-Marie

Message édité par: JeanMarie, à: 10/06/2005 07:45