Liste déroulante avec filtre textuel
Bonjour ,
J'ai réalisé une liste déroulante dans une feuille excel à lequel je dois rajouter un bouton qui me renvoie à une autre feuille là où il applique un filtre textuel qui correspond à valeur sélectionnée dans la liste déroulante.
Pour mieux expliquer si j'ai choisi (F1) dans la liste déroulante je veux qu'en appuyant sur le bouton ce dernier me renvoie à une deuxième feuille et applique un filtre textuel dont le critère sera F1.
J'ai besoin de votre aide puisque je bloque là dessus s'il vous plait , j'ai essayé de faire une macro mais celle ci ne marche pas avec une case qui est variable !
Je met ci-joint le fichier ,en attente votre aide s'il vous plait , je vous remercie d'avance.
Bien cordialement.
Bonjour,
crée votre liste déroulante avec la validation de donnée vous simplifiera pas mal le code je pense
minanse a écrit :Bonjour,
crée votre liste déroulante avec la validation de donnée vous simplifiera pas mal le code je pense
Merci pour votre réponse.
Bonjour Spyweeper, Minanse, bonjour le forum,
D'accord avec Minanse pour la validation de données... Sinon, tu parles de filtrer mais filtrer quoi et où ?...
ThauThème a écrit :Bonjour Spyweeper, Minanse, bonjour le forum,
D'accord avec Minanse pour la validation de données... Sinon, tu parles de filtrer mais filtrer quoi et où ?...
Dans le fichier que j'ai uploadé je devrai filtrer la case (who should read ) dans la feuille 2 avec le critère textuel qui sera le choix de la liste déroulante dans le feuille 1.
Merci
Re,
Toujours pas compris... C'est quoi ces : 1 / Marketing, Assistants - 2 / Sales - 3 / ?
Tu veux renvoyer le texte de la Combobox dans la première cellule vide de la colonne C de l'onglet Feuil2 ? C'est ça ?
ThauThème a écrit :Re,
Toujours pas compris... C'est quoi ces : 1 / Marketing, Assistants - 2 / Sales - 3 / ?
Tu veux renvoyer le texte de la Combobox dans la première cellule vide de la colonne C de l'onglet Feuil2 ? C'est ça ?
le 1- 2 - 3 c'est juste pour remplir les cases ( le fichier étant un exemple et non le fichier cible) puisque ce qui m'importe c'est de filtrer la case Who should read ( Marketing , assistants ... ) selon le critère textuel choisi dans la feuille 1 sur la liste déroulante ( la liste déroulante contient elle aussi marketing , assistants ... )
Merci
un exemple avec un peu plus d'exemple :
j'espere que c'est cela que vous voulez
n'oublier pas d'activer les macros après le téléchargement
minanse a écrit :un exemple avec un peu plus d'exemple :
j'espere que c'est cela que vous voulez
n'oublier pas d'activer les macros après le téléchargement
C'est exactement ce que je veux merci énormément ,
Je peux savoir comment le faire pour l'appliquer à mon fichier s'il vous plait ?
Merci
a tu trouve ou est le code ?
si oui mettre le code exactement au même endroits sur le classeur cible et à adapter le code :
je vous commente le code pour facilité l'adaptation
Private Sub Worksheet_Change(ByVal Target As Range)
'remplacer "feuil2" par le vrai nom de ta feuille ou s'effectue le filtre
Application.ScreenUpdating = False
Sheets("Feuil2").Cells.EntireRow.Hidden = False
If Not Application.Intersect(Target, Range("E8")) Is Nothing Then 'E8 la ou se trouve la liste déroulante donc à remplacer par la cse ou est votre liste déroulante
If Target.Value = "sans filtre" Then 'si on veut pas de filtre on affiche tout
Sheets("Feuil2").Cells.EntireRow.Hidden = False
Sheets("Feuil2").Activate 'aller sur la feuille en question
Exit Sub 'quitter le code
End If
For i = 4 To Sheets("Feuil2").Range("C" & Rows.Count).End(xlUp).Row 'je parcours tout la colonne ou se situe le critère de filtre ici C mais à remplacer par ta colonne en question
If Target.Value <> Sheets("Feuil2").Range("C" & i).Value Then 'changer "C" par le nom de la colonne en question
Sheets("Feuil2").Rows(i).Hidden = True 'on masque la ligne
End If
Next i
Sheets("Feuil2").Activate 'aller sur la feuille en question
End If
End Subminanse a écrit :a tu trouve ou est le code ?
si oui mettre le code exactement au même endroits sur le classeur cible et à adapter le code :
je vous commente le code pour facilité l'adaptation
Private Sub Worksheet_Change(ByVal Target As Range) 'remplacer "feuil2" par le vrai nom de ta feuille ou s'effectue le filtre Application.ScreenUpdating = False Sheets("Feuil2").Cells.EntireRow.Hidden = False If Not Application.Intersect(Target, Range("E8")) Is Nothing Then 'E8 la ou se trouve la liste déroulante donc à remplacer par la cse ou est votre liste déroulante If Target.Value = "sans filtre" Then 'si on veut pas de filtre on affiche tout Sheets("Feuil2").Cells.EntireRow.Hidden = False Sheets("Feuil2").Activate 'aller sur la feuille en question Exit Sub 'quitter le code End If For i = 4 To Sheets("Feuil2").Range("C" & Rows.Count).End(xlUp).Row 'je parcours tout la colonne ou se situe le critère de filtre ici C mais à remplacer par ta colonne en question If Target.Value <> Sheets("Feuil2").Range("C" & i).Value Then 'changer "C" par le nom de la colonne en question Sheets("Feuil2").Rows(i).Hidden = True 'on masque la ligne End If Next i Sheets("Feuil2").Activate 'aller sur la feuille en question End If End Sub
Je vous remercie énormément votre code marche parfaitement , merci milles fois !
minanse a écrit :a tu trouve ou est le code ?
si oui mettre le code exactement au même endroits sur le classeur cible et à adapter le code :
je vous commente le code pour facilité l'adaptation
Private Sub Worksheet_Change(ByVal Target As Range) 'remplacer "feuil2" par le vrai nom de ta feuille ou s'effectue le filtre Application.ScreenUpdating = False Sheets("Feuil2").Cells.EntireRow.Hidden = False If Not Application.Intersect(Target, Range("E8")) Is Nothing Then 'E8 la ou se trouve la liste déroulante donc à remplacer par la cse ou est votre liste déroulante If Target.Value = "sans filtre" Then 'si on veut pas de filtre on affiche tout Sheets("Feuil2").Cells.EntireRow.Hidden = False Sheets("Feuil2").Activate 'aller sur la feuille en question Exit Sub 'quitter le code End If For i = 4 To Sheets("Feuil2").Range("C" & Rows.Count).End(xlUp).Row 'je parcours tout la colonne ou se situe le critère de filtre ici C mais à remplacer par ta colonne en question If Target.Value <> Sheets("Feuil2").Range("C" & i).Value Then 'changer "C" par le nom de la colonne en question Sheets("Feuil2").Rows(i).Hidden = True 'on masque la ligne End If Next i Sheets("Feuil2").Activate 'aller sur la feuille en question End If End Sub
Merci énormémement Minanse
Spyweeper a écrit :minanse a écrit :a tu trouve ou est le code ?
si oui mettre le code exactement au même endroits sur le classeur cible et à adapter le code :
je vous commente le code pour facilité l'adaptation
Private Sub Worksheet_Change(ByVal Target As Range) 'remplacer "feuil2" par le vrai nom de ta feuille ou s'effectue le filtre Application.ScreenUpdating = False Sheets("Feuil2").Cells.EntireRow.Hidden = False If Not Application.Intersect(Target, Range("E8")) Is Nothing Then 'E8 la ou se trouve la liste déroulante donc à remplacer par la cse ou est votre liste déroulante If Target.Value = "sans filtre" Then 'si on veut pas de filtre on affiche tout Sheets("Feuil2").Cells.EntireRow.Hidden = False Sheets("Feuil2").Activate 'aller sur la feuille en question Exit Sub 'quitter le code End If For i = 4 To Sheets("Feuil2").Range("C" & Rows.Count).End(xlUp).Row 'je parcours tout la colonne ou se situe le critère de filtre ici C mais à remplacer par ta colonne en question If Target.Value <> Sheets("Feuil2").Range("C" & i).Value Then 'changer "C" par le nom de la colonne en question Sheets("Feuil2").Rows(i).Hidden = True 'on masque la ligne End If Next i Sheets("Feuil2").Activate 'aller sur la feuille en question End If End SubJe vous remercie énormément votre code marche parfaitement , merci milles fois !
minanse a écrit :a tu trouve ou est le code ?
si oui mettre le code exactement au même endroits sur le classeur cible et à adapter le code :
je vous commente le code pour facilité l'adaptation
Private Sub Worksheet_Change(ByVal Target As Range) 'remplacer "feuil2" par le vrai nom de ta feuille ou s'effectue le filtre Application.ScreenUpdating = False Sheets("Feuil2").Cells.EntireRow.Hidden = False If Not Application.Intersect(Target, Range("E8")) Is Nothing Then 'E8 la ou se trouve la liste déroulante donc à remplacer par la cse ou est votre liste déroulante If Target.Value = "sans filtre" Then 'si on veut pas de filtre on affiche tout Sheets("Feuil2").Cells.EntireRow.Hidden = False Sheets("Feuil2").Activate 'aller sur la feuille en question Exit Sub 'quitter le code End If For i = 4 To Sheets("Feuil2").Range("C" & Rows.Count).End(xlUp).Row 'je parcours tout la colonne ou se situe le critère de filtre ici C mais à remplacer par ta colonne en question If Target.Value <> Sheets("Feuil2").Range("C" & i).Value Then 'changer "C" par le nom de la colonne en question Sheets("Feuil2").Rows(i).Hidden = True 'on masque la ligne End If Next i Sheets("Feuil2").Activate 'aller sur la feuille en question End If End SubMerci énormémement Minanse
C'est fait c'est juste que je suis novice dans le forum
Re,
Arf, c'était juste une question de flemme ton fichier avec trois données qui se battaient en duel...
La même chose que Minanse mais avec un filtre automatique :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim PL As Range
Application.ScreenUpdating = False
Set PL = Sheets("Feuil2").Range("C4:C" & Sheets("Feuil2").Range("C" & Application.Rows.Count).End(xlUp).Row)
If Sheets("Feuil2").FilterMode = True Then PL.AutoFilter
If Not Application.Intersect(Target, Range("E8")) Is Nothing Then 'E8 la ou se trouve la liste déroulante
If Target.Value = "sans filtre" Then
If FilterMode = True Then PL.AutoFilter
Else
PL.AutoFilter Field:=1, Criteria1:=Target.Value
End If
Sheets("Feuil2").Activate
End If
Application.ScreenUpdating = True
End SubThauThème a écrit :Re,
Arf, c'était juste une question de flemme ton fichier avec trois données qui se battaient en duel...
La même chose que Minanse mais avec un filtre automatique :
Private Sub Worksheet_Change(ByVal Target As Range) Dim PL As Range Application.ScreenUpdating = False Set PL = Sheets("Feuil2").Range("C4:C" & Sheets("Feuil2").Range("C" & Application.Rows.Count).End(xlUp).Row) If Sheets("Feuil2").FilterMode = True Then PL.AutoFilter If Not Application.Intersect(Target, Range("E8")) Is Nothing Then 'E8 la ou se trouve la liste déroulante If Target.Value = "sans filtre" Then If FilterMode = True Then PL.AutoFilter Else PL.AutoFilter Field:=1, Criteria1:=Target.Value End If Sheets("Feuil2").Activate End If Application.ScreenUpdating = True End Sub
Merci à vous également
Re
Je découvre en fait que le filtre appliqué n'est pas un filtre textuel puisque quand j'appuie sur le filtre déroulant (Marketing ) ce dernier ne me sort pas les correspondance où il y'a par exemple ( Assistant , Marketing ) il sort uniquement ceux qui contiennent la valeur unique marketing ... Une solution s'il vous plait ?
Merci d'avance
en effet, la méthode que je vous ai donnée revoie la valeur exacte de la sélection (vu que c'est une comparaison exacte )
donc vous voulais donc sur sélection marketing par exemple on affiche tout les sous partie de marketing ? voulez vous garde aussi le filtre actuelle ?
minanse a écrit :en effet, la méthode que je vous ai donnée revoie la valeur exacte de la sélection (vu que c'est une comparaison exacte )
donc vous voulais donc sur sélection marketing par exemple on affiche tout les sous partie de marketing ? voulez vous garde aussi le filtre actuelle ?
On fait j'aimerai bien si possible que le filtre soit comme les filtres textuels "Contient ... " ?
Merci d'avance.
dans ce cas, changer les données de la liste déroulante(avec juste les première mot,ex : marketing, offre , ect...)
ensuite changer
If Target.Value <> Sheets("Feuil2").Range("C" & i).Value Then par
if not (Sheets("Feuil2").Range("C" & i).Value like Target.Value) Then minanse a écrit :dans ce cas, changer les données de la liste déroulante(avec juste les première mot,ex : marketing, offre , ect...)
ensuite changer
If Target.Value <> Sheets("Feuil2").Range("C" & i).Value Thenpar
if not (Sheets("Feuil2").Range("C" & i).Value like Target.Value) Then
Ah non ça ne sera pas possible de changer les données de la liste déroulante , Merci quand même