formule separer nom prenom

C@thy

XLDnaute Barbatruc
Bonjour le forum,

je suis en train d'essayer de trier par nom une liste complètement mal foutue.

Le but du jeu est donc : obtenir une colonne nom et une colonne prénom.

J'ai commencé mais je bloque un peu...:confused:

j'essaie par formules, mais j'imagine qu'on doit aussi pouvoir le faire par macro vu que le nom est totalement en majuscules...

Si vous pouviez m'apporter un début de solution, je vous en remercierais grandement.
je cherche de mon côté mais je ne vais pas très vite (suis dans les matricielles...)

je joins un exemple avec des noms bidon...

Merci à vous;)

Bises

C@thy
 

Pièces jointes

  • PRENOM NOM.xls
    31 KB · Affichages: 373

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : formule separer nom prenom

Bonsoir,

Je n'ai très bien compris.

Pour enlever les accents, il faut du VBA

Code:
Function sansAccent(chaine)
   codeA = "ÉÈÊËÔéèêëàçùôûïî"
   codeB = "EEEEOeeeeacuouii"
   temp = chaine
   For i = 1 To Len(temp)
    p = InStr(codeA, Mid(temp, i, 1))
    If p > 0 Then Mid(temp, i, 1) = Mid(codeB, p, 1)
   Next
   sansAccent = temp
End Function

JB
 

Pièces jointes

  • FonctionExtraitNom2.xls
    72.5 KB · Affichages: 87
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : formule separer nom prenom

OK, j'ai réussi à m'en sortir avec mes fonctions nom et prenom et un
=INDEX(IDENTIFIANT;EQUIV(J2&I2;NOM&PRENOM;0)) pareil pour idfinance et adresse_mel
j'ai juste un truc qu'est pas beau :
en H2 j'ai le prénom avec accent, récupéré par la fonction prénom
je suis obligée de mettre
=NOMPROPRE(sansAccents(H2)) car ma fonction sansAccents m'écrit tout en majuscules.

donc ce qu'il me manque maintenant :
modifier ma fonction sansAccents pour qu'elle me donne non pas des majuscules mais la 1ère lettre en majuscule,
j'ai pas su corriger le Ucase car je ne sais pas comment on dit nompropre en VBA...

Merciiiii si vous savez faire,

et bises du soir

C@thy
 

C@thy

XLDnaute Barbatruc
Re : formule separer nom prenom

Bon, je crois que l'équivalent de la fonction Nompropre n'existe pas en VBA?

j'ai donc fait ceci :
Code:
Public Function sansAccents2(txt As String) As String
Application.Volatile
For i% = 1 To Len(txt)
    Select Case Mid(txt, i, 1)
        Case Chr(192) To Chr(197), Chr(224) To Chr(229)
            char = "a"
        Case Chr(232) To Chr(235), Chr(200) To Chr(203)
            char = "e"
        Case "í", "ì", "î", "ï", "Í", "Ì", "Î", "Ï"
            char = "i"
        Case "ó", "ò", "ô", "ö", "õ", "Ó", "Ò", "Ô", "Ö", "Õ", Chr(248)
            char = "o"
        Case "ú", "ù", "û", "ü", "Ú", "Ù", "Û", "Ü"
            char = "u"
        Case "ÿ", "ý", Chr(221), Chr(159)
            char = "y"
        Case "ñ", "Ñ"
            char = "n"
        Case "ç", Chr(199)
            char = "c"
        Case Chr(230), Chr(198)
            char = "ae"
        Case Chr(138)
            char = "s"
        Case Chr(140), Chr(156)
            char = "oe"
    Case Else
        char = UCase(Mid(txt, i, 1))
    End Select
    laChaine = laChaine & char
Next i
sansAccents2 = Trim(UCase(Left(laChaine, 1)) & LCase(Right(laChaine, Len(laChaine) - 1)))
End Function
mais y'a encore un tout petit hic :
j'obtiens Marie-noelle au lieu de Marie-Noelle...

par conséquent il faudrait respecter la casse originale
Code:
Public Function sansAccents3(txt As String) As String
Application.Volatile
For i% = 1 To Len(txt)
    Select Case Mid(txt, i, 1)
        Case Chr(192) To Chr(197), Chr(224) To Chr(229)
            char = "a"
        Case Chr(232) To Chr(235), Chr(200) To Chr(203)
            char = "e"
        Case "í", "ì", "î", "ï", "Í", "Ì", "Î", "Ï"
            char = "i"
        Case "ó", "ò", "ô", "ö", "õ", "Ó", "Ò", "Ô", "Ö", "Õ", Chr(248)
            char = "o"
        Case "ú", "ù", "û", "ü", "Ú", "Ù", "Û", "Ü"
            char = "u"
        Case "ÿ", "ý", Chr(221), Chr(159)
            char = "y"
        Case "ñ", "Ñ"
            char = "n"
        Case "ç", Chr(199)
            char = "c"
        Case Chr(230), Chr(198)
            char = "ae"
        Case Chr(138)
            char = "s"
        Case Chr(140), Chr(156)
            char = "oe"
    Case Else
        char = Mid(txt, i, 1)
    End Select
    laChaine = laChaine & char
Next i
sansAccents3 = Trim(laChaine)
End Function

Bises et bonne soirée

C@thy
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : formule separer nom prenom

Bonsoir C@thy et bises

Teste:
Code:
Public Function sansAccents2(txt As String) As String
Application.Volatile
For i% = 1 To Len(txt)
    Select Case Mid(txt, i, 1)
        Case Chr(192) To Chr(197), Chr(224) To Chr(229)
            char = "a"
        Case Chr(232) To Chr(235), Chr(200) To Chr(203)
            char = "e"
        Case "í", "ì", "î", "ï", "Í", "Ì", "Î", "Ï"
            char = "i"
        Case "ó", "ò", "ô", "ö", "õ", "Ó", "Ò", "Ô", "Ö", "Õ", Chr(248)
            char = "o"
        Case "ú", "ù", "û", "ü", "Ú", "Ù", "Û", "Ü"
            char = "u"
        Case "ÿ", "ý", Chr(221), Chr(159)
            char = "y"
        Case "ñ", "Ñ"
            char = "n"
        Case "ç", Chr(199)
            char = "c"
        Case Chr(230), Chr(198)
            char = "ae"
        Case Chr(138)
            char = "s"
        Case Chr(140), Chr(156)
            char = "oe"
    Case Else
        char = UCase(Mid(txt, i, 1))
    End Select
    laChaine = laChaine & char
Next i
sansAccents2 = Trim(UCase(Left(laChaine, 1)) & LCase(Right(laChaine, Len(laChaine) - 1)))
sansAccents2 = Application.WorksheetFunction.Proper(sansAccents2)
End Function
 

Modeste

XLDnaute Barbatruc
Re : formule separer nom prenom

Salut C@thy,

Quelque chose comme
Code:
sansAccents = Application.Proper(Trim(laChaine))
... devrait fonctionner (Proper étant la traduction de NOMPROPRE en vba)

Edit: Pffrrrtt je m'arrête 5 minutes ... et Pierre est déjà passé par là! Désolé pour la bousculade :eek:
 

JNP

XLDnaute Barbatruc
Re : formule separer nom prenom

Re :)
Je n'ai très bien compris.
Pour enlever les accents, il faut du VBA
Code:
Function sansAccent(chaine)
codeA = "ÉÈÊËÔéèêëàçùôûïî"
codeB = "EEEEOeeeeacuouii"
temp = chaine
For i = 1 To Len(temp)
p = InStr(codeA, Mid(temp, i, 1))
If p > 0 Then Mid(temp, i, 1) = Mid(codeB, p, 1)
Next
sansAccent = temp
End Function
JB
Moi non plus :eek:...
Entre la fonction de Jacques pour ôter les accents et le couplage avec les fonctions de Jacques ou les miennes pour la découpe Nom/Prénom, que veux-tu de plus :confused:...???
Bonne soirée :cool:
 

Staple1600

XLDnaute Barbatruc
Re : formule separer nom prenom

Bonsoir à tous


[aparté parfois aussi appelé coup de calgon impromptu du XLDBarbatruc]
Sinon en 2007, on parlait déjà des prénoms...
https://www.excel-downloads.com/thr...-avec-les-majuscules-et-les-minuscules.73815/
Et en bas de la page, il y avait aussi les discussions similaires avec 5 liens qui ne demandent qu'à être cliquer.
Quant au point 2)-d de la charte, je suis triste pour lui qu'on le néglige si fréquemment
(bien que théoriquement rarement oublié quand on n'est plus XLDNauteNouveau ... :rolleyes: )
[/aparté]
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : formule separer nom prenom

Bonjour à tous,

juste pour dire que je vous remercie grandement de votre aide et pour m'excuser auprès de ceux que j'ai fâchés (un peu...)
j'ai tout simplement consulté XLD depuis mon smartphone (pas pratique, j'vous l'dit!!!),
et j'ai zappé l'excellente réponse de JB, qui me convient parfaitement (la réponse!! ;)),
de plus je ne sais pas pourquoi mais les messages xld arrivent dans ma boîte courriers indésirables, que je ne consulte pas forcément,
donc un grand merci à vous tous, vous êtes vraiment SUPER.
Staple, j'avais fait une recherche, mais qui ne m'avait pas donné ce que je souhaitais, je chercherais mieux la prochaine fois, promis juré (avec un accent!:p), je ne veux pas te rendre triste..:(

Bises à tous, mille mercis et bonne journée

C@thy
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : formule separer nom prenom

Tout spécialement pour Staple,

je viens de faire des recherches approfondies sur le forum excel, mais je n'ai pas trouvé les réponses à toutes les questions précises posées dans ce fil,
et pourtant il y a moulte discussions sur nom prénom, comme quoi le sujet est complexe.
Je pense que ce fil vient compléter ces discussions.

J'ai également fait une recherche pour séparer nom et prénom au cas où on ait l'ordre inverse,
à savoir DUPONT Alain, voire M. DUPONT Alain,
je n'ai pas encore trouvé quelque chose qui réponde à la question,
j'ai également cherché avec majuscules minuscules,
car le nom de famille est toujours écrit en Majuscules, et seul le prénom comporte des minuscules...

j'ai trouvé ce code, de Boisgontier :

Code:
Function PreNom(chaine)
   i = 1
   Do While Asc(Mid(chaine, i, 1)) < 96 And i < Len(chaine)
      i = i + 1
   Loop
   PreNom = Mid(chaine, i - 1) '& " " & Left(chaine, i - 3)
End Function
Function Nom(chaine)
   i = 1
   Do While Asc(Mid(chaine, i, 1)) < 96 And i < Len(chaine)
      i = i + 1
   Loop
   Nom = Left(chaine, i - 3)
End Function
mais qui ne fonctionne pas avec M. Mme Mlle devant


C@thy
 
Dernière édition:

ralph45

XLDnaute Impliqué
Re : formule separer nom prenom

Bonjour le fil !

C@thy, dans ton post #11, tu t'interroges sur le cas de supprimer les accents.
J'avais récupéré cette fonction sur ce site il y a quelques temps et elle "fonctionne" nickel... Je ne me souviens plus de l'auteur(e), pardon si c'est l'un(e) d'entre vous... :eek:

Si cela peut t'aider :

Code:
Function SANSACCENT(texte)
    'Définition des variables
    avec = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç_"
    sans = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc "
    tmp = texte

    'Boucle de traitement
    For i = 1 To Len(tmp)
        pot = InStr(avec, Mid(tmp, i, 1))
        If pot > 0 Then Mid(tmp, i, 1) = Mid(sans, pot, 1)
    Next i
    If tmp = 0 Then tmp = ""  'Ne laisse pas un zéro si champ vide
    SANSACCENT = tmp          'Retour du traitement
End Function

A plus ! ;)

EDIT : Arg, pas vu le post # 22 de JNP.
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : formule separer nom prenom

Merci de faire avancer le schmilblick, cette fonction est encore plus complète.

Voici où j'en suis de mes recherches et élucubrations, tergiversations

le but est toujours d'isoler dans une cellule ce qui est en majuscules (= au moins 2 qui se suivent) de ce qui est en minuscules

C@thy
 

Pièces jointes

  • Copie de FonctionExtraitNomPrenom.xls
    83 KB · Affichages: 68

C@thy

XLDnaute Barbatruc
Re : formule separer nom prenom

Alors là, on frise la perfection!!!
pourquoi je dis on frise au lieu de on atteint???

il faudrait rajouter un supprespace... car en plus, ils mettent des espaces à la fin, des fois!!!

Edit :
Code:
=SI(EXACT(DROITE(SUPPRESPACE(A2);1);MAJUSCULE(DROITE(SUPPRESPACE(A2);1)));sansaccent(nom(SUPPRESPACE(A2)));sansaccent(nom(inverseNP(SUPPRESPACE(A2)))))
Un immense Bravo et un énorme MERCI, c'est carrément fabuleux!
Et ce qui est encore plus fabuleux, c'est la méthode JB avec le fichier d'exemple qui va bien!

Mille mercis, cela répond à toutes mes questions (fort nombreuses!) ;) du moins sur ce fil...

Bizz

C@thy
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 588
Messages
2 110 988
Membres
111 002
dernier inscrit
Lolo73i