Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

macro per cambiare il filtro campo pagina di una pivot

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

macro per cambiare il filtro campo pagina di una pivot

Postdi matzap » 16/04/13 08:43

Ciao a tutti;

ho un quesito da porvi:
ho due pivot, la prima ha come filtro in campo pagina un numero di matricola e la seconda è l'elenco di tutti i numeri di matricola.
sto cercando di creare una macro che per n-volte per ogni numero di matricola della seconda tabella, che può cambiare,filtri la pivot, la aggiorni, copi i valori e li incolli in un altro foglio, e passi alla matricola successiva.
di tutto questo procedimento non riesco a cambiare in automatico i filtro.
premetto che il problema è risolto in Office 2010 poichè nel menu a tendna del filtro c'è anche la casell "cerca dove posso incollare il valore(matricola copiata nell'altra pivot) da cercare, ma io ho a lavoro Office 2003 e questo campo non c'è!
come posso fare?

lo so come primo topic forse è un pò esigente, ma.... grazie anticipatamente
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Sponsor
 

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi matzap » 16/04/13 11:02

Ho provato cosi
m = ActiveSheet.Range("G9")
Sheets("Calcolo").Select
ActiveSheet.PivotTables("Tabella_pivot1").PivotFields("Matricola").CurrentPage = m
Sheets("Riassunto operatore").Select
ma mi dice impossibile impostare la proprietà_Default per la classe pivotItem

sapete dirmi come mai?

ciao
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi Anthony47 » 16/04/13 13:30

Prova a registrare una macro mentre esegui l' operazione di filtro, piu' aggiornamento dati, piu' copia dei dati e incolla nell' area di destinazione; poi pubblica il codice ottenuto e vedremo come ragionarci sopra.
Ti chiederei di pubblicare anche lo screenshot delle due tabelle, per meglio associare codice e tabelle; per come fare guarda qui: viewtopic.php?f=26&t=80395#p466013

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi matzap » 17/04/13 10:12

Ciao Anthony,
questo è il link dello screenshot:

http://imageshack.us/photo/my-images/83 ... ne3me.jpg/

questo invece il codice della macro registrata:

Sheets("Calcolo").Select
ActiveSheet.PivotTables("Tabella_pivot1").PivotFields("Matricola").CurrentPage _
= "54049"
Sheets("Riassunto operatore").Select
Range("A4").Select
Application.CutCopyMode = False
ActiveSheet.PivotTables("Tabella_pivot1").PivotCache.Refresh


provo a spiegare:
dal foglio "Riassunto Operatore", dalla tabellapivot3 leggo la matricola ( per esempio 54049)
in foglio "Calcolo" la seleziono nella tabella pivot1,
torno in foglio "Riassunto Operatore" e aggiorno la tabellapivot1 di quest foglio
nel immagine si legge "tot operatori=144" variabile di volta in volta.
dovrei fare questa operazione n-volte quante sono le matricole della tabella pivot3.
Non riesco ad attribuire una variabile al posto del numero di matricola da filtrare in tabella 1 foglio "calcolo".



ciao

torno al foglio Riassunto operatore
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi Anthony47 » 17/04/13 14:26

Se ti basta uno spunto, allora potresti usare una macro come questa per leggere ogni singolo valore che puo' assumere il primo campo di pivot3
Codice: Seleziona tutto
With Worksheets("Foglio1").PivotTables(1)
    For x = 1 To Worksheets("Foglio1").PivotTables(3).PivotFields(1).PivotItems.Count
        CurItem = .PivotFields(I).PivotItems(x).Value
'        Cells(x + 20, 1) = CurItem    '<< Test only
' codice selezione pagina
    Next
End With

CurItem assumera' tutti i possibili valori del campo Matricola, che userai per selezionare la CurrentPage sulla pivot1.

Altrimenti e' necessario che pubblichi un file di test per approfondire.

Nel codice della tua macro non ho trovato quale area viene copiata, mentre mi pare che "l' incollaggio" avviene su colonna A di Sheets("Riassunto operatore"); se non risolvi da solo allora spiega anche quale celle devi copiare e conferma la destinazione.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi matzap » 17/04/13 15:13

Grazie Anthony,
il tuo codice così applicato:

With Worksheets("Calcolo").PivotTables("Tabella_Pivot1")
For x = 1 To Worksheets("Calcolo").PivotTables("Tabella_Pivot1").PivotFields("Matricola").PivotItems.Count
CurItem = .PivotFields("Matricola").PivotItems(x).Value

mi ha permesso di evitare di passare per la Tabella_Pivot3 del foglio "Calcolo", che è un enorme vantaggio
ma ciò che non riesco a fare a filtrare automaticamente la Tabella_Pivot 1 di foglio "Riassunto operatore" con in valori di CurItem

intanto grazie la tua macro velocizza e alleggerisce molto il calcolo
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi matzap » 17/04/13 17:36

Scusami, mi sono intrecciato! sarà la mia inesperienza...
una volta trovato i CurItem da calcolo devo selezionarli uno alla volta in modo automatico....
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi Anthony47 » 17/04/13 22:47

Ottenuto CurItem lo devi usare nella macro che avevi registrato, modificando in
Codice: Seleziona tutto
ActiveSheet.PivotTables("Tabella_pivot1").PivotFields("Matricola").CurrentPage = CurItem

Come detto, per approfondimenti servira' un tuo file di test.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi matzap » 18/04/13 09:52

buongiorno Anthony,
ti allego un file di test:

http://rapidshare.com/files/475029726/f ... 0campo.xls

la macro che è inserita funziona ma va in errore quando trova valori non coerenti ad esempio un "vero" forse rimasto in memoria.
ho provato ad usare un On error goto per farlo passare oltre o uscire ma non riesco a trovare la giusta sintassi e posizione.
E forse dovrei anche pulire i campi all'aggiornamento della pivot e qui non ho idea di come fare.....
grazie
ciao
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi Anthony47 » 18/04/13 12:05

Il tuo file non e' accessibile, probabilmente lo hai inserito nel tuo folder privato di Rapidshare; vedi viewtopic.php?f=26&t=80395#p460098

Intanto prova ad eliminare dalle pivot eventuali campi non piu' usati, come descritto qui: viewtopic.php?f=26&t=97138&p=569555#p557426

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi matzap » 18/04/13 12:43

ora dovresti accedervi....
http://rapidshare.com/files/475029726/f ... 0campo.xls
ho avviato la macro, è partita e non si ferma più!!
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi Anthony47 » 19/04/13 00:19

No, il link e' lo stesso di prima e l' esito e' lo stesso; in Rapidshare devi creare un subfolder che dichiarerai condiviso, e sposterai il file in quel folder ottenendo un nuovo link.
Spero che nel frattempo la macro abbia terminato il suo lavoro; essa lavora su tutte le pivot di tutti i fogli del tuo file, eventualmente puoi limitarla a un foglio specifico o anche a una specifica pivottable.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi matzap » 19/04/13 19:22

La macro l'ho interrotta..
proverò poicon calma a eseguirla. Comunque sono riuscito a scrivere il codice che mi serviva. lunedi lo inserisco cosi puoi vederlo.
a proposito, dovrei selezionare i dati di una pivot senza però le etichette dei campi, solo i dati, come posso fare?

cioa e Buon weekend
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi Anthony47 » 20/04/13 17:09

Puoi ad esempio copiare il campo dati di una pivot in un array e poi scansionare la colonna che ti serve per estrarre i dati che ti servono:
Codice: Seleziona tutto
myVArr = Worksheets("Foglio1").PivotTables(1).DataBodyRange

La variabile myVArr conterra' tutte le righe e le colonne del campo dati; potrai accedere al dato che ti interessa con la notazione classica miodato=myVArr(x,y)

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi matzap » 22/04/13 11:21

Ciao Antony,
questo è la macro che attiva uno alla volta i valori del campo pagina, aggiorna poi una seconda pivot, copia i dati e li incolla come valori in un altro foglio nella prima casella libera a partire dalla colonna A.
Sicuramente ci sono alcune operazioni un pò ripetitive dettate dalla inesperienza, (ad esempioil continuo cambio di pagina o il valore mostrato in C3), ma in questo modo visualizzo meglio cosa fa la macro...
grazie dell'aiuto.

Sub automatismi()

Dim x As Integer

Worksheets("Calcolo").Select
With Worksheets("Calcolo").PivotTables("Tabella_Pivot1")
For x = 1 To Worksheets("Calcolo").PivotTables("Tabella_Pivot1").PivotFields("Matricola").PivotItems.Count
CurItem = .PivotFields("Matricola").PivotItems(x).Value
Worksheets("Calcolo").Range("C3") = CurItem
ActiveSheet.PivotTables("Tabella_pivot1").PivotFields("Matricola").CurrentPage = CurItem
Worksheets("Riassunto operatore").Select
Worksheets("Riassunto operatore").PivotTables("Tabella_Pivot1").PivotCache.Refresh
ActiveSheet.PivotTables("Tabella_pivot1").PivotSelect "", xlDataAndLabel, True
Selection.Copy
Worksheets("riepilogo automatico").Select
If ActiveSheet.Range("A2") = Empty Then
ActiveSheet.Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Worksheets("Calcolo").Select
Else
ActiveSheet.Range("A1").End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Worksheets("Calcolo").Select
End If
Next
End With
Worksheets("Calcolo").Select
ActiveSheet.Range("C3").ClearContents
End Sub
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi Anthony47 » 22/04/13 23:24

Hum... vedo che quindi avevi bisogno di indirizzare anche le label (xlDataAndLabel) e di copiarle in toto in altra locazione.
L' alternativa via array sarebbe stata qualcosa come
Codice: Seleziona tutto
myVArr = Worksheets("Riassunto operatore").PivotTables("Tabella_Pivot1").TableRange1
Sheets("riepilogo automatico").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(UBound(myVArr, 1), UBound(myVArr, 2)).Value = myVArr
(in sostituzione delle righe da ActiveSheet.PivotTables("Tabella_pivot1").PivotSelect "", xlDataAndLabel, True a Next, incluse)

Comunque cosi' come hai scritto hai risolto, vero?
Per quanto riguarda l' estetica, una macro che funziona e' bellissima anche se il pc vibra tutto. Col tempo ti accorgerai che puoi evitare le "vibrazioni" semplicemente usando Application.ScreenUpdating = False all' inizio della macro e Application.ScreenUpdating = True a conclusione; poi imparerai a indirizzare direttamente i Workbooks, i Worksheets e le celle specificandoli all' interno delle istruzioni (come ad esempio ho fatto, parzialmente, nelle righe che ho suggerito sopra).

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi matzap » 23/04/13 11:06

Fantastico questo screen updating!!

per l'altro problema quello che non riesco a fare è proprio selezionare solo i dati.
non riesco a far funzionare il codice che mi hai dato:
se modifico la macro così:
Codice: Seleziona tutto
Sub automatismi()

Dim x As Integer
Application.ScreenUpdating = False
Worksheets("Calcolo").Select
ActiveSheet.Unprotect "Elisabetta"
Worksheets("Riassunto operatore").Select
ActiveSheet.Unprotect "Elisabetta"
Worksheets("riepilogo automatico").Select
ActiveSheet.Unprotect "Elisabetta"
Rows("1:1").Select
        Selection.AutoFilter
Worksheets("Calcolo").Select
ActiveSheet.Unprotect "Elisabetta"
With Worksheets("Calcolo").PivotTables("Tabella_Pivot1")
    For x = 1 To Worksheets("Calcolo").PivotTables("Tabella_Pivot1").PivotFields("Matricola").PivotItems.Count
        CurItem = .PivotFields("Matricola").PivotItems(x).Value
        Worksheets("Calcolo").Range("C3") = CurItem
   ActiveSheet.PivotTables("Tabella_pivot1").PivotFields("Matricola").CurrentPage = CurItem
    Worksheets("Riassunto operatore").Select
   Worksheets("Riassunto operatore").PivotTables("Tabella_Pivot1").PivotCache.Refresh
   'ActiveSheet.PivotTables("Tabella_pivot1").PivotSelect "", xlDataAndLabel, True
   'Selection.Copy
   'Worksheets("riepilogo automatico").Select
   'If ActiveSheet.Range("A2") = Empty Then
   'ActiveSheet.Range("A1").Select
   'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    '    :=False, Transpose:=False
    'Worksheets("Calcolo").Select
     '   Else
   'ActiveSheet.Range("A1").End(xlDown).Offset(1, 0).Select
   'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
   '     :=False, Transpose:=False
   ' Worksheets("Calcolo").Select
  '  End If
'Next

myVArr = Worksheets("Riassunto operatore").PivotTables("Tabella_Pivot1").TableRange1
Sheets("riepilogo automatico").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(UBound(myVArr, 1), UBound(myVArr, 2)).Value = myVArr
End With
Worksheets("riepilogo automatico").Select
    Rows("1:1").Select
        Selection.AutoFilter
ActiveSheet.Protect "Elisabetta", DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFiltering:=True
Worksheets("Riassunto operatore").Select
ActiveSheet.Protect "Elisabetta", DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowUsingPivotTables:=True
Worksheets("Calcolo").Select
ActiveSheet.Range("C3").ClearContents
    ActiveSheet.Protect "Elisabetta", DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowUsingPivotTables:=True
        Application.ScreenUpdating = True
Worksheets("riepilogo automatico").Select
End Sub
mi dice : end with senza with,
mentre se lascio il next, non mi da debug all'istruzione: ActiveSheet.PivotTables("Tabella_pivot1").PivotFields("Matricola").CurrentPage = CurItem
dicendo impossibile impostare la proprietà CurrentPage per la classe PIvotField,
forsse succede quando la pivot è senza dati, ma con lo scorrere dei campi pagina se nascono i campi poi mi da altri debug..

Ciao
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi Anthony47 » 23/04/13 13:47

Per favore metti alle macro i "tag" codice (seleziona il codice, premi il tasto di formattazione Code).

Per selezionare solo i dati, derivato da quanto avevo suggerito un paio di messaggi fa:
Codice: Seleziona tutto
Worksheets("Foglio1").PivotTables(1).DataBodyRange.Select

Per l' errore End with without With, ti ho erroneamente fatto eliminare anche la Next che doveva invece rimanere (dopo le istruzioni che h suggerito di usare in sostituzione delle tue).

Pero' se non pubblichi un file di test continuiamo a perdere tempo...
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi matzap » 23/04/13 21:44

ok ci riprovo, però essendo andato avanti con il proramma devo preparare un nuovo file: sull'originale ci sono nomi e cognomi che preferisco non divulgare. appena è pronto provo di nuovo a pubblicarlo.
grazie e ciao
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Re: macro per cambiare il filtro campo pagina di una pivot

Postdi matzap » 23/04/13 22:23

Questo è il link
http://rapidshare.com/files/3696960277/ ... 0test.xlsm
spero sia accessibile
ciao
excel 2010
matzap
Utente Senior
 
Post: 227
Iscritto il: 16/04/13 08:27

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "macro per cambiare il filtro campo pagina di una pivot":


Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti