Formule extraction nom prénom d'une cellule

scorpio94

XLDnaute Nouveau
Bonjour,

Je bloque sur une formule qui me permettrait d'extraire le nom et prénom d'une cellule sous format d'adresse mail mais avec une condition :

- Si la cellule contient un prénom et un nom composé, il faudrait mettre un tiret entre le nom composé sous ce format là : " prénom.nom-composé@test.fr "

Je mets en pièce jointe un fichier sur lequel j'ai commencé une formule qui me permet pour l'instant uniquement d'extraire le prénom et le nom : " prénom.nom@test.fr "

Merci de votre aide !
 

Pièces jointes

  • Classeur1.xlsx
    10.5 KB · Affichages: 22

scorpio94

XLDnaute Nouveau
1571230321559.png


Merci de ton retour!


Les noms et prénoms ont systématiquement le même format :

DUPONT CHRISTOPHE -> Nom en 1ère position et le prénom en 2nde position.

Lorsqu'il y a un nom composé, la seconde partie du nom suit la systématiquement la première :

GONCALVES PERREIRA CELINE -> Nom en 1ère position, 2ème partie du nom en 2nde position et enfin le prénom en dernière position.

Il faudrait que dans le cas d'un nom composé la 1ère et la 2eme partie du nom soit séparées d'un "-".

Ne serait-il pas possible qu'Excel puisse identifier les éléments en fonction de leur positions ?

Je ne sais pas si j'ai été clair...

Merci encore une fois...
 

Hasco

XLDnaute Barbatruc
Repose en paix
bonjour,

fonctionne avec les exemple donnés: =SUBSTITUE(SUBSTITUE(SUBSTITUE(DROITE(A1;NBCAR(A1)-TROUVE("(";A1));")";"");" ";".";1);" ";"-";1) & "@test.fr"

Cordialement
 

Pièces jointes

  • Noms prénoms.xlsx
    10.4 KB · Affichages: 9

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Valtrase a raison.

Par éclatement des données avec "Données/Convertir" puis remplacement des ( et ) par rien, voir la soluce en feuille 2

Par fonction personnelle en feuille 3,

VB:
Function Email(c As Range, Optional domaine As String = "test.fr")
    Dim Valeurs As Variant
    Dim i As Integer
    Valeurs = Split(c.Cells(1, 1), " ")
    For i = 0 To UBound(Valeurs)
        Valeurs(i) = Replace(Replace(Valeurs(i), "(", ""), ")", "")
    Next i
    Select Case UBound(Valeurs)
    Case 3: Email = LCase(Valeurs(3) & "." & Valeurs(1) & "-" & Valeurs(2))
    Case 2: Email = LCase(Valeurs(2) & "." & Valeurs(1))
    Case Else: Email = CVErr(xlErrNA)
    End Select
    If Not IsError(Email) And domaine <> "" Then Email = Email & "@" & domaine
End Function

Sinon voir la formule en E2 de feuil1 du fichier joint, rien que pour rigoler!
Elle fonctionne sur les deux exemple donnés, mais en cas d'erreur, allez la débugger!!!!

=MINUSCULE(SI(ESTNUM(TROUVE(".";SUBSTITUE(SUBSTITUE(SUBSTITUE(DROITE(A1;NBCAR(A1)-TROUVE("(";A1));")";"");" ";"-";1);" ";".";1)));DROITE(SUBSTITUE(SUBSTITUE(SUBSTITUE(DROITE(A1;NBCAR(A1)-TROUVE("(";A1));")";"");" ";"-";1);" ";".";1);NBCAR(SUBSTITUE(SUBSTITUE(SUBSTITUE(DROITE(A1;NBCAR(A1)-TROUVE("(";A1));")";"");" ";"-";1);" ";".";1))-TROUVE(".";SUBSTITUE(SUBSTITUE(SUBSTITUE(DROITE(A1;NBCAR(A1)-TROUVE("(";A1));")";"");" ";"-";1);" ";".";1)))&"."&GAUCHE(SUBSTITUE(SUBSTITUE(SUBSTITUE(DROITE(A1;NBCAR(A1)-TROUVE("(";A1));")";"");" ";"-";1);" ";".";1);TROUVE(".";SUBSTITUE(SUBSTITUE(SUBSTITUE(DROITE(A1;NBCAR(A1)-TROUVE("(";A1));")";"");" ";"-";1);" ";".";1))-1);DROITE(SUBSTITUE(SUBSTITUE(SUBSTITUE(DROITE(A1;NBCAR(A1)-TROUVE("(";A1));")";"");" ";"-";1);" ";".";1);NBCAR(SUBSTITUE(SUBSTITUE(SUBSTITUE(DROITE(A1;NBCAR(A1)-TROUVE("(";A1));")";"");" ";"-";1);" ";".";1))-TROUVE("-";SUBSTITUE(SUBSTITUE(SUBSTITUE(DROITE(A1;NBCAR(A1)-TROUVE("(";A1));")";"");" ";"-";1);" ";".";1)))&"." &GAUCHE(SUBSTITUE(SUBSTITUE(SUBSTITUE(DROITE(A1;NBCAR(A1)-TROUVE("(";A1));")";"");" ";"-";1);" ";".";1);TROUVE("-";SUBSTITUE(SUBSTITUE(SUBSTITUE(DROITE(A1;NBCAR(A1)-TROUVE("(";A1));")";"");" ";"-";1);" ";".";1))-1)))&"@test.fr"

Cordialement
 

Pièces jointes

  • Noms prénoms.xlsm
    18.6 KB · Affichages: 13
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

scorpio94
Le lien vers Youtube expliquait la blague
Par contre le premier lien était un lien sérieux qui menait vers un fil d'XLD très fourni relatifs aux expressions régulières
Cela ne devait pas être suffisant pour un petit feedback de ta part...:rolleyes:
 

Staple1600

XLDnaute Barbatruc
Re

Juste pour saluer Roblochon amicalement ;)
Et pour montrer la puissance de RegExp
VB:
Sub test()
sTest = "12345678  (GONCALVES PERREIRA Céline)"
[A1] = sTest: [B1:C1] = Array("=Nom($A$1)", "=Prénom($A$1)")
End Sub

Function Nom(c)
  Application.Volatile
  Set obj = CreateObject("vbscript.regexp")
  obj.Pattern = "([A-Z'ÔË]{2,}\s*-?)+"
  Set a = obj.Execute(c)
  If a.Count > 0 Then Nom = a(0) Else Nom = ""
End Function

Function Prénom(c)
  Application.Volatile
  Set obj = CreateObject("vbscript.regexp")
  c = Replace(Replace(Replace(c, "M.", ""), "Mme", ""), "Mle", "")
  obj.Pattern = "([A-Z][a-zëéèô]+\s*-?)+"
  Set a = obj.Execute(c)
  If a.Count > 0 Then Prénom = a(0) Else Prénom = ""
End Function
PS: crédits à JB pour ces deux fonctions
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Alors le temps que les pâtes finissent de cuire
(et pour une solution qui n'implique pas RegExp, mais pas sur pour autant que cela fonctionne sur Mac)
A tester sur un classeur vierge
(en lançant d'abord la macro pretest qui ne sert quà créer des données exemple)
Lancer ensuite la macro Remanier
VB:
Sub pretest()
Range("A1:A20") = "=""100""+ROW()&CHOOSE(MOD(ROW(),2)+1,"" ( GONCALVES PERREIRA CELINE) "",""( DUPONT CHRISTOPHE ) "")&""1000""-ROW()"
Range("A1:A20") = Range("A1:A20").value
End Sub
Sub Remanier()
Dim cel As Range, Rng As Range, pr$, no$
Set Rng = Range(Cells(1, 1), Cells(Rows.Count, 1).End(3))
For Each cel In Rng
x = INVERSEMOT(cel.text)
pr = Split(x)(0) & "."
no = Replace(VBA.Trim(Mid(x, Len(pr), 9 ^ 9)), " ", "-")
cel.Offset(, 1) = pr & no & "@test.fr"
Next
End Sub
Function INVERSEMOT(Mot$) As String
Dim x, a$, b$
a = Split(Split(Mot, ")")(0), "(")(1): b = StrReverse(a)
For Each x In Split(b)
INVERSEMOT = LCase(Trim(INVERSEMOT & " " & StrReverse(x)))
Next
End Function
Pendant ce temps, je vais égoutter mes pâtes ;)
 

Discussions similaires

  • Question
Microsoft 365 Nom et prénom
Réponses
3
Affichages
278