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

  • Initiateur de la discussion Initiateur de la discussion Axsis93
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Dernière édition:
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+
 
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 😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour