Filtre Avancé sur plage Filtrée

Bonsoir chers tous

Sur ma feuille "A" je voudrais faire un filtre sur la colonne 9 et avec les données filtrées opérer un filtre avancé puis coller le résultat sur la feuille "B"

Voici ce que j'ai essayé mais cela ne marche pas. Merci de m'aider

Sub Filtre()
Dim p As Range
Set p = Sheets("A").Range("A1:M" & Sheets("A").Range("A" & Rows.Count).End(xlUp).Row)
p.AutoFilter Field:=9, Criteria1:="Non"
With Sheets("B")
    p.SpecialCells(xlVisible).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("A1:G1"), Unique:=True
End With
p.AutoFilterMode = False
End Sub
9classeur1.xlsm (22.64 Ko)

Bonjour,

  1. Tu ne peux pas coller une plage qui va de A à M, dans une plage qui ne va que de A à G
  2. Ensuite je n'ai pas compris s'il y avait 2 actions de filtrage ou une seule car tu dis

Sur ma feuille "A" je voudrais faire un filtre sur la colonne 9 et avec les données filtrées opérer un filtre avancé puis coller le résultat sur la feuille "B"

ci-après une solution

Option Explicit
Sub Filtre()
Dim p As Range
    Set p = Sheets("A").Range("A1:M" & Sheets("A").Range("A" & Rows.Count).End(xlUp).Row)
    p.AutoFilter Field:=9, Criteria1:="Non"
    p.SpecialCells(xlVisible).Copy Destination:=Sheets("B").Range("A1")
End Sub

Bonjour,

Bonjour Steelson,

Une autre proposition. Les données sont sous forme de tableaux structurés.

En attendant un complément d'informations...

Cdlt.

3classeur1.xlsm (24.07 Ko)
Public Sub CreateAndCopyFilteredData()
Dim lo As ListObject, lo2 As ListObject
Dim r As Range, rng As Range
Dim n As Long

    Set lo = Range("Input").ListObject
    Set lo2 = Range("Output").ListObject

    If Not lo2.DataBodyRange Is Nothing Then lo2.DataBodyRange.Delete

    With lo
        If .ShowAutoFilter Then .AutoFilter.ShowAllData
        .Range.AutoFilter field:=9, Criteria1:="Non"
        n = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
        If n > 0 Then
            Set rng = .AutoFilter.Range
            rng.Offset(1).Resize(rng.Rows.Count - 1).Copy Destination:=lo2.InsertRowRange.Cells(1)
        End If
    End With

    lo.Range.AutoFilter field:=9

End Sub

Bonjour,

  1. Tu ne peux pas coller une plage qui va de A à M, dans une plage qui ne va que de A à G
  2. Ensuite je n'ai pas compris s'il y avait 2 actions de filtrage ou une seule car tu dis

Sur ma feuille "A" je voudrais faire un filtre sur la colonne 9 et avec les données filtrées opérer un filtre avancé puis coller le résultat sur la feuille "B"

ci-après une solution

Option Explicit
Sub Filtre()
Dim p As Range
    Set p = Sheets("A").Range("A1:M" & Sheets("A").Range("A" & Rows.Count).End(xlUp).Row)
    p.AutoFilter Field:=9, Criteria1:="Non"
    p.SpecialCells(xlVisible).Copy Destination:=Sheets("B").Range("A1")
End Sub

MERCI BEAUCOUP

Bonjour,

Bonjour Steelson,

Une autre proposition. Les données sont sous forme de tableaux structurés.

En attendant un complément d'informations...

Cdlt.

3classeur1.xlsm (24.07 Ko)
Public Sub CreateAndCopyFilteredData()
Dim lo As ListObject, lo2 As ListObject
Dim r As Range, rng As Range
Dim n As Long

    Set lo = Range("Input").ListObject
    Set lo2 = Range("Output").ListObject

    If Not lo2.DataBodyRange Is Nothing Then lo2.DataBodyRange.Delete

    With lo
        If .ShowAutoFilter Then .AutoFilter.ShowAllData
        .Range.AutoFilter field:=9, Criteria1:="Non"
        n = .AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
        If n > 0 Then
            Set rng = .AutoFilter.Range
            rng.Offset(1).Resize(rng.Rows.Count - 1).Copy Destination:=lo2.InsertRowRange.Cells(1)
        End If
    End With

    lo.Range.AutoFilter field:=9

End Sub

SUPER

Bonjour,

Rechercher des sujets similaires à "filtre avance plage filtree"