Rechercher la présence d'une valeur issue d'une liste, dans un champs

Bonjour,

Je galère depuis un bon moment sur la possibilité de résoudre un besoin via excel.

Je vais essayer de l'exprimer clairement :

J'ai dans une colonne A des milliers de lignes, qui sont une chaîne de caractère issus d'une concaténation d'autres valeurs.

Soit ma listeA

J'ai dans des colonnes B, C, D qui sont justement des valeurs qui on servi pour cette concaténation (entre 20 et 500 lignes pour chacune)

Soit mes ListeB, ListeC, ListeD

La liste A contient donc des milliers de lignes sur ce format:

xxx_ListeBValeur3_xxx_ListeCValeur1_ListeDValeur50_xxx

xxx_ListeBValeur7_ListeDValeur33_xxx

xxx_xxx_xxx

xxxxxxxxxxx

ListeCValeur30_ListeBValeur1

Cette liste n'a donc pas de convention claire, elle contient parfois des éléments des listes B,C,D parfois pas.

Je cherche une formule qui me permettrait de "trouver" si la liste A contient ou non les éléments des listes B,C,D

Et idéalement, un peu comme un recherchev, populer 3 nouvelles colonnes E,F,G qui affiche la valeur trouvé ou non issue des listes B,C,D.

L'objectif derrière est de reconstituer une base de donnée de-concaténée, et d'identifier les chaines de caractères mal concaténées pour correction.

Quelqu'un à une idée ?

Merci !

Bonjour,

une proposition (à adapter à ton fichier probablement)

Sub aargh()
'macro qui vérifie dans les cellules de la colonne A, la présence de mots séparés
'par le caractère _ dans des listes de mots en colonne B,C et D

    Dim r, rg(1 To 3) As Range
    With Sheets("sheet1") '<- à adapter
        dl = .Cells(Rows.Count, 1).End(xlUp).Row
        t = .Cells(1, 1).Resize(dl, 1)
        For k = 1 To 3
            dll = .Cells(Rows.Count, k + 1).End(xlUp).Row
            Set rg(k) = .Cells(2, k + 1).Resize(dll - 1, 1)
        Next k
        ReDim r(1 To dl, 1 To 4)
        For i = 2 To dl
            s = Split(t(i, 1) & "_", "_")
            For j = LBound(s) To UBound(s)
                If s(j) <> "" Then
                    For k = 1 To 3
                        Set re = rg(k).Find(s(j), lookat:=xlPart, MatchCase:=False)
                        If re Is Nothing Then
                            nt = s(j)
                        Else
                            r(i, k) = r(i, k) & vbCrLf & s(j)
                            nt = ""
                            Exit For
                        End If
                    Next k
                    If nt <> "" Then r(i, 4) = r(i, 4) & vbCrLf & nt
                End If
            Next j
        Next i
        .Cells(1, 5).Resize(dl, 4) = r
    End With
End Sub
Rechercher des sujets similaires à "rechercher presence valeur issue liste champs"