Filtre textuel continet "cellule"

Bonjour,

J'aimerai savoir s'il est possible d'actualiser une liste grâce à un Filtre Textuel qui aurait comme critère le contenu d'une cellule choisie, soit automatiquement soit après avoir lancé une macro avec un bouton.

Vous pouvez trouver ci-joint un cas très simplifiée de ma demande!

Merci à vous

20filtrecellule.xlsx (8.50 Ko)

Bonjour,

C'est possible de faire quelque chose comme ça oui

Tu trouveras le programme correspondant dans Feuil1 dans Visual Basic (F11 ou onglet développeur -> Visual Basic)

Voici le fichier :

Bon c'est un exemple hein

Bonjour AuSecour,

Le programme que tu m'as fourni à l'air de fonctionner comme j'en ai besoin, je vais essayer de l'adapter à mon programme (évidemment moins complexe et moins sophistiqué que les ingrédients d'une salade de fruit.. )

Si j'ai le moindre problème je t'en ferai part.

Merci de ton aide !

J'aurai besoin d'aide pour pousser la formule un peu plus loin, c'est à dire, effectuer une recherche avec deux options possibles :

La première : combiner plusieurs mots clefs comme : "poire pomme" pour que le résultat comprenne les deux termes mais sans pour autant qu'ils soient écrit dans cette ordre là. Si vous reprenez la feuille excel, elle devrait renvoyer "poire fraise pomme" & "pomme pomme"

Une deuxième option : Utiliser plusieurs mots clefs pour afficher tous les résultats qui au moins UN mot clef.

J'ai essayé de faire avec : =NBCAR(A1)-NBCAR(SUBSTITUE(A1;" ";"")) pour connaître le nombre d'espace de ma recherche et donc compter le nombre de mot. Ensuite avec un STXT et mon résultat, séparer les mots mais je n'ai pas très bien réussi. Je pense qu'une fois les mots séparés la recherche peut s'effectuer de manière plus simple.

Enfin bref, vous avez compris, si quelqu'un ici peut m'aider je lui en serais très reconnaissant !

Je viens de prendre connaissance de " L'Assistant Conversion" d'Excel que je ne connaissais pas du tout avant, il pourrait peut-être se montrer utile pour ceux qui m'aident, je continu de chercher une solution !

En fait tout ça est déjà faisable pour le fichier, tout ce qu'il faut changer c'est le filtre avancé et la zone de critère.

Je t'explique ce que j'ai utilisé dans le code :

Un filtre avancé qui filtre les cellules du champ salade de fuit qui contiennent pomme par exemple.

Un filtre avancé fonctionne de la façon suivante :

Si tu mets plusieurs fois le même champ sur une ligne avec plusieurs critères, il faudra que tous les critères soient remplis par la ligne pour qu'elle reste affichée, si tu mets sur un champ plusieurs lignes, ce será un OU, imaginons pour ton cas que tu veuilles pomme ou ananas dans ta cellule, il faudra mettre sous le champ salade de fruit du filtre 2 lignes :

une avec ananas, une avec pomme.

Si tu as besoin d'aide pour faire le changement reviens vers moi, je pourrai te modifier ça si tu le souhaites, il faudra modifier criteria range dans le programme pour l'adapter à ta nouvelle plage de filtre

J'ai changé quelques données dans la feuille de calcul et donc dans le VBA mais cela ne donne rien...

Pouvez-vous y jeter un œil ? Je pensais être très bien parti jusqu'au moment où.. ça ne marche pas !

Soif d'apprendre pourquoi et comment régler ça !

*EDIT* Cela ne va permettre seulement d'avoir les résultats qui contiennent les deux mots clés, mais il y a-t-il une manière d'obtenir tous les résultats contenant au moins l'un de des mots clés ?

Si cela permet d'avoir des résultats qui contiennent au moins un des deux mots clefs, est-il possible d'avoir une formule qui ne renvoie que les résultats prenant en compte les 2 critères ?

*EDIT 2* : C9 = C14 dans le VBA de la feuille. Lorsque l'on tape qu'un fruit en modifiant le VBA avec seulement un critère de 1 ligne cela marche, mon erreur est d'avoir laissé la barre de recherche dans la zone du tri, il faut supprimer le critère pour qu'elle réapparaisse

*EDIT 3* : la plage des critères doit être de la taille exacte du nombre de critères; comment faire pour automatiser la taille de la zone des critères ?

J'ai la réponse à mon édit 1, les critères ne se cumulent pas mais cela marche comme un OU( ) ; Comment le faire fonctionner comme un ET( ) maintenant ?

Voilà la version modifiée :

Merci !

Il me faut donc pour résumer mes EDITs :

Un moyen de comprendre comment remplacer le ET( ) par un OU ( )

edit*j'ai modifié le UNIQUE = False par True en pensant que ça allait changer quelque chose, rien n'a changé...*

Un moyen d'avoir ma plage de mots clés qui s'actualise en fonction du résultat de ma conversion. Le nombre de mot trouvé peut se faire avec un nbval ou autre je pense. edit: ou alors intégrer un indirect dans le VBA mais je n'y suis pas arrivé...

Merci du soutien apporté !

Bonjour!

J'ai modifié le filtre et le programme, le programme s'adapte maintenant au nombre de lignes que tu mets dans tes colonnes de filtre, il faudra juste étirer les formules qui comvertissent les noms des fruits en "contient".

J'ai rajouté une feuille d'explication et laissé un exemple pour que tu comprennes, essaye de bidouiller le filtre pour comprendre comment ça marche

Attention toutefois, les plages sont fixes dans le programme à certains endroits, il faudra les adapter, si tu as du mal à le faire... reviens vers moi

En tout cas voici le résultat :

Bonjour Ausecour,

Je vais jeter un œil au programme mais si tu dis avoir résolu mon problème je te fais confiance !

Merci pour le temps accordé à ma demande et tes explications très claires!

Si j'ai un problème je n'hésiterai pas t'en faire part.

Bonne journée

Après avoir regardé le fichier je me demandais si il n'était pas possible de rentrer les valeurs dans une même cellule (séparé par des espaces) et qu'ensuite en repérant la modification qui a eue lieu dans la cellule (comme c'est le cas maintenant pour la fonction) les mots se divisent et se placent eux-mêmes soit en ligne (grâce à l'Assistant de Conversion par exemple ?) si on coche une case à option ou soit en colonne si cette même case est décochée ? Ce qui permettrait de choisir si on veut utiliser ET à la place de OU et inversement. Le problème est que je n'ai pas réussi à voir où ton programme distingue si les mots clefs utilisés doivent être soumis à un OU ou à un ET.

Ce que j'aime beaucoup dans le programme que tu m'as fait c'est l'actualisation sans presser de bouton, si j'arrive à transformer ça pour le rattacher à l'Assistant de Conversion et une case à cocher pour faire le choix entre les deux possibilités mon programme serait parfaitement adapté.

Merci déjà pour tout ce que tu as fait, j'essaie de continuer à creuser ça.

*EDIT* : Il arrive à la liste de se bloquer parfois et de ne pas réafficher toutes les lignes après suppression des mots clefs, impossible de trouver d'où vient le problème

*EDIT2* : Il est inscrit dans le VBA qui la recherche se fait pour tout changement dans les cellules des colonnes D à H mais lorsque j'inscris une valeur dans une colonne différente de D la liste ne s'actualise pas

À la vue de ce que tu viens d'écrire j'ai réouvert le fichier, la liste s'actualise bien si j'écris quelque chose dans la colonne E par exemple.

Pour la case à cocher ce n'est pas nécessaire, c'est le filtre avancé qui gère si c'est un OU ou un ET en fonction de comment tu as écris tes données, si par exemple tu écris fraise sur la première colonne première ligne et pomme sur la deuxième ligne, ça interpretra : je veux soit que´ça contienne fraise, soit que ça contienne ponme, car c'est sur 2 lignes différentes.

Si tu mets fraise sur la première ligne première colonne, et pomme sur la première ligne deuxième colonne, ça interpretra : je veux que ça contienne fraise et pomme.

Tu veux forcément la case à cocher pour quelle raison? tu trouves trop compliqué l'utilisation du filtre et préfères que cette zone soit remplie automatiquement?

En effet il y avait un bug avec le filtre avancé, ce que j'ai fait à présent c'est qu'avant de filtre j'enlève le filtre et montre toutes les lignes puis je filtre, voici le fichier avec programme corrigé :

Non c'est juste que j'aimerai bien que l'utilisateur n'est pas à changer de cellule pour entrer ses mots clefs. Après les personnes qui l'utiliserons auront une idée de ce qu'elles cherchent donc un ET serait plus adapté mais on sait jamais, un OU peut aussi à trouver les documents sur une thématique plus élargie.

Donc c'est pour ça que j'aurai aimé qu'il soit possible de dissocier le ET du OU tout en ayant une recherche qui s'effectue sur une seule cellule avec des mots séparés par des espaces par exemple. Afin que l'utilisation soit la plus simple possible.

Je me suis permis de vous envoyer 3 photos en pièces jointes pour vous montrer les problèmes que j'ai pu rencontrer:

NonActualiser : On remarque que la liste ne s'actualise pas après avoir rentré un mot clé dans une cellule que D16 ( D17 ou E16 ) ne fonctionnent pas non plus.

*EDIT : Dans la version envoyée juste au dessus, la liste s'actualise si j'entre au minimum 2 données dans la plage D:H mais un seul mot ne suffit pas, contrairement à la cellule D16 qui suffit à elle seule pour lancer la recherche

ListeDisparitionAvant : J'entre deux mots clefs, la liste s'actualise exactement comme ce que je recherche. [Réglé]

ListeDisparitionAprès : Je supprime la cellule D16 en première puis la E16 et la liste ne s'actualise pas. [Réglé]

Merci,

EDIT : La dernière amélioration à faire à la macro serait de regrouper la plage d'entrée des valeurs en une seule cellule, avec à côté une case à cocher, en fonction de si elle est cochée ou non, l'Assistant Conversion met les valeurs en ligne (donc dans notre cas cela correspondrait au ET) ou alors en colonne (ce qui correspondrait au OU).

J'ai essayé mais c'est un échec dès les premières lignes de VBA rajoutées...

listedisparitionapres listedisparitionavant nonactualiser

Range("A26").Select

End Sub

Voilà les lignes de VBA que j'ai rajouté,

La première fonction permet donc de séparer les mots qui ont un espace entre eux en les plaçant juste en dessous de la zone d'écriture.

On sélectionne tous les mots avec xlToRight et ensuite on les copie et on va en D21. Maintenant il faudrait juste un IF en fonction d'une case à cocher qui permet soit de faire un collage vertical soit un collage horizontal.

Je vous rajoute le fichier Excel car j'ai rajouté des mélange de fruits et des les zones sont différentes :

Me revoilà avec quelque chose qui devrait te plaire, tu saisis juste tes fruits séparés par un espace, tu choisis si tu veux faire un ou ou bien un et, et ça te fait tout le reste

Voici le résultat :

EDIT:

Ah eh bien on s'est croisés de peu...

YOU DID IT !

C'est la phase finale et donc idéale de ce que je pouvais demander !

Je vais maintenant essayer de l'adapter à mon programme Excel, grâce à tes commentaires très explicites je devrais pas trop avoir de souci !

Je reviens vers toi en cas de problème mais tu as déjà fait énormément pour ce cas.

Encore merci à toi et si tu veux savoir comment marche une fonction SOMME ou MOYENNE je peux t'aider...!

*EDIT*: on s'est croisé de peu mais ton résultat est quand même plus intéressant que le mien !...

Hum t'en fait pas je sais bien comment elles fonctionnent ces deux là...

Merci quand même

Pendant que j'étais en train de transposer ce VBA sur mon programme personnel (oui... je ne travaille pas sur des salades de fruits...) j'ai cherché à "jongler" entre deux feuilles pour y mettre les tableaux Saisi et Automatique, afin d'avoir une esthétique plus désirable. J'ai donc utilisé :

Sheets("MoteurRecherche").Select

ou

Sheets("Donnee").Select

Mais je crois comprendre qu'étant donné que le VBA est créer dans l'onglet de la feuille et non pas dans le classeur il est impossible de jongler entre les feuilles ? Car si je le passe sur le classeur, le démarrage automatique suite à la modification d'une cellule va s'activer sur toutes mes feuilles ?

EDIT : Je suppose que je dois le mettre dans l'onglet du classeur et non plus de la feuille tout en modifiant les premières lignes :

Private Sub Worksheet_Change(ByVal Target As Range) 'programme qui se lance lors d'un changement dans la feuille 1

If Not Intersect(Target, Range("A3", "B3")) Is Nothing Then 'si le changement a lieu dans le ET/OU ou les mots clefs

Merci !

En effet si tu veux pouvoir utiliser une autre feuille que celle où est déclaré ton programme, il faut alors passer par un autre programme appelé via un Call par exemple, si tu code ce programme dans un module, il pourra aller chercher les données dans une autre feuille.

Petite astuce au fait, évite d'utiliser des sheets.select

Utilises plutôt des

 Sheets("Moteur de recherche").Range("A1","A10")

ou carrément des

With Sheets("Moteur de recherche")
.Range("A1","A10")
End With
Rechercher des sujets similaires à "filtre textuel continet"