Replica pagina filtrata su altri fogli stessa cartella

35 views
Skip to first unread message

Final Job

unread,
Aug 2, 2022, 12:09:13 PMAug 2
to
Buonasera.
Nel Tab "Principale" di una cartella excel ho un data base contenente
una serie di articoli, descrizioni ed altre informazioni.

Lo stesso elenco articoli è riportato in alcuni altri TABs dedicati a
valutazioni specifiche sugli stessi prodotti presenti nel TAB "Principale".

E' pensabile di replicare ad ogni cambio di foglio la rappresentazione
dei dati presente in "Principale" a seguito dell'applicazione di alcuni
filtri?

Grazie
Ale


--
Questa email è stata esaminata alla ricerca di virus da AVG.
http://www.avg.com

casanmaner

unread,
Aug 2, 2022, 1:45:59 PMAug 2
to
Ciao Ale,
scarica questo modulo standard, da importare nel progetto vba del file, nel quale troverai il codice che consente di impostare gli stessi filtri presenti in un foglio "principale" ad un diverso foglio.

https://www.dropbox.com/s/6j7rbfemomx9o7c/M_Filtra_Pi%C3%B9_Fogli.bas?dl=0

Le procedure che fanno il "lavoro sporco" sono una funzione:
Function Memorizza_Filtri_Foglio_Principale

il cui unico argomento è il foglio dove è presente il filtro e i cui parametri dello stesso vengono memorizzati per essere poi passati alla seconda procedura

Sub Imposta_Filtri_Foglio_Secondario

che presenta tre argomenti e in particolare il nome del foglio dove è presente l'elenco a cui applicare il filtro, la prima cella dell'elenco e, infine, i parametri del filtro prelevati dalla precedente funzione che memorizza le impostazioni del filtro.

Poi c'è una procedura di test.
Tu potresti utilizzare l'evento Worksheet_Deactivate del foglio principale per memorizzare in una variabili pubblica i filtri e poi utilizzare l'evento Worksheet_Activate per impostare i filtri del foglio che viene attivato assegnando il nome del foglio che viene attivato, la cella iniziale dell'elenco (inteso come cella di intestazione) e la variabile che ha memorizzato i filtri.

Un esempio concreto molto banale con due fogli. Foglio1 il foglio principale dal quale vengono presi i filtri impostati e Foglio2 che quando viene selezionato viene filtrato in base ai filtri di Foglio1

https://www.dropbox.com/s/dgyds8733r1996p/Replica%20pagina%20filtrata%20su%20altri%20fogli%20stessa%20cartella.xlsm?dl=0


P.s. questa procedura è una rielaborazione di una soluzione di Norman Jones se non ricordo male

Final Job

unread,
Aug 3, 2022, 10:37:07 AMAug 3
to
Il 02/08/2022 19:45, casanmaner ha scritto:
> https://www.dropbox.com/s/6j7rbfemomx9o7c/M_Filtra_Pi%C3%B9_Fogli.bas?dl=0

Ciao e, ancora una volta, grazie.

Il file dropbox è ciò che serve. Il file .bas ha al suo interno
istruzioni di altra natura ma va bene così.

Buona giornata a tutti
Ale

Final Job

unread,
Aug 3, 2022, 10:52:58 AMAug 3
to
Forse sbaglio io ?

Final Job

unread,
Aug 3, 2022, 10:56:05 AMAug 3
to
Anche dal PC, nella sua interezza, appare essere una sub di stampa.

Ciao

issdr

unread,
Aug 3, 2022, 5:17:00 PMAug 3
to
Final Job wrote:

> Anche dal PC, nella sua interezza, appare essere una sub di stampa.

l'ho aperto come file di testo, mi sembra un modulo da importare, ha a
che fare con i filtri... magari viene caricato dall'altro codice scritto
da casanmaner (che non ho ancora guardato)

Final Job

unread,
Aug 3, 2022, 5:21:53 PMAug 3
to
Il 03/08/2022 23:16, issdr ha scritto:
> Final Job wrote:

> l'ho aperto come file di testo, mi sembra un modulo da importare, ha a
> che fare con i filtri... magari viene caricato dall'altro codice scritto
> da casanmaner (che non ho ancora guardato)

Si, è un modulo da importare ed una volta importato io non riesco a
metterlo in relazione a quanto casanmaner ha postato (e inserito su
dropbox) che, in ogni caso, è funzionante e risponde pienamente alla
domanda.

Ciao

casanmaner

unread,
Aug 4, 2022, 2:27:15 AMAug 4
to
Il giorno mercoledì 3 agosto 2022 alle 23:21:53 UTC+2 Final Job ha scritto:
> Il 03/08/2022 23:16, issdr ha scritto:
> > Final Job wrote:
>
> > l'ho aperto come file di testo, mi sembra un modulo da importare, ha a
> > che fare con i filtri... magari viene caricato dall'altro codice scritto
> > da casanmaner (che non ho ancora guardato)
> Si, è un modulo da importare ed una volta importato io non riesco a
> metterlo in relazione a quanto casanmaner ha postato (e inserito su
> dropbox) che, in ogni caso, è funzionante e risponde pienamente alla
> domanda.

Ciao Ale il modulo l'ho inserito eventualmente per averlo a disposizione per altri file tramite l'importazione dello stesso.

Nel file Excel ho poi scritto il codice degli eventi per fare un esempio di utilizzo di quanto presente nel modulo.

La logica sottostante è piuttosto semplice.
Da una parte "catturi" le impostazioni del filtro automatico presente in un foglio. E questo viene fatto tramite la funzione "Memorizza_Filtri_Foglio_Principale"

Poi con la routine (sub) "Imposta_Filtri_Foglio_Secondario", che presenta similmente a una funzione degli argomenti, assegni i valori memorizzati all'argomento "vFilters".
Gli altri due argomenti della routine sono il nome del foglio a cui applicare i filtri e la cella da cui parte, dove è presente la prima intestazione, la "tabella" da filtrare.
Nel file di esempio, dopo aver dichiarato una variabile pubblica "Public arrFiltri As Variant" valorizzo tale variabile quando si disattiva il foglio di partenza in modo che in memoria vi siano i dati dei filtri applicati.
E poi quando si attiva il foglio desiderato, tramite l'evento "activate", applico i filtri all'intervallo desiderato di quel foglio.

ciao

Final Job

unread,
Aug 4, 2022, 7:05:46 AMAug 4
to
Ciao!

Scusa se vieni nuovamente chiamato in causa. La riserva che avevo posto
era riferita al listato che compare nel modulo contenuto qui:

https://www.dropbox.com/s/6j7rbfemomx9o7c/M_Filtra_Pi%C3%B9_Fogli.bas?dl=0

il tuo file contenuto al seguente link lavora bene, è di facile
applicazione e risponde pienamente al questito:

https://www.dropbox.com/s/dgyds8733r1996p/Replica%20pagina%20filtrata%20su%20altri%20fogli%20stessa%20cartella.xlsm?dl=0

Ho una ulteriore domanda, sempre che tu possa. La soluzione lavora su
due fogli (FoglioPrincipale e FoglioSecondario con relative costanti).
Se avessi necessità di replicare i filtri su più fogli ho visto che mi
si intreccia molto il tutto e poi, con tutti i dati presenti nei fogli,
l'esecuzione di ulteriori operazioni di filtraggio penalizzano parecchio
ma la domanda mi è attuale. Come si può agire secondo te?

Final Job

unread,
Aug 4, 2022, 7:08:33 AMAug 4
to
Stavo pensando di puntare, di volta in volta, al nome del foglio che
vado ad attivare replicando il settaggio dei filtri come da
"PoglioPrincipale".

casanmaner

unread,
Aug 4, 2022, 8:41:51 AMAug 4
to
Ciao Ale il listato presente nel file .bas è esattamente quello del foglio di esempio
'Funzione e procedura per applicare gli stessi filtri presenti in un foglio "principale" ad un foglio secondario
Option Private Module
Option Explicit

Sub ImpostaFiltriMain()
Dim vFilters As Variant
Const sFoglioPrincipale As String = "FoglioPrincipale"
Const sFoglioSecondario As String = "FoglioSecondario"
Const sPrimaCella As String = "A6"
vFilters = Memorizza_Filtri_Foglio_Principale(sFoglioPrincipale)
Call Imposta_Filtri_Foglio_Secondario(sFoglioSecondario, sPrimaCella, vFilters)
End Sub

Function Memorizza_Filtri_Foglio_Principale(sNomeFoglioPrincipale As String) As Variant
Dim Ws As Worksheet
Dim arrFilters As Variant
Dim i As Long, iFilters As Long
Set Ws = ThisWorkbook.Worksheets(sNomeFoglioPrincipale)
With Ws
If .AutoFilterMode Then
iFilters = .AutoFilter.Filters.Count
ReDim arrFilters(1 To iFilters, 1 To 3)
On Error Resume Next
For i = 1 To iFilters
With .AutoFilter.Filters(i)
If .On Then
arrFilters(i, 1) = .Criteria1
arrFilters(i, 2) = .Operator
arrFilters(i, 3) = .Criteria2
End If
End With
Next i
On Error GoTo 0
End If
End With
Memorizza_Filtri_Foglio_Principale = arrFilters
End Function

Sub Imposta_Filtri_Foglio_Secondario(sNomeFoglioSecondario As String, _
sPrimaCella As String, _
vFilters As Variant)
Dim Ws As Worksheet
Dim i As Long, iFilters As Long, iMinFilters As Long
Set Ws = ThisWorkbook.Worksheets(sNomeFoglioSecondario)
With Ws
If IsEmpty(vFilters) Then
If .AutoFilterMode Then
If .FilterMode Then .ShowAllData
End If
Exit Sub
End If
If Not .AutoFilterMode Then .Range(sPrimaCella).AutoFilter
iFilters = .AutoFilter.Filters.Count
iMinFilters = Application.Min(iFilters, UBound(vFilters, 1))
With .Range(sPrimaCella)
For i = 1 To iMinFilters
.AutoFilter Field:=i
If Not IsEmpty(vFilters(i, 1)) Then
If vFilters(i, 2) <> 0 Then
.AutoFilter Field:=i, _
Criteria1:=vFilters(i, 1), _
Operator:=vFilters(i, 2), _
Criteria2:=vFilters(i, 3)
Else
.AutoFilter Field:=i, _
Criteria1:=vFilters(i, 1)
End If
End If
Next i
End With
End With
End Sub


Per replicare su più fogli i filtri applica l'evento Activate per i fogli per cui desideri l'applicazione facendo in modo che il nome del foglio sia lo stesso di quello che viene attivato.

in pratica applicare questo listato:
Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
Call Imposta_Filtri_Foglio_Secondario(Me.Name, "A3", arrFiltri)
Application.ScreenUpdating = True
End Sub

ai moduli di classe dei fogli di lavoro.

In alternativa se i fogli sono molti potresti sfruttare l'evento della cartella di lavoro (ThisWorkbook o Questa_cartella_di_cavoro)

Private Sub Workbook_SheetActivate(ByVal Sh As Object)


dove sh è il foglio che viene attivato
Esempio

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Const sFogliDaFiltrare As String = "Foglio2,Foglio3"
Dim arrFogliDaFiltrare As Variant
arrFogliDaFiltrare = Split(sFogliDaFiltrare, ",")
If Not IsError(Application.Match(Sh.Name, arrFogliDaFiltrare, 0)) Then
Application.ScreenUpdating = False
Call Imposta_Filtri_Foglio_Secondario(Sh.Name, "A3", arrFiltri)
Application.ScreenUpdating = True
End If
End Sub

Ovviamente i fogli da filtrare dovrebbero avere la prima cella della "tabella" comune.
Diversamente occorrerebbe andare a distinguere tra i nomi dei fogli selezionati utilizzando Select Case nel caso.

Al solito link trovi il file excel modificato con questa modifica.

ciao

Final Job

unread,
Aug 4, 2022, 9:55:56 AMAug 4
to
Ma io non ho quel listato nel modulo del file .bas che importo passando
dalla scheda "sviluppo".

Adesso non posso indagare, sicuramente sbaglio io, domani se riesco vedo
subito; sono curioso di capire.

Anche per il resto ho bisogno di un pò di calma. Ti darò riscontro al
più presto.

Grazie per il tempo, come sempre.
Ale

Final Job

unread,
Aug 12, 2022, 9:01:10 AMAug 12
to
Scusate ma mi è passato di mente.
Tutto funzionante.
Ringrazio nuovamente.
Ale


--
Questa email è stata esaminata alla ricerca di virus dal software antivirus AVG.
www.avg.com

Reply all
Reply to author
Forward
0 new messages