XL 2016 Recherche d'une chaine de mots dans un tableau, et voir si ça matche

Axsis93

XLDnaute Nouveau
Bonjour à tous,

Après trois jours de recherches, j'en viens à vous pour trouver une solution.

J'essaye de trouver le moyen de rechercher le nombre de fois qu'apparaissent un ensemble de mots (présents dans une phrase) dans une colonne.
Si j'obtient le chiffre (5) alors je dis "Oui". Sinon (ou si le mot "none" apparait selon mon critère), alors je dis "Non".

Voici un tableau en PJ avec deux onglets.
Le premier onglet contient mon tableau de recherche.
Le second onglets contient toutes les possibilités (combinaisons possibles).

Par exemple sur l'onglet "Calculs", ma ligne : "Ville / court / couple / lev / Entre 25 000 et 30 000" sur ma colonne "C0"
Je souhaite savoir si dans mon onglet "Tableau" dans la colonne "C0" si tous les critères de ma ligne ci-dessus sont remplis.
Si j'ai bien les 5 valeurs, alors je dis "Oui", sinon, je dis "Non".

Un autre exemple plus concret, ma cellule B2 de l'onglet "Calculs" doit répondre à "Non". Car la cellule en B2 ne rempli pas les critères "Polyvalente / court / solo / boite auto / -15000" du tableau de la colonne "C0" de l'onglet "Tableau". En effet, le mot "Polyvalente" est à "none" en B2. Donc je n'aurai pas les 5 critères remplis.

J'espère avoir été clair.
Merci pour votre aide précieuse :)

Bonne journée à tous.
 

Pièces jointes

  • arbre compatibilités test.xlsx
    22.3 KB · Affichages: 6
Dernière édition:

Paf

XLDnaute Barbatruc
Bonjour,

Si j'ai bien compris:

VB:
Sub Axsis93()
Dim Dico, i As Long, j As Long, TT, TC, Col As Integer, TTemp, TF
Dim WST As Worksheet, WSC As Worksheet
Set WST = Worksheets("Tableau")
Set WSC = Worksheets("Calculs")
Set Dico = CreateObject("Scripting.Dictionary")

TC = WSC.Range("A2:A" & WSC.Range("A" & Rows.Count).End(xlUp).Row)
ReDim TF(1 To UBound(TC, 1), 1 To 15)

For Col = 2 To 15
    Dico.RemoveAll
    TT = WST.Range(WST.Cells(2, Col), WST.Cells(WST.Cells(Cells.Rows.Count, Col).End(xlUp).Row, Col))
    For i = 1 To UBound(TT, 1)
        If TT(i, 1) <> "none" Then Dico(TT(i, 1)) = ""
    Next
    For i = 1 To UBound(TC, 1)
        TTemp = Split(TC(i, 1), " / ")
        For j = 0 To UBound(TTemp)
            If Dico.Exists(TTemp(j)) Then
                TTemp(j) = True
            Else
                TTemp(j) = False
            End If
        Next
        TF(i, Col) = IIf(TTemp(0) And TTemp(1) And TTemp(2) And TTemp(3) And TTemp(4), "Oui", "")
        Erase TTemp
    Next
Next

WSC.Range("B2").Resize(UBound(TF, 1), UBound(TF, 2)) = TF
End Sub

si on n'a pas de correspondance, j'ai préféré ne rien mettre dans les cellules pour que les "oui" soient plus visibles.

S'il faut absolument "non" quand il n'y a pas concordance, remplacer
VB:
TF(i, Col) = IIf(TTemp(0) And TTemp(1) And TTemp(2) And TTemp(3) And TTemp(4), "Oui", "")
par
VB:
TF(i, Col) = IIf(TTemp(0) And TTemp(1) And TTemp(2) And TTemp(3) And TTemp(4), "Oui", "Non")


A+
 

Axsis93

XLDnaute Nouveau
Merci beaucoup Paf pour ton aide.
Ca fonctionne parfaitement bien.

J'ai également (entre temps) trouvé une autre solution via formules, en mettant chaque label dans des colonnes distinctes et en faisant des "nb.si". Ca fonctionne aussi mais c'est moins propre que ta solution.

Merci et à bientôt ;)
 

Discussions similaires