Débutant - rech 1er espace à partie de la fin ... ou autre chose ?

pdemaret

XLDnaute Nouveau
Bonjour

Je suis ici à mon boulot et je dois fournir une liste. Je suis ennuyé car je ne sais pas comment faire.
Mon niveau en macro est débutant. Je me permets de vous soumettre mon problème :

J'ai une colonne qui reprend le nom et le prénom. Ils sont séparés par des espaces. Je dois pouvoir extraire le nom et le prénom.
Le fait est qu'il y a des noms en plusieurs morceaux (très courant ici en Belgique), alors que le prénoms, s'ils sont composés, séparent les morceaux par des "-".

Donc je me disais que si j'avais une fonction qui me donnerait la position du dernier espace, je pourrais facilement me débrouiller avec GAUCHE, DROITE et NBCAR

Qu'avez-vous à me proposer ?

Merci d'avance pour ce coup de main :)
 

pdemaret

XLDnaute Nouveau
Re : Débutant - rech 1er espace à partie de la fin ... ou autre chose ?

Bonjour

Je suis ici à mon boulot et je dois fournir une liste. Je suis ennuyé car je ne sais pas comment faire.
Mon niveau en macro est débutant. Je me permets de vous soumettre mon problème :

J'ai une colonne qui reprend le nom et le prénom. Ils sont séparés par des espaces. Je dois pouvoir extraire le nom et le prénom.
Le fait est qu'il y a des noms en plusieurs morceaux (très courant ici en Belgique), alors que les prénoms, s'ils sont composés, séparent les morceaux par des "-".

Donc je me disais que si j'avais une fonction qui me donnerait la position du dernier espace, je pourrais facilement me débrouiller avec GAUCHE, DROITE et NBCAR

Qu'avez-vous à me proposer ?

Merci d'avance pour ce coup de main :)
 

tototiti2008

XLDnaute Barbatruc
Re : Débutant - rech 1er espace à partie de la fin ... ou autre chose ?

Bonjour à tous,

Si nom et prénom en D3,

Nom :

Code:
=GAUCHE(D3;MAX((STXT(D3;LIGNE(INDIRECT("A1:A"&NBCAR(D3)));1)=" ")*LIGNE(INDIRECT("A1:A"&NBCAR(D3))))-1)

à valider par Ctrl+Maj+entrée

Prénom :
Code:
=DROITE(D3;NBCAR(D3)-MAX((STXT(D3;LIGNE(INDIRECT("A1:A"&NBCAR(D3)));1)=" ")*LIGNE(INDIRECT("A1:A"&NBCAR(D3)))))

à valider par Ctrl+Maj+entrée
 

mth

XLDnaute Barbatruc
Re : Débutant - rech 1er espace à partie de la fin ... ou autre chose ?

Bonjour le fil :)

Avec les noms/prénoms en A1, un petit essai mais à valider grandeur nature: (notamment, ces formules ne seront pas adaptées s'il y a des espaces en surnombre, s'il manque le tiret des prénoms composés, etc ... )

Pour le nom en B1:
Code:
=GAUCHE(A2;CHERCHE("µ";SUPPRESPACE(SUBSTITUE(A2;" ";"µ";NBCAR(A2)-NBCAR(SUBSTITUE(A2;" ";""))))))

Pour le prénom en C1:

Code:
=SUBSTITUE(A2;B2;"")

Bon après-midi à tous,

mth

Edit: :) bonjour tototiti :)
 
Dernière édition:

hoerwind

XLDnaute Barbatruc
Re : Débutant - rech 1er espace à partie de la fin ... ou autre chose ?

Bonjour (cher voisin), salut les autres,

A1 : Van den Bogaard Frans-Albert
La formule :
Code:
=DROITE(A1;NBCAR(A1)-CHERCHE("µ";SUBSTITUE(A1;" ";"µ";NBCAR(A1)-NBCAR(SUBSTITUE(A1;" ";"")))))
renverra Frans-Albert
 

mth

XLDnaute Barbatruc
Re : Débutant - rech 1er espace à partie de la fin ... ou autre chose ?

re :)

Juste pour robyostar ... :)

vu tous ces XLDnaute confirmé qui t'ont dèja répondu tu n'as plus besoin de mes lumières.

Toutes les contributions des uns et des autres sont toujours intéressantes tu sais, on peut se tromper, se corriger en lisant les autres propositions, trouver plus simple, apprendre un truc, bref, ne te censure jamais robyostar :)
A bientôt j'espère :)

mth
 

ROGER2327

XLDnaute Barbatruc
Re : Débutant - rech 1er espace à partie de la fin ... ou autre chose ?

Bonjour à tous
Abondance de biens ne nuit pas à celui qui les possède...

Une proposition sous forme de fonction personnalisée :
Code:
[COLOR="DarkSlateGray"][B]Function Nom_Prénom(r$)
Application.Volatile
Dim dat$(1 To 2)
  r = Replace(r, Chr(160), Space(1))
  r = WorksheetFunction.Trim(r)
  r = Replace(r, " -", "-")
  r = Replace(r, "- ", "-")
  If InStr(1, r, Space(1)) Then
    dat(2) = WorksheetFunction.Proper(StrReverse(Mid$(StrReverse(r), 1, InStr(1, StrReverse(r), Space(1)) - 1)))
    dat(1) = UCase(Left$(r, Len(r) - Len(dat(2)) - 1))
  End If
  Nom_Prénom = dat
End Function[/B][/COLOR]

Mode d'emploi :
  1. Placer le code dans un module standard.

  2. Si NOM1 NOM2 Prénom1-Prénom2 est en A1 et si on veut récupérer NOM1 NOM2 en B1, Prénom1-Prénom2 en C1, sélectionner B1:C1, saisir
    Code:
    [COLOR="DarkSlateGray"][B]=Nom_Prénom(A1)[/B][/COLOR]
    en B1 et valider par Ctrl Maj Entrée.

  3. Pour traiter la colonne A, étendre B1:C1 vers le bas.
Voyez le classeur joint.​
ROGER2327
#4200


Samedi 21 Absolu 138 (Saint Venceslas, duc, SQ)
7 Vendémiaire An CCXIX
2010-W39-2T14:34:29Z
 

Pièces jointes

  • NOM_Prénom_4200.xls
    19.5 KB · Affichages: 41

ROGER2327

XLDnaute Barbatruc
Re : Débutant - rech 1er espace à partie de la fin ... ou autre chose ?

Suite...
J'ai oublié quelque chose. Si on veut obtenir uniquement le nom ou le prénom, on peut utiliser ces fonctions :
Code:
[COLOR="DarkSlateGray"][B]Function Nom(r$)
Application.Volatile
  Nom = Nom_Prénom(r)(1)
End Function

Function Prénom(r$)
Application.Volatile
  Prénom = Nom_Prénom(r)(2)
End Function[/B][/COLOR]
en complément de la fonction précédente.

=Nom("van den bogaard frans-albert") renvoie VAN DEN BOGAARD.
=Prénom("van den bogaard frans-albert") renvoie Frans-Albert.​
ROGER2327
#4201


Samedi 21 Absolu 138 (Saint Venceslas, duc, SQ)
7 Vendémiaire An CCXIX
2010-W39-2T20:54:39Z
 

Discussions similaires

Statistiques des forums

Discussions
311 715
Messages
2 081 822
Membres
101 822
dernier inscrit
holale