SQL/REquête - rechercher chaîne de caractère dans cellule

Bonjour,

pourriez vous m'aider sur un sujet?!

J'ai Excel 2016 sur mon ordi, à titre d'info.

Feuil1:

J'ai une liste qui contient 200 noms de marques (Coca-cola, Nestlé, etc.) qui constitue une blacklist de marque.

Mon objectif est de vérifier si ces noms issus de la Blacklist se retrouvent dans ma seconde liste des actifs de différents fonds dans la Feuil2.

La seconde liste indique des fonds financiers et des marques rattachés à ces fonds.

L'idée c'est de 'matcher' les deux listes pour vérifier si les noms de marques de la première liste apparaissent sur la seconde liste et il faudrait afficher sur une colonne supplémentaire du second volet (colonne D: contient oui ou non un nom de la Blacklist) si oui ou non la ligne contient le nom de la liste de base.

Voir en pièce jointe le code test que l'on m'a proposé.

Malheureusement, ce dernier a quelques problèmes:

*dans la feuille 2, 'yùm' devrait indiquer 'oui' dans la colonne D (accent et sans accent ne devrait pas poser de problème).

*et quand j'enlève le tiret (-) de la liste de base pour Coca-cola par exemple, et je teste la requête, il ne reconnait pas le nom non plus..

*Aussi, si je rajoute par exemple 'coca-cola tm' comme nom d'actif (colonne C de la feuille 2), la requête ne reconnait pas la dénomination 'coca-cola'.

Or je cherche à avoir une requête qui reconnait la présence d'une chaine de caractères qui a quelque part dans sa cellule le mot 'coca-cola', avec accent, sans accent, avec des mots en plus etc.

Si vous avez des propositions pour une amélioration de ce code ou un autre code VBA à appliquer, je suis preneuse!!

Ce serait super aussi si avec le code, on pourrait me donner une petite explication du code, cad expliquer à quoi servent les différentes lignes de code!

Merci pour votre aide, bonne journée

18juliak-test.xlsm (19.73 Ko)

bonjour,

une proposition

Sub test()
    Set sh1 = Sheets("Feuil1")
    Set sh2 = Sheets("Feuil2")
    rw1 = sh1.Cells(Rows.Count, "B").End(xlUp).Row
    rw2 = sh2.Cells(Rows.Count, "C").End(xlUp).Row

    For i = 2 To rw2
        b = sansaccent(sh2.Cells(i, "C"))
        b = Replace(b, "-", " ")
        tb = Split(b, " ")
        For k = LBound(tb) To UBound(tb)
            For j = 2 To rw1
                a = sansaccent(sh1.Cells(j, "B"))
                If Not IsError(Application.Search(tb(k), a)) Then
                    sh2.Cells(i, "D") = "oui"
                    j = 10000
                    Exit For
                Else
                    sh2.Cells(i, "D") = "non"
                End If
            Next j
            If j = 10000 Then Exit For
        Next k
    Next i
End Sub

Function sansaccent(texte)
    T = texte
    carin = "áàâäãåéèêëíìîïóòôöõðúùûüÿýçïë"
    carout = "aaaaaaeeeeiiiioooooouuuuyycie"
    For i = 1 To Len(carin)
        T = Replace(T, Mid(carin, i, 1), Mid(carout, i, 1))
    Next i
    sansaccent = T
End Function

Bonjour,

merci pour ton retour.

En effet ton code m'a permis de régler le problème d'ajout d'une suite de caractère avant ou après le mot mais lorsque j'ajoute un accent sur une lettre ou encore quand j'enlève un tiret (par exemple si j'inscris 'yùm' et non 'yum', ou alors 'cocacola' au lieu de 'coca-cola', le code en reconnait pas qu'il s'agit bel et bien de la même marque).

Est-ce que cette rectification peut être intégré dans le code?

Merci d'avance

re-bonjour,

une solution pour le cas du -.

je ne suis par contre pas parvenu à reproduire ton problème avec yum. Chez moi cela fonctionne.

Sub test()
    Dim tm()
    Set sh1 = Sheets("Feuil1")
    Set sh2 = Sheets("Feuil2")
    rw1 = sh1.Cells(Rows.Count, "B").End(xlUp).Row
    rw2 = sh2.Cells(Rows.Count, "C").End(xlUp).Row
    ReDim tm(2 To rw1)
    For i = 2 To rw1
        tm(i) = Replace(sansaccent(sh1.Cells(i, "B")), "-", "")
    Next i
    For i = 2 To rw2
        b = sansaccent(sh2.Cells(i, "C"))
        b = Replace(b, "-", " ")
        tb = Split(b, " ")
        For k = LBound(tb) To UBound(tb)
            For j = 2 To rw1
                a = tm(j)
                If Not IsError(Application.Search(tb(k), a)) Then
                    sh2.Cells(i, "D") = "oui"
                    j = 10000
                    Exit For
                Else
                    sh2.Cells(i, "D") = "non"
                End If
            Next j
            If j = 10000 Then Exit For
        Next k
    Next i
End Sub

Bonjour,

merci pour ton message et ton aide.

Or je rencontre le problème suivant après avoir intégré la requête:

L'entreprise de la feuille 2 'Abbvie Inc' va être indiqué comme étant sur la liste noire de la feuille 1 or elle ne l'ai pas, c'est seulement je pense qu'elle contient le mot 'inc' dans son nom qui lui doit être rattaché à un nom de la liste noire en feuille 1..

Ducoup les résultats sont complètement biaisés, comment contourner ce problème?

En d'autres termes, le nom d'entreprise 'cherry coca' ne doit pas être indiqué comme étant sur la liste noire de la feuille 1 si le nom 'coca-cola' y est, évidemment..

J'espère que c'est claire, comme avec cette requête, Ducoup toutes mes entreprises sont soi disant en liste noire car elles comprennent à un moment donné ou un autre le mot 'inc' ou 'sa' qui lui est dans certains noms de la liste noire

Je serais très reconnaissante pour un peu d'aide

Aussi, j'ai plus de 4000 noms d'entreprises à tester sur ma feuille 2, et quand je fais tourner la requête, le fichier beuge complètement, Excel se ferme, le fichier est corrompu et je ne peux pas récupérer le fichier après coup. Enfin bref, y a t il une solution à ça?

Merci d'avance

Peut-être que une requête qui prend les 4 premières lettres du nom de l'entreprise pourrait mieux fonctionner?!

Bonsoir,

une nouvelle version (qui intègre une liste des caractères à ne pas prendre en compte tels que tm ou Inc, liste à compléter par tes soins).

ceci dit la solution n'est pas sans faille, et demande donc une vérification dans tous les cas.

10juliak-test.xlsm (22.05 Ko)

bonjour,

version testant les 4 premiers caractères.

pas sans faille non plus, ...

Bonjour,

la requête ne fonctionne pas du tout.. je ne comprends pas

Voir fichier en pièce jointe: l'entreprise Apple est indiqué comme 'oui' en blacklisté or elle n'est pas sur la liste

Merci d'avance

Bonjour,

la version testant les 4 premiers caractères semblent mieux marcher mais après avoir fait des tests, il me semble que le requête cherche les 4 premiers caractères du nom de l'entreprise de la blacklist n'importe ou dans le nom de l'entreprise de la feuille 2!

Par exemple 'American Express' est blacklisté avec la requête car la chaîne de caractère 'Amer' est dans un des fonds de la blacklist.. je pense.

Il faudrait que les 4 premiers caractères du nom de la blacklist (feuille 1) se remanifeste dans les 4 premiers caractères du nom de l'entreprise du fond de la feuille 2 pour que ce soit juste!

Aussi, est-il possible de faire sortir de la requête le nom de l'entreprise blacklisté et non pas un 'oui' ou un 'non' ??

Merci d'avance

bonjour,

voici, j'ai supprimé les doublons de la blacklist et adapté le code, pour la version avec exclusion de caractères

et version 4 caractères

Bonjour,

merci pour la version 4 car,

hehe encore un petit hic: l'entreprise 'T MOBILE' de la feuille 2 n'a pas été détecté par la requête, or elle est bien sur la blacklist mais avec un tiret: 'T-MOBILE'.

Est ce possible d'intégrer une condition de ne pas prendre en compte les espaces et les tirets?

Il me semblait que c'était déjà dans le code..

Aussi, problème avec 'bank of america' qui est mis en blacklist car la requête reconnait que 'bank' (les premiers caractères) et y associe la 'bank of jerusalem': il faudrait ajouter une formule dans une colonne à la suite de la requête.

Une formule qui permettrait de vérifier si le nom de la colonne C de la feuille 2 contient les 10 premiers caractères du nom de la colonne D de la feuille 2 pour faire une vérif supplémentaire

Thanks a lot

Bonjour,

je t'ai envoyé 2 fichiers,

le test sur les 4 premiers caractères est dans le fichier Fichier Test v2 4car.xlsm, dans ce fichier, je n'ai pas le problème que tu mentionnes.

Bonjour,

merci pour la version 4 car,

hehe encore un petit hic: l'entreprise 'T MOBILE' de la feuille 2 n'a pas été détecté par la requête, or elle est bien sur la blacklist mais avec un tiret: 'T-MOBILE'.

Est ce possible d'intégrer une condition de ne pas prendre en compte les espaces et les tirets?

Il me semblait que c'était déjà dans le code..

Aussi, problème avec 'bank of america' qui est mis en blacklist car la requête reconnait que 'bank' (les premiers caractères) et y associe la 'bank of jerusalem': il faudrait ajouter une formule dans une colonne à la suite de la requête.

Une formule qui permettrait de vérifier si le nom de la colonne C de la feuille 2 contient les 10 premiers caractères du nom de la colonne D de la feuille 2 pour faire une vérif supplémentaire

Thanks a lot

Rechercher des sujets similaires à "sql requete rechercher chaine caractere"