Utilisation de «AutoFilter» en VBA

Bonjour,

J’essaie de comprendre l’utilisation de «AutoFilter» et ai tenté l’essai avorté ci-dessous, placé dans le fichier ci-joint.

Pourriez-vous m’aider à réaliser cet essai qui me permettra de comprendre un peu mieux cette possibilité ?

Sub AutoFilter_Xxx()

Dim DerLig As Long

Application.ScreenUpdating = False
DerLig = Range("A" & Rows.Count).End(xlUp).Row

Columns("A:C").AutoFilter
Range("$A$1:$A$" & DerLig).AutoFilter Field:=2, Criteria1:="<>Rue 3", Operator:=xlAnd, Criteria2:="<>Rue 6", Operator:=xlOr, Field:=3, Criteria1:="<>Ville 1"
Rows("2:" & DerLig).SpecialCells(xlCellTypeVisible).Delete
Columns("A:C").AutoFilter
Application.ScreenUpdating = True

End Sub

Cordialement.

710autofilter-essai.zip (12.60 Ko)

Bonjour

Dans une instruction Autofilter tu ne peux mettre qu'un seul champ à filtrer

Il faut que tu rajoutes une autre instruction pour filtrer sur un autre champ

Moi je ferais ça

Option Explicit
Sub AutoFilter_Xxx()
Dim DerLig As Long

  Application.ScreenUpdating = False
  DerLig = Range("A" & Rows.Count).End(xlUp).Row

  Columns("A:C").AutoFilter
  Range("$A$1:$A$" & DerLig).AutoFilter Field:=2, Criteria1:="<>Rue 3", Operator:=xlAnd, Criteria2:="<>Rue 6"
  Range("$A$1:$A$" & DerLig).AutoFilter Field:=3, Criteria1:="<>Ville 1"
  Rows("2:" & DerLig).SpecialCells(xlCellTypeVisible).Delete
  Columns("A:C").AutoFilter
  Application.ScreenUpdating = True

End Sub

Pas trop vérifier si c'est le résultat attendu

Bonjour,

Un exemple en 2 étapes :

1 - filtre par ville 4

2 - filtre par ville 1 et rue 3 ou rue 6

Cdlt et bonnes fêtes de fin d'année

Option Explicit
Public Sub Filtre_Auto()
'Ctrl+q
Dim sh_1 As Worksheet, sH_2 As Worksheet
Dim Plage As Range
Dim derLigne As Integer

    Application.ScreenUpdating = False

    Set sh_1 = Worksheets("Réserve")
    Set sH_2 = Worksheets("Feuil1")
    sH_2.Cells.Delete
    Set Plage = sh_1.Range("A1").CurrentRegion
    Plage.AutoFilter Field:=3, Criteria1:="Ville 4"
    Plage.Copy Destination:=sH_2.Range("A1")
    Plage.AutoFilter
    Plage.AutoFilter
    Plage.AutoFilter Field:=3, Criteria1:="Ville 1"
    Plage.AutoFilter Field:=2, Criteria1:="=Rue 3", _
        Operator:=xlOr, Criteria2:="=Rue 6"
    derLigne = sH_2.Range("A" & Rows.Count).End(xlUp).Row + 1
    Plage.Offset(1, 0).Copy Destination:=sH_2.Cells(derLigne, 1)
    Plage.AutoFilter

    Application.ScreenUpdating = True
    Set sh_1 = Nothing: Set sH_2 = Nothing: Set Plage = Nothing

End Sub
727autofilter-essai.zip (17.25 Ko)

Bonjour Banzai, Bonjour Jean-Eric.

Merci à tous les deux pour vos interventions

@ Banzai

Je présume que tu as corrigé mon code sans aller voir mes demandes complémentaires dans le fichier (sur le bouton en place). Le résultat n’est donc pas celui attendu.

@ Jean-Eric

J’avais en fait créé une feuille « Réserve » uniquement afin de pouvoir effectuer de nouveaux essais facilement. Mais dans la réalité, je n’aurais qu’une seule feuille sur laquelle je désirerais supprimer certaines lignes ne correspondant pas à certains critères. Peux-tu m’indiquer comment il faudrait s’y prendre s’il n’y a qu’un seul tableau à disposition ?

Amicalement.

Bonjour

Et avec un filtre élaboré (N'est plus en rapport avec le titre)

Option Explicit
Sub AutoFilter_Xxx()
Dim DerLig As Long

  Application.ScreenUpdating = False
  If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
  DerLig = Range("A" & Rows.Count).End(xlUp).Row
  Range("E2").Formula = "=NOT(OR(AND(C2=""Ville 1"",OR(B2=""Rue 3"",B2=""Rue 6"")),C2=""Ville 4""))"
  Range("A1:C" & DerLig).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("E1:E2"), Unique:=False
  Rows("2:" & DerLig).SpecialCells(xlCellTypeVisible).Delete
  If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
  Range("E2").ClearContents
End Sub

Merci Banzai pour ta dernière réponse qui est une solution très intéressante.

Mais dois-je comprendre que mon souhait de passer par "AutoFilter" est impossible ?

Cordialement.

Rechercher des sujets similaires à "utilisation autofilter vba"