Extraire Nom et Prenom et nom de jeune fille

Bonjour,

Dans des releves genealogiques j'ai ceci:

ARNOULT (LERMIGNY) Jacqueline

ARNOULT Camille

ARNOULT-JEAN (PETIT) Marie

ARNOUX Jacques Gaston

ARONICU Jean

ARRECGRAS Alain

ARZIZ FERNANDAZ Maria

ACER Abramo

ASTERIX Germaine

ATTORD René

AUBERTA Julien

AUBERTIN Michel

AUBERTON (FRANCOIS) Léontine

BARATIN (DA CONCEICAO CORREILLA) Etelvina

(AFFLARDIN) Charlette Geneviève Marguerite

Cela ce lit comme suit:

NOM Prenom (NOM DE JEUNE FILLE)

Le NOM et NOM DE JEUNE FILLE sont toujours majuscules. Le prenom est toujours en minuscule. LE NOM peut parfois etre composé. Certaines fois le NOM DE JEUNE FILLE, comme le dernier exemple est egalement le NOM.

En fait je cherche a extraire le tout dans trois colonnes:

NOM

Prenom

NOM DE JEUNE FILLE

J'ai reussi a isoler le NOM DE JEUNE FILLE qui est entre parenthese avec cette formule:

=STXT(A2;TROUVE("(";A2)+1;TROUVE(")";A2)-TROUVE("(";A2)-1)

Est ce qu'il est possible de tout faire en une seule operation ou est ce que je dois faire differentes formules.

Merci.

Bdsa

Bonjour

en allant sur DONNÉE puis CONVERTIR, vous laissé délimité, puis dans le tableau d’après vous choisissez espace!!! ca ne regle pas votre problème?

Bonjour,

Non car cela va dependre du NOM si il est composé ou pas ou s'il y a plusieurs prenoms ou non. Je viens d'essayer et je me retrouve avec des NOMS dans les prenoms etc...

Bdsa

Bonsoir,

Fournis un classeur modèle avec un échantillon couvrant tous les cas possibles, et on pourra te proposer une procédure pour faire la répartition que tu souhaites, soit sous forme de macro ordinaire, soit sous forme de fonction personnalisée.

Cordialement.

Bonsoir,

Voici un classeur modèle de 158 noms. Les NOMS entre () sont les noms de jeunes filles. Merci.

Cordialement,

Bdsa

30classeur2.xlsx (11.46 Ko)

Procédure à tester :

Sub NmPnmNjf()
    Dim Tf(), npf, n%, i%, j%
    With ActiveSheet
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        ReDim Tf(1 To n, 2)
        For i = 1 To n
            npf = Trim(.Cells(i, 1))
            If InStr(npf, "(") Then
                npf = Split(Replace(npf, ")", "("), "(")
                Tf(i, 2) = Trim(npf(1))
                npf(1) = ""
                For j = 0 To UBound(npf)
                    npf(j) = Trim(npf(j))
                Next j
                npf = Trim(Replace(Join(npf), "  ", " "))
            End If
            npf = Split(npf)
            For j = 0 To UBound(npf)
                Select Case Asc(Mid(npf(j), Len(npf(j)), 1))
                    Case 65 To 90
                        Tf(i, 0) = Tf(i, 0) & " " & npf(j)
                        npf(j) = ""
                End Select
            Next j
            Tf(i, 0) = Trim(Tf(i, 0))
            npf = Trim(Join(npf))
            Tf(i, 1) = npf
        Next i
        With .Range("B1:D" & n)
            .Value = Tf
            .Columns.AutoFit
        End With
    End With
End Sub

Cordialement.

51bdsa-classeur2.xlsm (24.46 Ko)

Wow !!! c'est exactement ce que je cherchais a avoir comme résultat. C'est tout simplement génial.

Merci encore d'avoir consacré de votre temps a réaliser cette macro.

bdsa


Je vais tester la procédure sur mon fichier complet. Merci

Bdsa


Bonsoir,

Je viens d'essayer sur un fichier de 1600 noms et j'obtiens une erreur d’exécution 5 soit Argument ou appel procédure incorrect. Le débogage stoppe sur :

Select Case Asc(Mid(npf(j), Len(npf(j)), 1))

Merci.

Bdsa

Bonjour,

J'ai finalement trouvé le pourquoi du message d'erreur. en fait dans certaines lignes j'ai parfois des lignes comprenant deux entre parenthèses:

BOBOU (MADAME) (DURAND) Jean

La macro stoppe systématiquement sur ces lignes comprenant deux noms entre (). Lorsque je lance le débogage, je ne vois pas quelle est la ligne qui présente le problème... Y-a-t-il un moyen de connaitre le no de ligne ou s 'arrête la macro ?

Merci.

Bdsa

Essayer les modifs suivantes :

Sub NmPnmNjf()
    Dim Tf(), npf, n%, i%, j%
    With ActiveSheet
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        ReDim Tf(1 To n, 2)
        For i = 1 To n
            npf = Trim(.Cells(i, 1))
            If InStr(npf, "(") Then
                npf = Split(Replace(npf, ")", "("), "(")
                Tf(i, 2) = Trim(npf(1))
                npf(1) = ""
                For j = 0 To UBound(npf)
                    npf(j) = Trim(npf(j))
                Next j
                npf = Trim(Replace(Join(npf), "  ", " "))
            End If
            npf = Split(npf)
            On Error GoTo Except
            For j = 0 To UBound(npf)
                Select Case Asc(Mid(npf(j), Len(npf(j)), 1))
                    Case 65 To 90
                        Tf(i, 0) = Tf(i, 0) & " " & npf(j)
                        npf(j) = ""
                End Select
            Next j
            Tf(i, 0) = Trim(Tf(i, 0))
            npf = Trim(Join(npf))
            Tf(i, 1) = npf
Rtn:
            On Error GoTo 0
        Next i
        With .Range("B1:D" & n)
            .Value = Tf
            .Columns.AutoFit
        End With
    End With
    Exit Sub
Except:
    For j = 0 To 2
        Tf(i, j) = Empty
    Next j
    ActiveSheet.Cells(i, 1).Interior.Color = vbYellow
    GoTo Rtn
End Sub

L'exécution se poursuivra mais l'assemblage provoquant erreur ne sera pas traité et la cellule en A colorée en jaune.

Cordialement.

Bonjour,

Je vais tester cela de suite. je vous reviens.

Merci.

bdsa


Génialllll !! Cela fonctionne parfaitement. Merci à vous deux pour avoir pris de votre temps.

Bonne soirée.

Bdsa

Rechercher des sujets similaires à "extraire nom prenom jeune fille"