XL 2016 Afficher/masquer des lignes en fonction d'un critère

telemarrk

XLDnaute Occasionnel
Bonjour,

Je souhaite afficher/masquer des lignes en fonction du choix fait en L1.

Exemple : si je choisis "Vente" en L1 je veux voir dans mon tableau que les ventes

Peut-on également lorsque l'on quitte le fichier que tous soient affichés ?

Merci
 

Pièces jointes

  • test-masque.xlsx
    14.5 KB · Affichages: 6
Solution
Cela fonctionne également, Gégé-45550.

Est-ce que je peux me permettre de vous demander une dernière chose.

Si par exemple, j'ajoute une colonne à gauche de "services" intitulé "numéro" cela ne fonctionne plus.
Comment je peux y remédier car mon tableau va certainement évoluer en ajoutant des colonnes.

Merci
Alors, toutes les questions d'un coup, c'est mieux ! ;)
Dans la ligne
VB:
If Filtre <> "admin" Then ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=1, Criteria1:=Filtre
le Field représente le N° de la colonne à filtrer.
Si vous ajoutez une colonne à gauche, la colonne à filtrer devient la deuxième colonne.
Il faut alors modifier Field:=1 en Field:=2, etc.
Cordialement,

telemarrk

XLDnaute Occasionnel
Gégé-45550,

Peut-on faire une dernière modification à ton fichier joint.
Je viens de m'apercevoir que lorsque l'on quitte il affiche la totalité du tableau en proposant d'enregistrer.
Je voudrais que si le dernier choix est par exemple "Vente" il reste sur vente.

Une dernière chose également, je compte adapter le code vba sur un autre fichier excel, peut-on remplacer "services" par "admin" sans souci.


Merci
 

Gégé-45550

XLDnaute Accro
Gégé-45550,

Peut-on faire une dernière modification à ton fichier joint.
Je viens de m'apercevoir que lorsque l'on quitte il affiche la totalité du tableau en proposant d'enregistrer.
Je voudrais que si le dernier choix est par exemple "Vente" il reste sur vente.

Une dernière chose également, je compte adapter le code vba sur un autre fichier excel, peut-on remplacer "services" par "admin" sans souci.


Merci
re-Bonjour,
l'affichage complet correspond à la demande initiale :
Peut-on également lorsque l'on quitte le fichier que tous soient affichés ?
Pour supprimer cette action, il suffit d'effacer la procédure suivante dans ThisWorkbook :
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=1
End Sub
Pour la deuxième demande, pour que le code prenne en compte n'importe quel intitulé à la place de "Services", modifiez la procédure comme suit :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Filtre$
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [L1]) Is Nothing Then
        ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=1
        Filtre = [L1]
        If Filtre <> ActiveSheet.ListObjects("Tableau1").HeaderRowRange(1) Then ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=1, Criteria1:=Filtre
    End If
End Sub
Cordialement,
 

Gégé-45550

XLDnaute Accro
Par contre, je souhaite intégrer dans la liste déroulante "Admin" qui aurait les mêmes attributs que "Services"
c'est ce que j'ai écrit :
Pour la deuxième demande, pour que le code prenne en compte n'importe quel intitulé à la place de "Services", modifiez la procédure comme suit :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Filtre$
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, [L1]) Is Nothing Then
ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=1
Filtre = [L1]
If Filtre <> ActiveSheet.ListObjects("Tableau1").HeaderRowRange(1) Then ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=1, Criteria1:=Filtre
End If
End Sub
[EDIT] En C2, modifiez "Services" par ce que vous voulez, par exemple "Admin" et regardez ce qui se passe.
 

Pièces jointes

  • test-masque.xlsm
    26.2 KB · Affichages: 2

telemarrk

XLDnaute Occasionnel
Cela fonctionne également, Gégé-45550.

Est-ce que je peux me permettre de vous demander une dernière chose.

Si par exemple, j'ajoute une colonne à gauche de "services" intitulé "numéro" cela ne fonctionne plus.
Comment je peux y remédier car mon tableau va certainement évoluer en ajoutant des colonnes.

Merci
 

job75

XLDnaute Barbatruc
.Bonjour à tous,

Pour ne pas avoir à modifier le code si l'on ajoute des colonnes déclarez une variable col et définissez-la :
VB:
col = [Tableau1[Services]].Column - [Tableau1].Column + 1
puis en dessous remplacez Field:=1 par Field:=col

A+
 

Gégé-45550

XLDnaute Accro
Désolé job75,

Mais cela ne fonctionne pas.
Re-bonjour,
mais bien sûr que si, ça marche !
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Filtre$, Colonne%
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [L1]) Is Nothing Then
        Colonne = [Tableau1[Services]].Column - [Tableau1].Column + 1
        ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=Colonne
        Filtre = [L1]
        If Filtre <> "Admin" Then ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=Colonne, Criteria1:=Filtre
    End If
End Sub
C'est une excellente suggestion qu'à faite @job75
Cordialement,
 

Discussions similaires

Statistiques des forums

Discussions
312 508
Messages
2 089 139
Membres
104 047
dernier inscrit
bravetta