 
 
  |  | auteur : SilkyRoad |  
	Un filtre automatique permet de masquer les lignes d'une plage de cellules ne répondant pas aux critères 
spécifiés. Les critères sont définis pour chaque colonne. Il ne peut y avoir qu'un seul filtre automatique 
dans une feuille (Dans Excel2007, vous pouvez transformer les plages d'une même feuille en tableau afin d'utiliser 
plusieurs filtres sur la page). Le filtre automatique s'applique à une plage de cellules dont la première 
ligne contient les entêtes (champs). 
  
Pour créer un filtre automatique, utilisez la méthode AutoFilter:
  
 
  
	Toutes les cellules voisines à A1 vont être intégrées dans le filtre.
 
  
Si le filtre automatique existait déjà, celui-ci sera désactivé. Pour préalablement vérifier la présence 
du filtre, utilisez  AutoFilterMode qui renvoie True si le filtre existe:
  
 | Vba |  
With Worksheets("Feuil1")
    If Not .AutoFilterMode Then .Range("A1").AutoFilter
End With
  |  
 
	
 
  
Chaque champ (colonne) peut recevoir les critères de filtre que vous aurez paramétré :
Vous disposez de critères de condition (Criteria1 et Criteria2) pour indiquer les données à vérifier et 
des opérateurs (xlAnd, xlOr) pour combiner ces conditions. L'argument Field correspond au numéro de colonne 
dans la plage du filtre automatique.
  
 | Vba |  
Range("A1").AutoFilter Field:=1, Criteria1:="Ville01"
  |  
 | Vba |  
Range("A1").AutoFilter Field:=1, Criteria1:="Ville01", Operator:=xlOr, Criteria2:="Ville02"
  |  
 | Vba |  
Range("A1").AutoFilter Field:=2, Criteria1:="<>19.6"
  |  
 | Vba |  
Range("A1").AutoFilter Field:=1, Criteria1:="*dvp*"
  |  
 
 
  
	Pour enlever tous les filtres actifs, utilisez:
  
 | Vba |  
With Worksheets("Feuil1")
    If .FilterMode = True Then .ShowAllData
End With
  |  
 
 
  
	Pour supprimer le filtre automatique:
  
 | Vba |  
Worksheets("Feuil1").AutoFilterMode = False
  |  
  |  
  |  | auteur : SilkyRoad |  | Vba |  
Sub AppliqueCouleur_ColonneFiltree()
Dim x As Integer
Dim Ws As Worksheet
Set Ws = Worksheets("Feuil1")
With Ws
    
    .Cells.Interior.ColorIndex = xlNone
    
    If .FilterMode = True Then
        
        With .AutoFilter.Filters
            For x = 1 To .Count
                
                If .Item(x).On Then Ws.Columns(x).Interior.ColorIndex = 6
            Next
        End With
    End If
End With
End Sub
  |  
  |  
  |  | auteur : SilkyRoad |  
Dans cet exemple, le filtre automatique est dans la feuille nommée Feuil1.
  
 | Vba |  
Sub NommerZoneFiltree()
ActiveWorkbook.Names.Add Name:="NomPlage_01", _
    RefersTo:="=Feuil1!" & _
    Feuil1.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Address
End Sub
  |  
  |  
  |  | auteur : SilkyRoad |  
Dans Excel2007, l'application est capable d'analyser automatiquement les dates par jour, semaine, 
mois, semestre ou année ce qui facilite les filtres sur ce type de données.	
 
 
Pour désactiver cette option et dissocier cette hiérarchie (transformation en liste non hiérarchique): 
     Cliquez sur le Bouton  Office. 
     Cliquez sur le bouton  Options Excel. 
     Sélectionnez le menu  Options avancées. 
     Dans la partie  Afficher les options pour ce classeur, 
     Choisissez le classeur. 
     Décochez l'option  Grouper les dates dans le menu Filtre automatique. 
     Cliquez sur le bouton  OK pour valider.
 
  |  
  |  | auteur : SilkyRoad |  
	Cet exemple additionne les cellules visibles de la colonne B.
  
 | Vba |  
MsgBox Application.WorksheetFunction.Subtotal(9, Columns(2))
  |  
  |  
  |  | auteur : SilkyRoad |  
3 solutions:
  	
 | Vba |  
MsgBox Range("A1:A" & Range("A65536").End(xlUp).Row).SpecialCells(xlVisible).Count
  |  
 
	
  
 | Vba |  
MsgBox Feuil1.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count
  |  
 
	
  
 | Vba |  
MsgBox Evaluate("=subtotal(3,A:A)")
  |  
 
	
  
 
  |  
  |  | auteur : Lou Pitchoun |  
Pour filtrer les champs dont le contenu est vide, tapez dans la zone de critère
  
 
 
  
Pour filtrer les enregistrements non vides: tapez 
  
  |  
  |  | auteurs : SilkyRoad, Tirex28, Myta_Qc |  
	Il n'existe pas d'évènement spécifique pour identifier l'utilisation d'un filtre. 
Pour contourner le problème, vous pouvez par exemple insérer la fonction suivante dans une 
cellule quelconque de la feuille:
  
 
  
	Et utilisez l'évènement Calculate dans le module objet de la feuille contenant le filtre. 
La procédure sera déclenchée à chaque recalcul.
  
 | Vba |  
Private Sub Worksheet_Calculate()
    AppliqueCouleur_ColonneFiltree
End Sub
Sub AppliqueCouleur_ColonneFiltree()
Dim x As Integer
Dim Ws As Worksheet
 
Set Ws = Worksheets("Feuil1")
 
With Ws
    
    .Cells.Interior.ColorIndex = xlNone
    
    If .FilterMode = True Then
        
        With .AutoFilter.Filters
            For x = 1 To .Count
                
                If .Item(x).On Then Ws.Columns(x).Interior.ColorIndex = 6
            Next
        End With
    End If
End With
End Sub
  |  
 
 
  
	Une autre solution proposée par Myta: Appliquer une Mise en Forme Conditionnelle sur les en-têtes de filtre. 
Sélectionnez les titres de champ dans la première ligne A1 à Ax 
Menu Format 
Mise en forme conditionnelle 
Appliquez "La formule est" =ChampActif(A1)
  
Et dans un module standard ajoutez la fonction:
  
 | Vba |  
Function ChampActif(c)
  Application.Volatile
  ChampActif = Sheets(Application.Caller.Parent.Name).AutoFilter.Filters.Item _
  (c.Column - Sheets(Application.Caller.Parent.Name).Range("_FilterDataBase").Column + 1).On
End Function
  |  
 
	Une troisième solution proposée par Tirex28:
 Téléchargez le classeur démo qui contient 
un module de classe pour identifier l'utilisation du filtre dans la feuille de calcul.
  
  |  
 
 
 
						Consultez les autres F.A.Q's
					 
 Les sources présentés sur cette pages sont libre de droits,
			et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
			Copyright ©2008 
			Developpez LLC. Tout droits réservés Developpez LLC.
			Aucune reproduction, même partielle, ne peut être faite de ce site et de
			l'ensemble de son contenu : textes, documents et images sans l'autorisation
			expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
			de prison et jusqu'à 300 000 E de dommages et intérets.
			Cette page est déposée à la SACD. 
												 |