Détection NOM Prénom ne marche pas

Bonjour à tous,

Dans l'objectif de détecter les noms et prénom de pleins de cellules qui sont de type "NOM Prénom", j'ai écrit la fonction VBA ci dessous mais rien ne se passe. Pourtant aucun message d'erreur ne m'est renvoyé.

Sauriez-vous d’où vient le problème ?

For ligne = 30 To 500

If Cells(ligne, 1) = "([A-Z'ÔË]{2,}\s*-?)+" & "([A-Z][a-zëéèô]+\s*-?)+" Then
compteur = compteur + 1
Cells(compteur + 1, "P") = Cells(ligne, 1)
End If

Je vous remercie,

Adevy.

Bonjour

Ton code fait ce qu'on lui demande

En gros

Tu vérifies dans chaque cellule de A30 à A500 si elle contient seulement ton texte "([A-Z'ÔË]{2,}\s*-?)+" & "([A-Z][a-zëéèô]+\s*-?)+" et dans l'affirmative (ce qui ne doit pas arriver) copie cette cellule en colonne P

Bonsoir,

J'imagine que tu as voulu taquiner les regexp !

C'est inutile : Tu peux seulement utiliser les fonctions personnalisées sans les modifier.

Mais surement pas en lancer quelques bribes en l'air pour voir si en retombant ça fait quelque chose !

A+

Mais je ne comprends pas comment intégrer les éléments de la fonction alors ?

Que dois-je rajouter pour que cela marche ?

Je vous remercie,

Adevy

Quelle fonction ?

Je n'ai pas vu de fonction avec cette expression :

"([A-Z'ÔË]{2,}\s*-?)+" & "([A-Z][a-zëéèô]+\s*-?)+"

D'où sors tu ça ?

Plutôt que ce que tu fais qui ne marche pas, qui ne nous apprend pas grand chose, ça serait peut-être bien également que tu dises quel résultat tu attends.

Fournir un petit classeur démo.

A+

Bonjour Adevy, le fil

Je suppose que tu voulais utiliser les expressions régulières

Mais ça ne s'utilise absolument pas comme ça

Voir ce lien explicatif

A+

Merci pour vos réponses.

Vous trouverez sur ce poste un fichier exemple de ce que j'ai.

Je veux comprendre comment utiliser les deux fonctions ci-dessous :

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

Mon objectif est que en A2, A3, A4 etc s'inscrivent les noms et prénoms.

Je ne comprends pas comment on intègre ces fonctions dans vba ?

Je vous remercie.

17nomprenom.xlsm (7.70 Ko)

Bonsoir,

Un exemple en pièce jointe (J'ai renommé tes fonctions RegNOM et RegPRENOM)

Nota : Ces fonctions sont un peu étriquées en particulier pour les prénoms, on peut les travailler sans peine.

A+

EDIT :

En pièce jointe un autre classeur qui utilise d'autre format regex avec en feuille 2 une amélioration de la récupération de prénom.

Important :

Pour utiliser les regex vous devez aller dans VBA et cocher

"Microsoft VBScript Regular Expression 5.5" ... Dans le menu VBA Outils > Références

22regex-vg1.xlsm (41.31 Ko)

Merci beaucoup mais cela ne correspond pas à l'exemple que j'ai mis en ligne (ou plusieurs styles de données sont mélangées) et impossible d'accéder au macro.

Bonsoir,

Il n'y a aucun exemple dans ton fichier !

Relire mon poste précédent pour le fonctionnement j'ai ajouté une note importante !

A+

Merci, je comprends comment fonctionne les fonctions lorsqu'elles sont utilisées seules. Mais dans le cadre de mon fichier exemple, l'objectif est que les noms et prénoms, en restant seulement sur la fonction VBA, s'ajoute en A2, A3, A4, sans tenir compte des autres données.

Bonsoirn

Ton fichier exemple est complètement vide : De toute façon vide ou pas y a pas 36 moyens d'utiliser ces fonctions, ou alors il va falloir que tu explique mieux ton problème :

Tu montres ton fichier de départ et tu t'arranges pour nous montrer le début du résultat à obtenir (sans macro) et on cherchera par quel moyen y arriver. Mais pour l'instant je pense que tu ne cherche pas dans la bonne direction.

A+

Oups, toute mes excuses pour ce quiproquo ! je ne m'étais pas rendu compte que le fichier que j'avais mis en ligne était vide !

Voici de nouveau un fichier exemple (qui marche), avec dedans une colonne en E de données à traiter pour que certaines aillent en A (j'ai commencé à remplir la colonne A manuellement pour qu'apparaisse le résultat que je souhaite.

Encore désolé pour cet "incident" et merci de votre patience.

Adevy.

48nomprenom.xlsm (14.66 Ko)

Bonjour,

Voir fichier joint

Nota ; il pourrait être utile de rajouter la virgule dans le PATTERN des prénoms :

"([A-Z][a-z,ëéèô]+\s*-?)+"

A+

C'est parfait !!!

Merci beaucoup !!!!

Juste deux petites question pour être sur de bien comprendre le fonctionnement :

- que signifie le "len" dans :

If Len(S) > 0 Then

- Comment faire en sorte que la condition soit SI Nom + Prénom (et pas seulement Nom comme dans le cas ci-dessous) ?

For i = 15 To 500
S = NOM(Cells(i, 1))
If Len(S) > 0 Then

C'est vraiment génial, merci beaucoup !!

Bonjour,

On charge NOM dans une variable (S) et on n'affiche PRENOM que s'il y a un NOM si Len(S) n'est pas =0

sinon on va récupérer tous les strings indésirables dans la colonne prénoms.

Comment faire en sorte que la condition soit SI Nom + Prénom (et pas seulement Nom comme dans le cas ci-dessous)

Je ne comprends pas la question. Peux tu reformuler différemment ? Quel est l'objectif ?

A+

En fait je voulais savoir s'il était possible de charger NOM + Prénom dans une variable, et non seulement se contenter du Nom.

Merci

Private Sub CommandButton1_Click()
For i = 1 To 19
S = NOM(Cells(i, 1))
If Len(S) > 0 Then
S = PRENOM(Cells(i, 1)) & " " & S
Cells(i, 8) = S
End If
Next
End Sub

Adapté à l'ensemble tu peux faire :

Private Sub CommandButton1_Click()
   Set mondico = CreateObject("Scripting.Dictionary")
For i = 1 To 500
S = NOM(Cells(i, 1))
If Len(S) > 0 Then
S = PRENOM(Cells(i, 1)) & " " & S
     mondico(S) = ""
End If
Next
[H1].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
End Sub

A+

Adevy a écrit :

Merci pour vos réponses.

Vous trouverez sur ce poste un fichier exemple de ce que j'ai.

Je veux comprendre comment utiliser les deux fonctions ci-dessous :

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

Mon objectif est que en A2, A3, A4 etc s'inscrivent les noms et prénoms.

Je ne comprends pas comment on intègre ces fonctions dans vba ?

Je vous remercie.

Bonjour,

1 Il faut aller dans VBA et ajouter un module.

2 Copier les 2 fonctions dans ce module :

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

3 dans la cellule B, il faut appeler la fonction Nom :

=nom(A2)

4 dans la cellule C, il faut appeler la fonction Prénom (attention au é) :

=prénom(A2)

5 Si le é de Prénom pose un problème, il suffit de renommer la fonction

et de modifier la ligne commençant par if

Function Prenom(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 Prenom = a(0) Else Prenom = ""
    End Function

J'ai testé avec

MICHEL PaulMICHELPaul

Paul MICHEL MICHEL Paul

MICHEL HENRY Caroline MICHEL HENRY Caroline

Caroline MICHEL HENRY MICHEL HENRY Caroline

Rechercher des sujets similaires à "detection nom prenom marche pas"