Séparation nom prénom et enlever les derniers prénoms

Bonjour tout le monde

Excel 365

J'ai 2 pb séparer les noms prénoms avec noms et ou prénoms composés, j'ai fait ma formule mais ça marche pas . (je crois que je suis fatiguée !!)

et comment enlever les 2 ou 3 derniers prénoms de ma liste.

merci bcp

Bonsoir,

Si VBA est possible (fichier .xlsm), essayez ces deux fonctions :

Function RechercherLeNom(ByVal ChaineNomPrenom As String) As String

Dim TabNom As Variant

    RechercherLeNom = ""
    TabNom = Split(ChaineNomPrenom, " ")

    Select Case LCase(TabNom(0))
           Case "le", "les", "du", "des"  ' Ajouter les différentes occurrences
                RechercherLeNom = UCase(TabNom(0) & " " & TabNom(1))
           Case Else
                RechercherLeNom = UCase(TabNom(0))
    End Select

End Function

Function RechercherLePrenom(ByVal ChaineNomPrenom As String) As String

Dim TabNom As Variant

    RechercherLePrenom = ""
    TabNom = Split(ChaineNomPrenom, " ")

    Select Case LCase(TabNom(0))
           Case "le", "les", "du", "des" ' Ajouter les différentes occurrences
                RechercherLePrenom = TabNom(2)
           Case Else
                RechercherLePrenom = TabNom(1)
    End Select

End Function

Bonsoir,

ou par formules, pour les noms (s'ils sont à gauche) ;

=STXT(A1;1;TROUVE("#";SUBSTITUE(A1;" ";"#";SOMMEPROD((STXT(A1;LIGNE(INDIRECT("$1:$"&NBCAR(A1)));1)=" ")*1)))-1)

prénoms (s'ils sont à droite) ;

=DROITE(A1;NBCAR(A1)-TROUVE("#";SUBSTITUE(A1;" ";"#";SOMMEPROD((STXT(A1;LIGNE(INDIRECT("$1:$"&NBCAR(A1)));1)=" ")*1))))

Pour le 2ème problème c'est plus compliqué parce qu'on ne sait pas combien de mots forment le nom (et donc où commence le prénom), dans vos exemples ça peut être 1 ou 2.

Bonjour

Dans la mesure ou rien ne permet d'identifier un nom par rapport à un prénom (majuscules par exemple) il est totalement aléatoire de découper des noms ou prénom composés sans - et de repérer n prénoms...

Il est utile de compter les mots en colonne B par la formule

=SOMMEPROD((STXT(A1;LIGNE(INDIRECT(1&":"&NBCAR(A1)));1)={" "})*1)+1

Le 1er mot s'obtient par

=GAUCHE(A1;CHERCHE(" ";A1)-1)

Les suivants par

=SI($B1<=COLONNE(A1);"";STXT($A1;CHERCHE("@";SUBSTITUE($A1;" ";"@";COLONNE()-3))+1;SI($B1=COLONNE(B1);100;CHERCHE("@";SUBSTITUE($A1;" ";"@";COLONNE(B1)))-CHERCHE("@";SUBSTITUE($A1;" ";"@";COLONNE(A1)))-1)))

à saisie en C1 et étirer à droite sur autant de colonnes que nécessaire.

On pourrait plus simplement découper par PowerQuery (ou avec FRACTIONNER.TEXTE sur 365)

Mais tout cela ne résout ni les noms composés ni la détection du 1er prénom...

Seuls des noms en Majuscules pourrait faire avancer le schmilblick...

Amusez-vous avec du Pont de Nemours Éleuthère Irénée

Pour répondre à Chris :

Hugues si tu me lis, ce que je doute, j'ai pris ton nom comme exemple...

Option Explicit

Function LeNomPrenom(ByVal ChaineNomPrenom As String, ByVal Choix As String) As String

Dim I As Integer, J As Integer, PositionDansNom As Integer, NbParticules As Integer
Dim TabNoms As Variant, TabParticules As Variant

    LeNomPrenom = ""

    If ChaineNomPrenom = "" Then Exit Function

    If InStr(1, ChaineNomPrenom, " ", vbTextCompare) = 0 Then
       LeNomPrenom = ChaineNomPrenom
       Exit Function
    End If

    TabParticules = Array("l'", "le", "la", "les", "d'", "de", "du", "des", "dit")
    TabNoms = Split(ChaineNomPrenom, " ")
    PositionDansNom = 0
    NbParticules = 0

    ' Recherche de la position de la dernière particule
    For J = LBound(TabNoms) To UBound(TabNoms)
        For I = LBound(TabParticules) To UBound(TabParticules)
            If TabParticules(I) = LCase(TabNoms(J)) Then
               PositionDansNom = J
               NbParticules = NbParticules + 1
            End If
        Next I
    Next J

    Select Case Choix
           Case "Nom"
                If NbParticules = 0 Then
                   LeNomPrenom = TabNoms(0)
                Else
                   For J = LBound(TabNoms) To PositionDansNom + 1
                       LeNomPrenom = LeNomPrenom & TabNoms(J) & " "
                   Next J
                End If
                LeNomPrenom = UCase(LeNomPrenom)
           Case "Prénom"
                If NbParticules = 0 Then
                   LeNomPrenom = TabNoms(1)
                Else
                   LeNomPrenom = TabNoms(PositionDansNom + 2)
                End If
    End Select

End Function
capture

merci beaucoup mais j'ai encore un soucis sur la séparation des noms prénoms, il ne prend pas les prénoms sans tiret.

y a moyen de rectifier ?

Bonjour à tous,

Un essai, largement partiel, pour faire avancer le schmilblick, valable pour Excel 365 ou 2024.

Le nom :

=TEXTE.AVANT(A1;" ";SI(STXT(A1;3;1)=" ";2;1))

La liste des prénoms :

=TEXTE.APRES(A1;" ";SI(STXT(A1;3;1)=" ";2;1))

Le premier prénom :

=TEXTE.AVANT(TEXTE.APRES(A1;" ";SI(STXT(A1;3;1)=" ";2;1))&" ";" ")

De nombreux cas plus exotiques que vos exemples ne sont pas traités, à voir si vous en avez beaucoup.

Bonjour

La solution d'Eric fonctionne plutôt bien pourquoi ne pas l'utiliser ?

Tu as pris celle de Doux Rêveur qui a pris soin d'en énoncer les limites... qui expliquent bien pourquoi cela ne marche pas dans le cas énoncé

Bonsoir à tous !

Pour le "fun" et dans un environnement M365, une double approche (formule à recopier et formule unique dynamique) basée sur une table de correspondance) :

A tester.....

Bonjour à tous ,

merci beaucoup mais j'ai encore un soucis sur la séparation des noms prénoms, il ne prend pas les prénoms sans tiret.

y a moyen de rectifier ?

Oui, en insérant à la mimine un tiret...

Pensez-vous vraiment trouver une formule ou un code pouvant se dépatouiller de tous les cas qu'on peut rencontrer ?

Jean Simon Henri : le nom c'est Jean avec comme prénom Simon Henri ou bien le nom est Jean Simon et le prénom Henri ?

Voilà, impossible de prévoir tous les cas.

Amusez-vous avec du Pont de Nemours Éleuthère Irénée

Ce qu'on peut toujours faire c'est de rajouter un chiffre dans une colonne pour indiquer le nombre de mots correspondant au nom, et on peut l'utiliser dans une formule ou un code VBA pour savoir où faire la "découpe". Si on ne met rien on peut le compter comme 1 mot (pour ne pas devoir taper 1). Pour le reste ce sera manuel.

Voici une version avec l'ajout manuel en colonne D du nombre de mots pour le nom (on peut mettre 1 ou rien quand il n'y en a qu'un, voir D1 et D4) ;

excel nom prenoms par vivie c

Bonjour à tous,

Le fond du problème a déjà été très bien expliqué : les données "manquent d'info". Donc nécessairement les solutions proposées vont faire des hypothèses qui correspondront (ou non) à la solution réelle.


Ci-après une méthode de résolution générique en supposant que vous n'avez vraiment que votre liste comme base de données.

  1. Découper le texte en "mots/tokens" sur les espaces : "Du Pont Jean-Marie" -> ["Du", "Pont", "Jean-Marie"].
  2. Normaliser et nettoyer (majuscules, caractères spéciaux…)
  3. Regarder pour chaque mot s'il est présent là (Fichier des prénoms − Prénoms | Insee) ou là (Fichier des noms | Insee). Voir où il apparait le plus et gérer les cas particuliers (Olivier…). Cela permet d'inférer si c'est "plutôt un nom" ou "plutôt un prenom".
  4. On décide si les particules sont des noms/prénoms (le, du, etc).
  5. Analyser le résultat, je mettrais les priorités ainsi :

1 : Si le dernier mot est très probablement un prénom → tout ce qui précède est le nom.

2 : Si plusieurs mots à la fin sont des prénoms → ces mots sont les prénoms, le reste est le nom.

3 : Si le début contient des particules → on garde ces mots dans le nom.

4 : Si on ne sait pas → on coupe après le premier mot (par défaut : "ABC DEF" → nom:ABC, prenom:DEF).

Je ne propose pas de code car a mon avis c'est inutile… C'était surtout pour mentionner les listes de l'Insee.

Je viens de mettre une nouvelle version dans la partie Téléchargements.

Cette version fait également la séparation Prénoms Nom.

Rechercher des sujets similaires à "separation nom prenom enlever derniers prenoms"