Spiacente, rep insufficiente per commentare. (Admins, sentitevi liberi di tagliare questo in un commento sopra.) La risposta dell'utente “danicotra” che inizia con “Anche io uso un VBA/Macro basato sull'evento Worksheet\Change, ma il mio approccio…” con 
‘ prima rimuovi il filtro 
’ poi applicalo di nuovo 
è la soluzione corretta quando si usa Excel 2007+. Tuttavia .AutoFilter.ApplyFilter non è valido in XL03 e precedenti quindi mostro il modo seguente. 
Prego che i veri esperti e guru leggano il codice perché sono abbastanza sicuro che sia materiale di alta qualità. Forse l'inspiegabile conteggio di downvote su questa risposta può essere invertito quando la gente vede che cosa buona è fatta sotto. 
danicotra ha usato un esempio semplificato. In realtà, puoi farlo più in generale. Assumi Con ActiveSheet per il seguente (o qualche altro oggetto foglio): 
- Salva l'intervallo dell'autofiltro. Ha colonne .AutoFilter.Filters.Count e righe (.AutoFilter.Range.Count/.AutoFilter.Filters.Count), salvate in rngAutofilter  
- Raccogliete in un array myAutofilters ciascuna delle 4 proprietà di ciascuno degli elementi del filtro automatico .AutoFilter.Filters.Count, facendo attenzione ad evitare “errori definiti dall'applicazione” quando .On o .Operator è falso. (myAutofilters verrebbe ridimensionato al numero di righe e colonne del passo 1)  
- Disattivate il filtro ma conservate le tendine con .ShowAllData  
- Per ogni elemento del filtro che era .On secondo il tuo array salvato, resetta 3 delle 4 proprietà di ogni elemento del filtro automatico .AutoFilter.Filters.Count. Ancora una volta fate attenzione ad evitare “errori definiti dall'applicazione” quando .Operator è falso, quindi per ogni elemento “i”, 
rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i,2) 
o 
rngAutofilter. AutoFilter Field:=i, Criteria1:=myAutofilters(i,2), Operator:=myAutofilters(i,3), Criteria2:=myAutofilters(i,4)  
Ora l'autofiltro sarà ripristinato, sullo stesso intervallo che era prima che il vostro codice iniziasse, ma con l'autofiltro aggiornato per i cambiamenti nei dati. 
Public myAutofilters As Variant, rngAutofilter As Range 'Public
Sub SaveAndRestoreAutofilters()
  'This will update the autofilter display to recognize data changes by turning autofilter off and then on, preserving all characteristics
  'Note, XL2007 and later have .autofilter.applyfilter, but not the invaluable XL03 and earlier
  Dim i As Long, iNumAutofilters As Long, iNumActiveAutofilters As Long
  iNumActiveAutofilters = SaveAutoFilterInfo(iNumAutofilters) 'NOTE! Use CALL or assignment to prevent parentheses from forcing ByVal !
  If iNumActiveAutofilters < 1 Then
      Application.StatusBar = "0 ACTIVE filters;" & iNumAutofilters & " autofilters"
      Exit Sub
  End If
  ActiveSheet.ShowAllData
  Rem Here optionally do stuff which can include changing data or toggling autofilter columns
  For i = 1 To iNumAutofilters
      If myAutofilters(i, 1) Then
          If myAutofilters(i, 3) <> 0 Then 'then .Operator is something, so set it and Criteria2, else just Criteria1
              rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i, 2), Operator:=myAutofilters(i, 3), Criteria2:=myAutofilters(i, 4) ', On:=true by rule
          Else
              rngAutofilter.AutoFilter Field:=i, Criteria1:=myAutofilters(i, 2) ', On:=true by rule (it's R/O anyway)
          End If
          Rem Selection.AutoFilter Field:=i 'How you'd "turn off" only a single column's autofiltering. FYI .On is R/O!
      End If
      'activesheet.autofiltermode=false 'just FYI, how you comprehensively turn off filtering on a sheet (erasing the dropdowns and criteria and filter range!)
  Next i
End Sub
Function SaveAutoFilterInfo(iNumAutofilters As Long) As Long
  Dim i As Long, iRowsAutofiltered As Long
  SaveAutoFilterInfo = 0 'counts the number that are .On, and returns the total
  iNumAutofilters = ActiveSheet.AutoFilter.Range.Columns.Count
  If ActiveSheet.AutoFilter.Filters.Count <> iNumAutofilters Then MsgBox "I can't explain this. All bets are off. Aborting.": Exit function
  ReDim myAutofilters(1 To iNumAutofilters, 4)
  For i = 1 To iNumAutofilters
      myAutofilters(i, 1) = ActiveSheet.AutoFilter.Filters(i).On
      If myAutofilters(i, 1) Then
          SaveAutoFilterInfo = SaveAutoFilterInfo + 1
          myAutofilters(i, 2) = ActiveSheet.AutoFilter.Filters(i).Criteria1
          myAutofilters(i, 3) = ActiveSheet.AutoFilter.Filters(i).Operator
          If myAutofilters(i, 3) <> 0 Then 'then is either xlAnd, xlOr, etc., and there's a second criteria
              myAutofilters(i, 4) = ActiveSheet.AutoFilter.Filters(i).Criteria2
          End If
      End If
  Next i
  iRowsAutofiltered = ActiveSheet.AutoFilter.Range.Count / ActiveSheet.AutoFilter.Range.Columns.Count
  Set rngAutofilter = Cells(ActiveSheet.AutoFilter.Range.Row, ActiveSheet.AutoFilter.Range.Column).Resize(iRowsAutofiltered, iNumAutofilters)
End Function