Je travaille avec des filtres automatiques dans VBA avec Microsoft Excel. J'ai un problème avec la façon dont il gère les tableaux pour le filtrage

J'ai créé la macro et le filtre automatique est ci-dessous.

ActiveSheet.Range("$A$1:$AC$500").AutoFilter Field:=15, Criteria1:="Not Met"

Mais parfois dans les lignes, je ne recevrai pas d'appels avec la condition "Non satisfait" et le menu déroulant est vide à ce moment-là ma macro donne une erreur et ne progresse pas, comment surmonter cela, y a-t-il un moyen que je puisse déclarer si aucune correspondance trouvé copie seulement en-tête.

1
Kittu 3 avril 2017 à 12:48

2 réponses

Meilleure réponse

Une fois que vous avez filtré vos résultats, vous pouvez utiliser SpecialCells pour tester si vous avez trouvé des résultats

Sub Test()
    With ThisWorkbook.Worksheets("Sheet1").Range("A1:AC500")
        .AutoFilter Field:=15, Criteria1:="Not Met"
        If .SpecialCells(xlCellTypeVisible).Count > .Columns.Count Then
            'results found
        Else
            'results not found
        End If
    End With
End Sub
0
CallumDA 3 avril 2017 à 10:25

Vous pouvez adopter le modèle suivant:

With Worksheets("MySheetName") '<--| change "MySheetName" to your actual sheet name and avoid referring to ActiveSheet which can be deceiving
    With .Range("AC", .Cells(.Rows.Count, 1).End(xlUp)) '<--| reference its columns A:AC cells from row 1 down to column A last not empty one
        .AutoFilter Field:=15, Criteria1:="Not Met"
        If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then '<--| if any filered cells other than headers
            With .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible) '<--| reference filtered cells skipping headers
                ' your code to handle filtered data
            End With
        Else
            ' your code to handle no data match condition
        End If
    End With
    .AutoFilterMode = False '<-- remove autofilter
End With
0
user3598756 3 avril 2017 à 10:26