[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 ?!
Un exemple sans filtre :

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

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,
Alors bonjour et à votre service grand chef,
C'est pas quelqu'un, c'est moi
Ç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
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,