Séparer nom et prénoms
Bonjour à tous,
Nous avons un souci actuellement, en fait nous avons reçus un fichier client à intégrer sur un de nos sites.
Dans fichier reçus, les noms et prénoms ne sont pas séparés mais mis dans une seule colonne.
Les noms sont en majuscule et les prénoms en minuscule.
Exemple :
BERNARD Tibourin,
Juliette DUPONT MILES
NICO RIO Madeleine R.
Marie Liliane DUPONT
Avec un seul nom et un seul prénom, ça se passe bien quand je le sépare.
Mais il y a parfois 2 noms, et plusieurs prénoms
J'ai essayé de prendre le nom et le prénom mais ce qui se trouve entre le premier prénom et le nom, je n'arrive pas à l'avoir.
// Par exemple, dans Marie Liliane DUPONT, j'ai réussi juste à prendre :
Marie (prénom)
et
DUPONT (nom)
Est ce que vous avez des conseils ou a déjà rencontré ce genre de problème s'il vous plaît?
Cordialement,
Hello,
Je t'invite à mettre ta version d'Excel à jour.
En attendant je te propose une requête PowerQuery. Tu alimentes le tableau de gauche et ensuite tu cliques droit sur le tableau de droite puis actualiser. A condition que tu sois sur Excel 2016 ou plus
Je suis parti du principe que le/les noms de famille étaient en majuscule
@+
Bonjour à tous !
Une approche Power Query qui traite les initiales isolées (longueur à adapter) :
let
Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
AjtNoms = Table.AddColumn(Source, "Noms", each let
a=Text.Split([Nom prénom]," "),
b=List.Select (a, each Text.Upper(_)=_ and Text.Length(_)>2)
in
Text.Combine(b," ")),
AjtPrénoms = Table.AddColumn(AjtNoms, "Prénoms", each let
a=Text.Split([Nom prénom]," "),
b=List.Select (a, each Text.Upper(_)<>_ or Text.Length(_)<3)
in
Text.Combine(b," "))
in
AjtPrénomsBonjour tout le monde,
Une petite macro devrait faire l'affaire. Exemple. Probablement une petite erreur dans l'énoncé, le prénom Tibourin n'étant pas très connu
Bonjour Rutchy et bienvenue sur XLP
Comme il ne fait pas beau, une autre macro qui tente de traiter des noms avec particules, points et apostrophes. On s'amuse comme on peut !
La fonction personnalisée est : NomPrenom(Texte, prenom)
- texte est le texte pour qu'on doit séparer entre le nom et le prénom
- prenom est n'importe quoi et il est optionnel : S'il est absent alors on retourne le nom. S'il est présent alors on retourne le prénom.
Voir formule en colonne B et C.
Le code est dans module1 :
Function NomPrenom(ByVal x As String, Optional prenom) As String
Dim s, i&, premU&, DerU&, res$
premU = -1: DerU = -1
x = Replace(Replace(x, ".", ". "), "'", "' ")
s = Split(Application.Trim(x))
For i = 0 To UBound(s)
If InStr(s(i), ".") = 0 Then
If StrComp(s(i), LCase(s(i)), vbBinaryCompare) = 0 Then premU = i: Exit For
If StrComp(s(i), UCase(s(i)), vbBinaryCompare) = 0 Then premU = i: Exit For
End If
Next i
For i = UBound(s) To 0 Step -1
If InStr(s(i), ".") = 0 Then
If StrComp(s(i), UCase(s(i)), vbBinaryCompare) = 0 Then DerU = i: Exit For
End If
Next i
If premU = -1 Then
If IsMissing(prenom) Then NomPrenom = "" Else NomPrenom = x
Exit Function
End If
If IsMissing(prenom) Then
For i = premU To DerU: res = res & " " & s(i): Next
Else
For i = 0 To UBound(s): res = res & IIf(i < premU Or i > DerU, " " & s(i), ""): Next
End If
NomPrenom = Application.Trim(Replace(Replace(Mid(res, 2), ". ", "."), "' ", "'"))
End Function
Bonjour à tous,
Une solution alternative avec le pack de fonctions du site ou avec Google Sheets
Le nom :
=REGEX_EXTRACT(A1;"[A-Z]{2,}(?: [A-Z]{2,})?")Le prénom :
=REGEX_EXTRACT(A1;"[A-Z][a-z]+(?: [A-Z][a-z.]+)?")
Pour Google Sheets, il suffit de remplacer le nom de la fonction REGEX_EXTRACT par REGEXEXTRACT :
Cordialement,