Contexte

Par moment nous souhaitons que les utilisateurs ne filtrent que certains champs spécifiques d’une liste

Ce billet va vous montrer comment à l’aide d’une procédure VBA masquer une ou plusieurs des flèches de la ligne d’en-tête de la liste des données

IMPORTANT : On ne désactive pas le filtre automatique mais on modifie simplement la valeur booléenne de la propriété VisibleDropDown pour certains champs.

La procédure

Le code ci-dessous permet de masquer les flèches des colonnes 1, 2, 3, 6 et 7 du filtre automatique placé sur un tableau structuré présent dans la feuille nommée [db] et dont la propriété CodeName est shtData. C’est cette propriété qui est utilisée dans le programme

Procédure nommée HideArrowsSomeColumns

Sub HideArrowsSomeColumns()
  ' Masquer les flèches de certaines colonnes d'un filtre simple
  ' http://philippe.tulliez.be
  Dim Cell As Range, Column As Integer, lst As ListObject
  Application.ScreenUpdating = False
  With lst
    If Not .ShowAutoFilter Then .HeaderRowRange.AutoFilter
    For Each Cell In .HeaderRowRange
      Column = Column + 1
      Select Case Column
        Case 1 To 3, 6 To 7
          Cell.AutoFilter Field:=Column, Visibledropdown:=False
        Case Else
          Cell.AutoFilter Field:=Column, Visibledropdown:=True
      End Select
    Next
  End With
  Application.ScreenUpdating = True
End Sub

Liens

Pour savoir ce qu’est la propriété CodeName d’une feuille (objet Sheet, WorkSheet), à lire : VBA – CodeName d’une feuille Excel