Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione di dati
Ciao Nicola,
Ciao, se in un foglio excel ho due tabelle una esattamente sotto l'altra, se provo a mettere il filtro nelle colonne della prima non posso metterlo sulla seconda sotto.
Esiste una soluzione per mettere il filtro contemporaneamente su tutte e due le tabelle?
Ponendo che le due tabelle di interesse siano tabelle di Excel, in un modulo di codice standard, prova il seguente codice:
'========>>
Option Explicit
'-------->>
Public Sub Synchronise_Filters()
Dim SH As Worksheet
Dim oTabella As ListObject, oTabella2 As ListObject
Dim vVal As Variant
Dim Arr As Variant
Dim oAutoFilter As AutoFilter, oAutoFilter2 As AutoFilter
Dim i As Long
Const sFoglio As String = **"TABELLE" '<<=== Modifica**
Const sTabella As String = **"Table1" '<<=== Modifica**
Const sTabella2 As String = **"Table2" '<<=== Modifica**
Set SH = ThisWorkbook.Sheets(sFoglio)
With SH
Set oTabella = .ListObjects(sTabella)
Set oTabella2 = .ListObjects(sTabella2)
End With
Set oAutoFilter = oTabella.AutoFilter
Set oAutoFilter2 = oTabella2.AutoFilter
With oAutoFilter
If .FilterMode Then
For i = 1 To .Filters.Count
ReDim Arr(0)
If .Filters(i).On Then
If IsArray(.Filters(i).Criteria1) Then
For Each vVal In .Filters(i).Criteria1
Arr(UBound(Arr)) = Mid(vVal, 2, Len(vVal))
ReDim Preserve Arr(UBound(Arr) + 1)
Next vVal
ReDim Preserve Arr(UBound(Arr) - 1)
Else
Arr(UBound(Arr)) = oAutoFilter.Filters(i).Criteria1
ReDim Preserve Arr(UBound(Arr) + 1)
On Error Resume Next
Arr(UBound(Arr)) = oAutoFilter.Filters(i).Criteria2
If Err <> 0 Then ReDim Preserve Arr(UBound(Arr) - 1)
On Error GoTo 0
End If
oTabella2.Range.AutoFilter Field:=i, Criteria1:=Arr, Operator:=xlFilterValues
Else
oTabella2.Range.AutoFilter Field:=i
End If
Next i
Else
With oTabella2.Range
For i = 1 To .Columns.Count
.AutoFilter Field:=i
Next i
End With
End If
End With
End Sub
'<<========
Potresti scaricare il mio file di prova Nicola20221021.xlsm
===
Regards,
Norman