Cacher les filtres de certaines colonnes

Bonjour,

Je souhaite rendre la flèche du filtre invisible pour certaines colonnes pour éviter que les utilisateurs puissent modifier le filtre.

Voici le code que j'ai trouvé et adapté à mes besoins, mais il ne fonctionne pas. Je pense que la fin est mauvaise car j'ai modifier une boucle FOR.

Le code s'exécute dès que l'on clique sur la ligne 6 sur laquelle se situe mes filtres. Je souhaite que tous les filtres soient visibles et utilisables SAUF ceux de la colonne 4 et 22.

' Enlever les filtres sur des colonnes spécifiques
' Les filtres sont dans la plage nommée _FILTRESST_
'
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rg As Range, i As Integer

' Plage nommée contenant les filtres
Set rg = Range("_FILTRESST_")

' La macro s'éxécute chaque fois que l'on clique sur la même ligne
' que notre plage nommée. Ainsi, un utilisateur ne peut pas changer
' les filtres car ils sont enlevés automatiquement.
If Target.Row <> rg.Row Then Exit Sub

rg.AutoFilter           'Ajout des filtres sur toutes les colonnes
Set i = 4        ' Enlever l'affichage du filtre de la colonne 4
rg.AutoFilter Field:=i, VisibleDropDown:=False

Set j = 22         '  Enlever l'affichage du filtre de la colonne 22
rg.AutoFilter Field:=j, VisibleDropDown:=False

End Sub

Merci de votre aide

Bonjour,

' Enlever les filtres sur des colonnes spécifiques
' Les filtres sont dans la plage nommée _FILTRESST_
'
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rg As Range
Const i = 4: Const j = 22
    ' Plage nommée contenant les filtres
    Set rg = Range("_FILTRESST_")
    ' La macro s'éxécute chaque fois que l'on clique sur la même ligne
    ' que notre plage nommée. Ainsi, un utilisateur ne peut pas changer
    ' les filtres car ils sont enlevés automatiquement.
    If Target.Row = rg.Row Then
        rg.AutoFilter           'Ajout des filtres sur toutes les colonnes
        ' Enlever l'affichage du filtre de la colonne 4
        rg.AutoFilter Field:=i, VisibleDropDown:=False
        ' Enlever l'affichage du filtre de la colonne 22
        rg.AutoFilter Field:=j, VisibleDropDown:=False
    End If
End Sub

A+

Merci pour la réponse rapide!

Ca ne marche toujours pas mais je me demande si le prob n'est pas or code.

C'est la première fois que j'utilise du "Private Sub". Comment déclencher la macro? Je pensais qu'elle se déclencherai dès que je clic dans la plage FILTRESST mais de toute évidence rien ne se passe ... :-/

Avez vous une idée?

Malheureusement je ne peux pas mettre le fichier en pièce jointe car très gros.

Merci

L'évènement SelectionChange survient lorsque la sélection change dans la feuille de calcul.

Si la plage "_FILTRESST_" contient la cellule sélectionnée, le traitement du filtrage est effectué.

Première vérification :

As-tu bien placé le code dans le module de la feuille concernée ?

A+

Oui oui, le module se situe bien dans la bonne Feuille.

Pour info, voici le code mis à jour entré:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rg As Range
Const i = 4: Const j = 22

   Set rg = Range("_FILTRESST_")
        If Target.Row = rg.Row Then

        rg.AutoFilter          

       rg.AutoFilter Field:=i, VisibleDropDown:=False

          rg.AutoFilter Field:=j, VisibleDropDown:=False
    End If
End Sub

J'ai utilisé la fonction "definir un nom" pour nommer _FILTREST_ qui est une plage de cellules dans la feuille contenant le module du Code.

Bonjour,

Je te confirme que le problème ne vient pas directement du code

81exemple.xlsm (15.24 Ko)

Pour aller plus loin, il faudrait que tu puisses joindre un exemple qui montre le problème.

A+

Votre exemple m'a aidé à trouver la solution :

J'avais entré le code dans une Module général de la feuille.

Je l'ai finalement copié-collé dans le Worksheet de la feuille et cela marche désormais.

Merci de votre aide

Bonjour de nouveau,

Nouveau soucis au sujet de ce code! il fonctionne bien mais me supprime les filtres en cours et cache le filtre. Je souhaiterai qu'il cache uniquement les filtres mais sans les remettre à zéro.

Je souhaiterai préparer mon fichier avec des filtres en colonne 4 et 22, puis mettre ce code dans la feuille afin de cacher les filtres en cours.

Comme j'utilise ce code pour plusieurs fichiers, je pense q'il faut mettre une actions supplémentaire du type : "Ne pas enlever les filtres en cours" (car j'ai trouver l'action pour ajouter un filtre suivant un critère mais je devrai l'adapter pour les 50 feuilles dans lequel j'ai besoin de ce code :-/ )

En espérant avoir été claire

Merci de votre aide

Bonjour,

Je souhaiterai préparer mon fichier avec des filtres en colonne 4 et 22, puis mettre ce code dans la feuille afin de cacher les filtres en cours.

Tu peux inclure la mise en place des filtres en colonne 4 et 22 dans ton code.

77exemple.xlsm (16.35 Ko)

A+

Bonjour,

Merci de la réponse, cela me donne le code VBA pour imposer un filtre ce que je ne connaissais pas ^^

Cependant, ce code étant utilisé pour plusieurs fichiers avec un filtre différent à chaque fois, c'est pourquoi j'aurai préféré une action du type 'ne pas enlever les filtres en cours". Je ne sais pas si cela existe.

MErci

Bonjour,

Partant du constat que le masquage de la flèche du filtre provoque la réinitialisation du filtrage, tu as peut-être intérêt à inclure la mise en place des filtres dans ton code et personnaliser le critère de ces filtres (avec une liste par exemple).

Note bien quand même que le masquage n’empêchera pas l’utilisateur d’effacer ou de supprimer le filtrage, que la flèche soit présente ou pas. Il pourra alors avoir accès à l’ensemble des données.

A+

Okay je vous remercie

Bonne journée!

Rechercher des sujets similaires à "cacher filtres certaines colonnes"