[VBA] Filtrer des lignes suivant un mot présent ou non

Bonjour à tous ,

Je souhaiterais mettre en place un système de filtre mais je ne sais pas du tout comment m'y prendre .
Le but serait de filtrer certains mots via un bouton et qui afficherait uniquement les lignes présentes avec ces mots-ci.
Je pense qu'un exemple en image est plus parlant ;-). Je vous laisse aussi le fichier excel.
A bien prendre en compte que j'aurais des lignes similaires que j'ajouterais au fur et à mesures au dessus des autres.

PS : Les recettes peuvent avoir des noms différents, ici ce n'est qu'un exemple. Recette 4 pourrait être Pizza par exemple.
PS 2 : Il faudrait que le tout tienne sur la même page, là j'ai fais 3 pages pour illustré l'exemple .

Est-ce faisable ?!

7filtre.xlsx (32.17 Ko)

Un exemple sans filtre :

capture

Un exemple avec un filtre où il affiche uniquement les lignes Out (avec la ligne du dessus, Recette 1 par exemple) :

capture

Bonjour,

En fait, l'idéal serait d'enlever toutes les en-têtes redondantes (recettes...) pour n'en garder qu'une.

Ensuite, il faudrait supprimer les lignes vides (donc regrouper entre elles toutes les saisies) puis créer un tableau structuré.

En tout cas, voici un essai où il faudra remplacer "montableau" par "B1:B60" ou par le nom du tableau que vous créerez.

'possibilité 1
Sub AfficherQueOut()

dim rSpe as range

set rSpe = SpecificCells(range("montableau"), "Out")

range("montableau").rows.hidden = True
rSpe.rows.hidden = false

End sub

'possibilité 2
Sub AfficherInOut()

dim rIn as range, rOut as range, rSpe as range

set rOut = SpecificCells(range("montableau"), "Out")
set rIn = SpecificCells(range("montableau"), "In")
set rSpe = union(rOut, rIn)

range("montableau").rows.hidden = True
rSpe.rows.hidden = false

End sub

'Pour tout démasquer
Sub AfficherTout()

range("montableau").rows.hidden = False

End sub

'fonction utilisée par les procédures
Function SpecificCells(Plage As Range, Valeur As Variant) As Range

Dim cell As Range

For Each cell In Plage
    If cell.Value = Valeur Then
        If SpecificCells Is Nothing Then
            Set SpecificCells = cell
        Else
            Set SpecificCells = Union(SpecificCells, cell)
        End If
    End If
Next

End Function

Cdlt,

Je n'ai malheureusement pas trop la possibilité de modifier les en-têtes de types Recettes 1 etc car j'ai à chaque fois un nom différent à mettre à la place de Recette1, (...).

Quelqu'un à une autre solution à proposer ?

Bonjour,

Ah, ce sont des ingrédients qui changent tout le temps ? En modifiant la fonction comme ça, ça devrait marcher alors :

Function SpecificCells(Plage As Range, Valeur As Variant) As Range

Dim cell As Range, couple as range

For Each cell In Plage
    If cell.Value = Valeur Then
        Set couple = union(cell, cell.offset(0, -1))
        If SpecificCells Is Nothing Then
            Set SpecificCells = couple
        Else
            Set SpecificCells = Union(SpecificCells, couple)
        End If
    End If
Next

End Function

Cdlt,

J'ai toujours cette erreur lorsque je lance la macro ...
Quelqu'un sait pourquoi ?

image

Alors bonjour et à votre service grand chef,

C'est pas quelqu'un, c'est moi vu que c'est moi qui t'ai aidé gentiment depuis le début, sans avoir de retour depuis...

Ça ne marche pas car c'est une fonction personnalisée et pas native de VBA donc il faut la copier quelque part dans le code pour l'appeler.

Il faut apprendre la politesse élémentaire parce que nous sommes des personnes normales et non des serviteurs de sa majesté...

Bonjour 3GB ,

C'est effectivement toi qui m'a aidé pour l'instant sur ce sujet et je t'en remercie .
Il me semble cependant que ce soit un sujet public ou tout le monde peut répondre et non un message en privé non ?
Je ne trouve pas toujours le temps d'avancer dans mon classeur excel et c'est justement la raison pour laquelle je n'arrive pas toujours à donner de réponse le jour même .

Je n'ai pas eu l'impression d'être impoli mais si c'est le cas je m'en excuse .

Salutations,
Cédric Pillonel.

Bonjour Cedric,

Oui, tu as été impoli, je te le confirme. Je t'ai aidé avec le souci de bien faire. Tu n'as pas répondu à ma question alors que tu l'as vue, ne m'as pas remercié pour le temps que j'ai pris pour toi et as même reposté par-dessus, sans un bonjour, en demandant quelqu'un d'autre, ce qui est irrespectueux à mon sens. Un peu de gratitude, c'est le minimum, d'autant plus que c'est toi qui suis mal les recommandations qu'on te donne... C'est un peu le monde à l'envers...

Et là, par exemple, j'imagine que tu as testé et que ça marche mais tu n'as même pas la correction de m'en faire part et d'avouer ton erreur...

Enfin bref, sans rancune, t'inquiète, mais parfois, j'ai pas envie de laisser passer ce genre de comportement.

Bon courage pour la suite,

Salutations,

Bonjour 3GB,

Tu as répondu toi même à ta propre question et la réponse à ta question se trouve également dans mon premier message . Mais je peux y répondre une 3ème fois si tu le souhaites oui .

Lors d'une discussion avec un vendeur par exemple, je lui pose des questions et après je le remercie à la fin de la discussion pour avoir répondu à mes questions et non pas entre chaque questions. Si tu agis différemment laisse moi te dire que c'est toi qui fait différemment des autres .

Je n'ai toujours pas résolu mon problème car il faut masquer non pas uniquement la ligne contenant le mot in, out, ou autre, mais LES lignes qui correspondent à ce mot.
C'est pour cette raison que je n'ai pas encore dit si cela marchait ou non et j'essaie de trouver une solution à ce problème.

Salutations,
Cédric Pillonel.

Bonjour Cedric,

Et bien, pour continuer sur cette analogie - au détail près que je ne suis pas un vendeur vu qu'il ne s'agit pas de mon activité professionnelle mais que je contribue sur mon temps libre - quand tu es dans un magasin, j'imagine que lorsqu'un vendeur a fini de t'aider, tu ne cries pas haut et fort, "quelqu'un d'autre s'il vous plait" et surtout, si tu estimes vouloir changer de vendeur, à ce moment, tu le remercies. Tu ne lui tournes pas non plus le dos en pleine conversation.

Car toi, apparemment, tu ne remercies que lorsque ton problème est totalement résolu, sinon, l'investissement de l'autre t'importe peu...

Il s'avère que c'est moi qui suis actif et investi sur cette conversation, donc je reçois des notifications et quand je vois, qu'après t'avoir aidé, tu oses demander quelqu'un d'autre sans me remercier pour le temps que j'ai passé ni même me témoigner la moindre considération, presque comme si je n'avais pas participé, c'est assez énervant et ça déroge à l'esprit de ce forum.

En tout cas, il arrive très rarement que je m'agace ainsi alors que je participe très souvent donc une petite remise en question ne te ferait pas de mal.

Et sur l'aspect technique, tu ne suis pas les consignes et tu n'arrives même pas à adapter mon code à ton fichier personnel.

Bon courage pour la suite,

Rechercher des sujets similaires à "vba filtrer lignes suivant mot present"