Recherche toutes les lignes qui contiennent 3 mots clé cherchés

Bonjour à toutes et tous,

je butte sur un problème qui est le suivant :

je veux filtrer toutes les lignes d'une base de données qui contiennent 3 mots clé.

J'ai trouvé le fichier de Jacques Boisgontier, qui est tout à fait ce que je recherche, mis à part le nombre de mots clé.

En effet ce fichier est basé sur 1 mot clé, moi je voudrais y ajouter 2 autres mots clés qui doivent absolument se trouver sur la même ligne que le premier, c'est les trois ensemble ou rien.

Le fichier de JB ressort toutes les lignes qui ont le mot "Paris"( par exemple), mois je voudrais y ajouter une année et un mois, qui pourraient se trouver en colonne "A" et "B" dans la base de données.

J'ai essayé de modifier la formule en "A2" dans plusieurs version avec des (si), des (et) rien à faire je ne trouve pas la solution, alors si parmi vous quelqu'un aurait la bonne formule, en gardant la base du fichier de JB, dont je me suis inspiré pour mon projet, je suis preneur.

Je vous joins le fichier

Merci d'avance de votre aide

Cordialement

Dubdub22

Bonjour Dubdub22,

Voici le fichier de l'excellent JB qui est ici modifié en 2 choix possibles.

Soit avec OU tel qu'il existait, soit avec ET si la sortie est strictement égales aux saisies.

Bons tests, bonne continuation.

Bonjour,

Bonjour X Cellus

tu peux faire ceci (que l'on peut encore simplifier) :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:H2")) Is Nothing Then
    On Error GoTo tout
    Sheets(1).ListObjects(1).Range.AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("A1").CurrentRegion, CopyToRange:=Range("A5").CurrentRegion.Resize(1), Unique:=False
    Exit Sub
tout:
    ActiveSheet.ShowAllData
End If
End Sub

change les critères feuille2 zone colorée orange clair

13filtre-auto.xlsm (18.96 Ko)

Bonjour à tous

A priori Dubdub22, tu as confondu Filtre avancé standard et recherche de mot clé.

Puisque tu as 2016 avec PowerQuery intégré voici une solution qui permet de ne choisir que les périodes et villes existantes (listes déroulantes auto actualisées) et de filtrer en fonction des choix. On peut ne choisir qu'une des mentions

Bonsoir à tous les trois

Je vous remercie pour vos réponses, mais hélas aucune des trois solutions avancées ne correspondent à la solution recherchée, je m'explique:

Tout d'abord le fichier de JB c'est un filtre qui effectue une recherche par un mot clé sur toute la ligne dans les colonnes "" C, D, F "", et le mot clé se trouve en "D2" c'est la que se trouve mon souci, puisque moi ce que je cherche c'est avec 3 mots clé, je vous expliquerais ci-après les raisons.

Donc je vous explique pourquoi vos solutions ne correspondent pas.

X Cellus : les formules que tu as mis je les ai essayées, et cela ne donne rien, aucun mouvement, et lorsqu'il y en a, vous avez plusieurs années de mélangé.

Toutes ces formules je les avez déjà essayées, et j'ai obtenu les mêmes résultats.

78Chris et Steelson : Désolé , mais essayé de mettre un nom de ville dans la colonne des noms et cette ligne n'apparait pas lors du filtrage, c'est un filtrage par colonne.

Alors, maintenant je vous explique pourquoi je cherche une solution de filtrage a partir de trois mots clé:

J'ai un fichier qui représente + de trente colonnes et 8 000 lignes, en colonne "A" j'ai les années, en colonne "B" les mois, et à partir de la colonne "K" j'ai les noms de produits que je recherche et, qui sont affichés en désordre sur la ligne ( en désordre j'entend par là qu'il peuvent se trouver sur la ligne mais dans n'importe quelle colonne).

Le but et de rechercher les mois de ventes d'un produit, année par année, sur un arriéré de 7 ans (2012), alors j'ai trouvé le fichier de JB qui correspond tout a fait à ce qu'il me faut, (recherche du mot clé "Produit" sur toute la ligne), mais je suis obligé de changé le filtre manuellement pour les années, mais surtout pour les mois, et cela représente une perte de temps impensable, car c'est 12 fois par année et par produits (+ de 30 produits), comme je recopie et colle le résultat dans un autre document a chaque fois, c'est très long.

Voila je vous remercie quand de votre aide, même si cela n'est pas en adéquation avec mes attentes.

Je vais quand même continuer a essayer de trouver la solution.

Cordialement

Dubdub22

Donc cette solution fonctionnera ! avec ajout d'une colonne dans ta base de donnée.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1").CurrentRegion) Is Nothing Then
    On Error GoTo tout
    Sheets(1).ListObjects(1).Range.AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("A4").CurrentRegion, CopyToRange:=Range("A7").CurrentRegion.Resize(1), Unique:=False
    Exit Sub
tout:
    ActiveSheet.ShowAllData
End If
End Sub

On n'est pas loin du reste de ce sujet https://forum.excel-pratique.com/viewtopic.php?f=2&t=133132

22filtre-auto.xlsm (20.34 Ko)

A nouveau,

Tu as essayé uniquement avec OU (=OU) dans la formule mais pas avec ET (=ET).

Or avec ET j'ai bien le résultat filtré.

Salut dubdub22,

Salut les courageux ,

tu cherches 3 mots-clés par ligne dont

  • l'année en [A] = 1 nombre Integer donc ou une mise en forme d'une date ?
  • le mois en ['B] : même question ;
  • un nom de produit n'importe où à partir de [K].

Or donc

  • comment introduirais-tu ta recherche ? InputBox ?
  • une recherche sur 7 ans, OK mais quels sont les 3 mots-clés alors? Comprends pas!

Bref... pas aussi malin que les copains sans doute

A+

Bonjour,

Bonjour 78Chris,

J'ai découvert une nouvelle fonction !?

Mais tu la connais peut-être déjà ?

La requête Final peut se résumer à :

let
    Source = BD,
    // Table.FindText : Retourne toutes les lignes qui contiennent le texte donné dans la table
    Custom1 = Table.FindText(Source,ChoixVille),
    Custom2 = Table.FindText(Custom1,ChoixPériode)
in
    Custom2

Cdlt.

Re-bonsoir tout le monde

Hé bien chapeau, Steelson, c'est exactement ce que je cherchais, c'est formidable, tu vas me faire gagner beaucoup de temps.

Pour X cellus désolé mais avec =ET( cela ne fonctionne pas

Pour Curulis57, je fonctionne exactement comme le fichier de JB, maintenant je vais fonctionner avec celui de JB et de Steelson mixé

Pour Jean Eric non je ne connaissais pas, mais je ferais un essais cela peux peut être être intéressant.

Merci à tous et merci à Steelson

Je vous souhaite de bonnes fêtes de fin d'année à tous, et je valide le sujet comme résolu

Cordialement

Dubdub22

Si le mot clé est contenu dans une prose plus longe, mets cette formule dans la dernière colonne :

=NB.SI(donnees[@[K1]:[K8]];"*"&MOTCLE&"*")

mais ce n'est pas une solution d' "avant-garde" comme le proposent les excel2016iens !

Re,

@dubdu22,

Tu as oublié de citer 78Chris pour sa proposition.

C'est inacceptable et tu seras puni !...

Cdlt.

Bonsoir,

Exemple avec 2 mots clés cherchés sur la même ligne dans une des 4 colonnes.

=ET(SI($J$8<>"";NB.SI(E2:H2;$J$8)>0;VRAI);SI($K$8<>"";NB.SI(E2:H2;$K$8)>0;VRAI))

Boisgontier

RE

J'ai un fichier qui représente + de trente colonnes et 8 000 lignes, en colonne "A" j'ai les années, en colonne "B" les mois, et à partir de la colonne "K" j'ai les noms de produits que je recherche et, qui sont affichés en désordre sur la ligne ( en désordre j'entend par là qu'il peuvent se trouver sur la ligne mais dans n'importe quelle colonne).

Alors pourquoi poster un exemple qui n'a rien à voir avec ton cas ?

On a tous perdu du temps sur cette fausse piste...

Version PowerQuery adaptée ci-joint toujours avec des listes de choix dynamiques et la possibilité de choisir plusieurs Produits

J'ai découvert une nouvelle fonction !?

J'achète ! J'ai juste réimbriqué dans if ... then afin de permettre le non choix....

Bonjour,

Je reviens sur le sujet pour mettre tous les "traditionalistes" d'accord (X cellus , Curulis57 , Jacques Boisgontier)

A partir du moment où ta demande a été éclaircie

J'ai un fichier qui représente + de trente colonnes et 8 000 lignes, en colonne "A" j'ai les années, en colonne "B" les mois, et à partir de la colonne "K" j'ai les noms de produits que je recherche

Il suffisait en reprenant la version proposée (à partir de laquelle tu étais parti du reste sans en être très loin) d'écrire dans une cellule la condition que tu cherches, en l'occurrence :

=ET( (Feuil1!A2=ANNEE) ; (Feuil1!B2=MOIS) ; NB.SI(Feuil1!K2:R2;"*"&MOTCLE&"*")>0 )

R étant à adapter à ton nombre de colonne. Plus besoin de colonnes supplémentaire et lignes masquées comme dans ma proposition.

Si tu as cette logique dans la tête, alors tu peux écrire toutes les requêtes que tu veux avec des OU et des ET selon le besoin. X cellus avait raison.

Après il y a la solution des "avant-gardistes" avec paoueur kiri. Cela me dépasse encore un peu !

Bonjour Dubdub22 et tous les contributeurs,

En effet, Merci Steelson, il faut bien sur que dès le départ soit fourni le bon besoin, comme l'a souligné à juste titre 78chris.

Trop de demandes sont souvent pas assez détaillées même quand les fichiers sont fournis. Faire un rappel du message et du pseudo en commentaires dans le fichier fourni permettrait aussi un gain de temps.

Salut tout le monde,

perso, à part avoir joué au cheveu dans la soupe, je n'ai guère contribué : complètement à côté de la plaque, le Curulis!

Par contre, vous m'avez montré des solutions absolument géniales (Boisgontier et Steelson) sur lesquelles je passe des heures depuis lors.

Si j'arrive à réaliser ce que je veux, je le posterai ici même.

Une question quand même dont je n'ai pas trouvé la réponse : pourquoi la CriteriaRange doit-elle tenir sur 2 lignes alors même que la 1ère ne contient que des mots parfois sans rapport avec les en-têtes du tableau (Formule, par ex. dans le fichier de Maître Jacques) ?

Merci à tous pour cette découverte!

Bon dimanche!

A+

RE

Une question quand même dont je n'ai pas trouvé la réponse : pourquoi la CriteriaRange doit-elle tenir sur 2 lignes alors même que la 1ère ne contient que des mots parfois sans rapport avec les en-têtes du tableau (Formule, par ex. dans le fichier de Maître Jacques) ?

Bien que ma solution ne t'intéresse pas le moins du monde , je peux répondre à ta question

Par construction la zone de critère d'un filtre élaboré doit contenir pour chaque colonne un titre et une ou n ligne de critères

(sauf cas particuliers d'extraction sans critère ou deux cellules vides suffisent)

Si le critère est simple : juste une valeur ou bien une valeur associée à un symbole de comparaison, le titre doit impérativement être identique à celui de la colonne de la BD sur lequel porte le critère.

Si une formule est nécessaire, alors le titre doit être différent de tout titre existant dans la BD mais ne peut être vide d'où les titres choisis par JB

solutions absolument géniales (Boisgontier et Steelson)

rendons à César ce qui appartient à Jacques Boisgontier ! je me suis juste fait l'avocat en expliquant (et en m'expliquant à moi-même) l'intérêt d’écrire les conditions multiples dans une seule formule qui donnera VRAI ou FAUX

Une question quand même dont je n'ai pas trouvé la réponse : pourquoi la CriteriaRange doit-elle tenir sur 2 lignes

et merci à Chris pour son éclairage car moi-aussi j'étais surpris qu'on pouvait mettre (presque) n'importe quoi au-dessus de la formule de conditions.

tout ceci est bien sûr l'intérêt du forum !

Bien que ma solution ne t'intéresse pas le moins du monde ,

trop pointu pour nous pauvres d'esprit !

Re

Pour compléter

la formule peut utiliser les titres des colonnes sauf pour une plage et ceci fonctionne

=ET( (année=ANNEE_R); (Mois=MOIS_R);NB.SI(Feuil1!K2:R2;"*"&MOTCLE&"*")>0 )

ou j'ai changé le nom des critères pour éviter l'ambiguïté avec la fonction MOIS d'une part et entre critère et BD d'autre part.

VBA comme certaines formules sont bien plus complexes que PowerQuery...

C'est juste une autre approche et comme Excel n'a jamais été conçu pour gérer des données (sauf ce filtre avancé très efficace), PowerQuery complète pour tous les cas où il faut manipuler des données.

Steelson, tu as 2016 et plus, donc tu va forcément l'utiliser même à l'insu de ton plein grè

Rechercher des sujets similaires à "recherche toutes lignes qui contiennent mots cle cherches"