Formule pour séparer deux noms

Sylvie64

XLDnaute Occasionnel
Bonsoir,

J'ai une phrase avec deux noms de familles, j'aimerai séparer le deuxième nom.
Comme l'exemple ci-joint, ce qui se trouve en rouge doit être dans une autre colonne.

Merci pour votre aide.

Sylvie
 

bika

XLDnaute Nouveau
Re : Formule pour séparer deux noms

Bonjour

Une solution (à coller en E2 et à valider de façon matricielle ctrl+shift+entrée):
Code:
=SUPPRESPACE(STXT(D2;MIN(SI(EXACT(MAJUSCULE(STXT(D2;LIGNE($A$15:$A$260);6));STXT(D2;LIGNE($A$15:$A$260);6))*LIGNE($A$15:$A$260)>0;EXACT(MAJUSCULE(STXT(D2;LIGNE($A$15:$A$260);6));STXT(D2;LIGNE($A$15:$A$260);6))*LIGNE($A$15:$A$260);99));99))

Cette solution repère la première séquence de 6 caractères consécutifs que le passage en majuscule ne modifie pas (cad soit des espaces, °,& soit des caractères en majuscules (c'est eux que je cherche)) au delà du 15° caractère.

Contraintes:le nom de famille doit faire au moins deux caractères et doit être au delà du quinzième caractère, il ne faut pas qu'il y ait de trop longues séquences de caractères spéciaux dans la première partie (sinon il faudrait augmenter le paramètre qui est à 6 dans les fonctions stxt).
 

david84

XLDnaute Barbatruc
Re : Formule pour séparer deux noms

Bonjour,
ci-joint une fonction personnalisée à tester et probablement à développer selon d'autres exemples non présents dans le fichier test :
Code:
Function SepNom(c As String) As String
Dim oRegExp As Object, occ As Object
Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
.Global = True
    .Pattern = "([A-Z]{2,}.+°.+[^A-Z]{2,})([A-Z]{2,}.+)"
    If .test(c) Then
        Set occ = .Execute(c)
        SepNom = .Replace(c, occ.Item(0).submatches(1)): Exit Function
    End If
    
    .Pattern = "([^A-Z]+)([A-Z]{2,}.+)"
    If .test(c) Then
        Set occ = .Execute(c)
        SepNom = .Replace(c, occ.Item(0).submatches(1)): Exit Function
    End If
End With
End Function
A+
 

Statistiques des forums

Discussions
312 413
Messages
2 088 199
Membres
103 764
dernier inscrit
nissassa