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.

48spyweeper.xlsx (16.21 Ko)

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

60spyweeper.xlsm (23.13 Ko)
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 Sub
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

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 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

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 Sub
ThauThè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 Then 

par

  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

Rechercher des sujets similaires à "liste deroulante filtre textuel"