Trouver toutes les cellules contenant une chaine de caractère (des prénoms)

Bonjour,

Malgré de nombreuses recherches je reste sans solution face à un souci qui pourtant ne me parait pas si complexe.

J'ai une colonne contenant des cellules avec divers informations. Parmi elles, se trouve des contacts avec un prénom et un nom que je souhaite justement repérer comme contenant des contacts.

J'ai une petite base de données de prénoms (en fait une colonne dans une autre feuille de mon classeur)

Voici ce que je souhaite faire: repérer dans une seconde colonne toutes les cellules de ma première colonne cellules contenant l'un des prénoms de ma bbd prénoms.

Le souci c'est que les dites cellules ne contiennent pas que des prénoms mais aussi d'autre info comme les noms et autre...

Merci pour votre aide.

bonjour

un fichier ou une maquette representative serait bienvenue

cordialement

Bonjour Tulipe_4,

Voici un extrait du fichier en question.

bonjour

un essai sans grande conviction , une solution VBA est a privilégier (12500lignes à compulser )

35ootilease.xlsx (374.06 Ko)

je n'ai fait que pour qques lignes la formule peut s'incrementer

cordialement

Bonjour à tous,

une proposition en vba.

Plutôt qu'un marquage ok/nok j'ai préféré noter le prénom relevé.

Ca te permettra de lever les faux positifs plus facilement. Par exemple Paris, France, Brand sont des prénoms. Sans parler de "Les"

Fion aussi d'ailleurs. Ca ne doit pas être facile à porter tous les jours en france

Par ailleurs j'ai modifié ta liste. Tous les prénoms avaient une espace finale...

eric

J'ai encore essayé différentes combinaisons des formules, "Trouve", "Recherche", "NB.SI", mais cela ne fonctionne pas, c'est un vrai cauchemar

Boinjour à tous,

Pour visualiser les correspondances, essaie ceci :

le regex reste perfectible

Le contenu de tes cellules est tronqué, revoie la hauteur de tes lignes

Option Explicit
Sub test()
Dim r As Range, rng As Range, myPtn As String, m As Object
    With Sheets("prenoms")
        myPtn = Join$(Application.Transpose(.Range("a2", .Range("a" & Rows.Count).End(xlUp)).Value), "|")
        'myPtn = Join$(Application.Transpose(.Range("a2", .Range("a2").End(xlDown)).Value), "|")
    End With
    With Sheets("Sources")
        Set rng = .Range("c2", .Range("c" & .Rows.Count).End(xlUp))
    End With
    With CreateObject("VBScript.RegExp")
        .Global = True
        .IgnoreCase = True
        .Pattern = "\b(" & myPtn & ")\b"
        For Each r In rng
            For Each m In .Execute(r.Value)
                r.Characters(m.firstindex + 1, m.Length).Font.Color = vbRed
            Next
        Next
    End With
End Sub

ou cela :

Sub test1()
Dim r As Range, rng As Range, myPtn As String, m As Object
    With Sheets("prenoms")
        'myPtn = = Join$(Application.Transpose(.Range("a2", .Range("a" & Rows.Count).End(xlUp)).Value), "|")
        myPtn = Join$(Application.Transpose(.Range("a2", .Range("a2").End(xlDown)).Value), "|")
    End With
    With Sheets("Sources")
        Set rng = .Range("c2", .Range("c" & .Rows.Count).End(xlUp))
    End With
    With CreateObject("VBScript.RegExp")
        .Global = True
        .IgnoreCase = True
        .Pattern = "\b(" & myPtn & ")\b"
        For Each r In rng
            For Each m In .Execute(r.Value)
                r(, 2).Value = r(, 2).Value & Chr(32) & m.Value
            Next
        Next
    End With
End Sub

As-tu pris en compte les remarques d'eriiic ?

klin89

Bonjour à tous

Une version PowerQuery

Les noms composés avec espace posent problème...

29reperprenomspq.xlsx (394.43 Ko)

bonjour

un essai sans grande conviction , une solution VBA est a privilégier (12500lignes à compulser )

ootilease.xlsx

je n'ai fait que pour qques lignes la formule peut s'incrementer

cordialement

Bonjour,

Merci Tulipe_4 pour ton aide et le temps que tu as consacré à me répondre. Hélas, cela ne correspond pas à mon besoin car si j'ai bien compris ton tableau il me faut désigner manuellement la cellule comme étant un contact, chose que j’essaie justement t'automatiser.

Bonjour à tous,

une proposition en vba.

Plutôt qu'un marquage ok/nok j'ai préféré noter le prénom relevé.

Ca te permettra de lever les faux positifs plus facilement. Par exemple Paris, France, Brand sont des prénoms. Sans parler de "Les"

Fion aussi d'ailleurs. Ca ne doit pas être facile à porter tous les jours en france

Par ailleurs j'ai modifié ta liste. Tous les prénoms avaient une espace finale...

eric

Merci Eriiic, c'est géniale, mais je serai incapable d'exploiter ton tableau car je n'y connais rien en VBA

Je ne l'ai pas précisé au départ, mais je me demandai si il était possible ou non de le faire uniquement avec des formules (sans Code).

Bonjour à tous

Une version PowerQuery

Les noms composés avec espace posent problème...

78chris,

C'est parfait! Hélas, comme pour la proposition d'eriiic je ne maitrise pas le code. Du coup c'est encore plus rageant pour moi de voir que vous avez des solutions mais que je ne peux pas les utiliser .

Merci à Eriic et toi pour votre aide pour ces pistes. Je crois que je vais devoir m'y mettre cette fois et apprendre à utiliser ces outils...

C'est parfait! Hélas, comme pour la proposition d'eriiic je ne maitrise pas le code. Du coup c'est encore plus rageant pour moi de voir que vous avez des solutions mais que je ne peux pas les utiliser .

Bonjour,

Ce n'est pas une fatalité ! Il te suffit de creuser un peu pour les comprendre et le tour est joué...

C'est parfait! Hélas, comme pour la proposition d'eriiic je ne maitrise pas le code. Du coup c'est encore plus rageant pour moi de voir que vous avez des solutions mais que je ne peux pas les utiliser .

Bonjour,

Ce n'est pas une fatalité ! Il te suffit de creuser un peu pour les comprendre et le tour est joué...

Effectivement, je vais me retrousser les manches et plonger dedans...

Mais en attendant, je me demande si c'est possible uniquement avec des combinaisons de formules...

bonjour

je ne pense pas car la formule (la mienne) extrait un fatra de valeurs plausibles mais non valables dans le cadre d'une recherche nom prénom ;meme en triturant du Majuscule ;EXACT .....

et comme je l'ai precisé ,le fichier s'en trouve vraimant trop lourd (12550 val a compulser ) la matricielle rendue indispensable fait ramer le bouzin

RE tous

Pour PowerQuery il n'y a aucun code : on utilise juste des options des menus et quelques formules, PowerQuery étant beaucoup riche qu'Excel pour traiter des chaînes...

  • j'ai numéroté les lignes puis découpé en mots les données brutes (sur l'espace) ce qui démultiplie les lignes
  • j'y ai ajouté une colonne de 1 pour pouvoir faire une pseudo relation avec les la liste des prénoms
  • pour les prénoms j'ai donc aussi ajouté une colonne de 1
  • en croisant les 2 sur la colonne de 1 j'obtiens un produit cartésien de tous les mots de données brutes et de tous les prénoms
  • sur chaque ligne j'ajoute une colonne avec une formule qui teste si le prénom et le mot coïncident (espaces éventuels supprimés et comparaison en majuscules) et le cas échéant reporte le prénom
  • reste à filtrer les lignes contenant un prénom dans cette colonne, supprimer les colonnes devenues inutiles et trier sur la numérotation faite en 1er
  • le résultat dans Excel utilise un MFC pour repérer les cas ou on a deux réponses qui pourraient coïncider avec un prénom composé

Bonjour,

quant à la macro tu as juste à coller tes données en D, et à cliquer sur le bouton 'Marquer'

eric

Rechercher des sujets similaires à "trouver toutes contenant chaine caractere prenoms"