Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Pivot Table aggiornamento valori

Ultimo Aggiornamento: 05/07/2019 10:35
Post: 10
Registrato il: 21/02/2004
Utente Junior
2007
OFFLINE
01/07/2019 10:21

Ciao! non sono molto pratica con vba e mi arrangio con la creazione di macro con registratore.. :-(. ho un problema: vorrei aggiornere la mia pivot table in maniera che mi venisse chiesto di volta in volta se voglio Coa Value (nell'esempio sotto) piuttosto che altri (ne ho 12 da scegliere). esite una sorta di input box che mi faccia la domanda e si aspetti la selezione prime di procedere (chiedendo anche se voglio la somma dei valori (sum of Coa nell'esempio), piuttosto che altro?


Range("B3").Select
ActiveSheet.PivotTables("Tabella pivot1").AddDataField ActiveSheet.PivotTables( _
"Tabella pivot1").PivotFields("CoA Value"), "Sum of CoA Value", xlSum



grazie mille per qualsiasi suggerimento mi possiate dare
Post: 2.302
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
01/07/2019 11:15

Ciao

prova:
op1 = xlSum
op2 = xlCount
op3 = xlAverage
op4 = xlMax
op5 = xlMin
op6 = xlProduct
campo = InputBox("Nome del campo della tabella")
descrizione = InputBox("Intestazione del campo")

Range("B3").Select
ActiveSheet.PivotTables("Tabella pivot1").AddDataField ActiveSheet.PivotTables( _
"Tabella pivot1").PivotFields(campo), descrizione, op1 'oppure op2 - op3 - etc etc

le variabili iniziali da op1 a op6 vengono utilizzate per stabilire quale tipo di operazione effettuare sul campo scelto.

Nulla ti vieta di riservare una parte del foglio a tutte le variabili in atto ed utilizzarle nella macro al posto delle inputBox.
Mi spiego meglio: se per esempio in A1 metti una convalida con le "op" possibili (xlSum-xlAvergae ecc), in A2 un'altra convalida con tutti i nomi campo ed in A3 la intestazione che vuoi, nella macro al posto delle inputbox ci scrivi ...=range("xy")...Spero di esser stato chiaro.

saluti



Domenico
Win 10 - Excel 2016
Post: 10
Registrato il: 21/02/2004
Utente Junior
2007
OFFLINE
01/07/2019 15:53

ti ringrazio. ho un altro problema che si aggiunge. oltre a scegliere se fare la somma, la media, il conteggio,..nel menù dove si possono scegliere i campi posso scegliere se ammontare 1, ammontare 2 fino a 12 e posso scegliere anche se li voglio come valore ponderato: totale di 24 pivot. questa macro non solo deve scegliere se fare la somma, ma dovrebbe chiedere che tipo di ammontare (1,2,...,12 o pesato 1,2,...,12). se riesci a darmi un'altra dfritta ti ringrazio.
Post: 2.303
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
01/07/2019 16:32

ciao
non capisco...fai un esempio allegando un file

saluti



Domenico
Win 10 - Excel 2016
Post: 11
Registrato il: 21/02/2004
Utente Junior
2007
OFFLINE
01/07/2019 17:26

allego un esempio. come vedi ci sono 6 valori e 6 valori pesati. in totale verrebbero 12 tabelle pivot. pensavo a qualcosa che mi chieda che valore voglio e da qui aggiorni la tabella pivot. di fatto quindi avendone solo una. Spero sia più chiaro ora. grazie mille. se dovesse essere improponibile mi arrendo alle n tabelle :-(
Post: 2.304
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
01/07/2019 19:30

ciao
nel foglio pivot ci sono 2 convalide in B1 e C1 (quest'ultima da completare se serve anche nella macro).

Da B1 scegli il valore da trattare, in C1 somma o conteggio.

Premi il tasto esegui.

NOTA: la tabella pivot è già predisposta, la macro elimina tutti i filtri impostati e inserisce quelli scelti, pertanto la pivot non la devi cancellare altrimenti va reinserita.

Ho lasciato le tue pivot che, se ritieni, puoi cancellare.

saluti



[Modificato da dodo47 01/07/2019 19:32]
Domenico
Win 10 - Excel 2016
Post: 12
Registrato il: 21/02/2004
Utente Junior
2007
OFFLINE
02/07/2019 09:42

Grazie mille! non ci sarei mai riuscita!
😊
Post: 2.305
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
02/07/2019 10:42

grazie per il riscontro.
se ti interessa, qui:
https://docs.microsoft.com/en-us/office/vba/api/excel.xlconsolidationfunction

trovi l'elenco delle funzioni Xl. Potresti modificare la sub inserendo un select case nel seguente modo:

- in una colonna fuori vista l'elenco delle funzioni:
Somma
Conteggio
Media
Max
Min
etc..etc

poi la convalida di C1 la punti a tale elenco.
Nella macro:

......
op = Range("C1")
Select Case op
Case "Somma"
valore = xlSum
Case "Conteggio"
valore = xlCount
Case "Media"
valore = xlAverage
Case "Max"
valore = xlMax
Case "Min"
valore = xlMin
etc...etc

saluti



[Modificato da dodo47 02/07/2019 10:54]
Domenico
Win 10 - Excel 2016
Post: 13
Registrato il: 21/02/2004
Utente Junior
2007
OFFLINE
04/07/2019 10:48

Grazie ancora per i suggerimenti.
per mia curiosità: se voglio solo modificare il contenuto della pivot senza svuotarla completamente delle righe e delle colonne, come faccio? condiderando la tua macro ho fatto un tentativo. ma non funziona. non riesco a cogliere l'errore. riallego il file con la tua macro.

Sub Macro1()

valore = Range("B1")
op = Range("C1")
If valore = "" Or op = "" Then Exit Sub

'da implementare
If op = "XlSum" Then operazione = xlSum
If op = "XlCount" Then operazione = xlCount

ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
"PivotTable1").PivotFields(valore), "tipo: " & op & " " & valore, operazione

ActiveSheet.PivotTables("PivotTable1").ManualUpdate = False

End Sub



Post: 2.312
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
04/07/2019 11:01

ciao
non capisco
una volta che hai la pivot secondo i dati di B1 e C1, chi ti impedisce di modificarla manualmente?

saluti



Domenico
Win 10 - Excel 2016
Post: 14
Registrato il: 21/02/2004
Utente Junior
2007
OFFLINE
04/07/2019 12:37

Scusa, forse non mi sono spiegata bene. la tua macro prevede il clear della pivot che cancella le righe (voce di bilancio) e le colonne (arco temporale) che devono nuovamente essere reinserite come di seguito:

ActiveSheet.PivotTables("PivotTable1").ManualUpdate = True
ActiveSheet.PivotTables("PivotTable1").ClearTable

With ActiveSheet.PivotTables("PivotTable1").PivotFields("voce bilancio")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("PivotTable1").PivotFields("arco temporale")
.Orientation = xlColumnField
.Position = 1


Poichè righe e colonne non cambiano volevo capire come lasciarle e rimpire solo di numeri la tabella (sum o count). Era solo un modo per capire come semplificare. per questo ho pensato che potesse essere scritta togliendo semplicemente i comandi sopra diventando:

valore = Range("B1")
op = Range("C1")
If valore = "" Or op = "" Then Exit Sub

If op = "XlSum" Then operazione = xlSum
If op = "XlCount" Then operazione = xlCount

ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
"PivotTable1").PivotFields(valore), "tipo: " & op & " " & valore, operazione

ActiveSheet.PivotTables("PivotTable1").ManualUpdate = False

in realtà da' errore e non riesco a capire dov'è. spero sia più chiaro. grazie
Post: 15
Registrato il: 21/02/2004
Utente Junior
2007
OFFLINE
04/07/2019 12:39

ho dimenticato un End With..
Post: 2.314
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
04/07/2019 12:49

crea una pivot con voce bilancio ed arco temporale già inseriti, poi:
Sub Macro1()
valore = Range("B1")
op = Range("C1")
If valore = "" Or op = "" Then Exit Sub
'da implementare
ActiveSheet.PivotTables("PivotTable1").ManualUpdate = True
If op = "XlSum" Then operazione = xlSum
If op = "XlCount" Then operazione = xlCount
ActiveSheet.PivotTables("PivotTable1").ManualUpdate = True
    ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
        "PivotTable1").PivotFields(valore), "tipo: " & op & " " & valore, operazione
ActiveSheet.PivotTables("PivotTable1").ManualUpdate = False
 
End Sub


Saluti

NO... è errato ci penso e se trovo soluzione te lo dico




[Modificato da dodo47 04/07/2019 12:52]
Domenico
Win 10 - Excel 2016
Post: 2.315
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
04/07/2019 13:06

ciao
è complesso, in quanto bisognerebbe effettuare un loop di tutti i valori possibili presenti nella convalida, per ciascuno vedere se è attivo e disattivarlo.

Che problema ti crea il fatto che la macro azzeri tutto e ricostruisca?


Domenico
Win 10 - Excel 2016
Post: 16
Registrato il: 21/02/2004
Utente Junior
2007
OFFLINE
04/07/2019 18:04

Il fatto è che la voce di bilancio che ti ho fornito in realtà ha tre livelli. Esempio: immobilizzazioni-immobilizzazioni immateriali-avviamento. E l’ordine delle voci di bilancio e delle sottovoci deve rimanere quello altrimenti I puntamento del report saltano. Lo so è complesso.
[Modificato da elelisah 04/07/2019 18:12]
Post: 2.316
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
04/07/2019 18:05

ciao
dopo un po' di tentativi......

Prova questo codice che non cancella i dati di riga/colonna ma aggiunge solo il campo scelto (anche se non capisco cosa ti cambia).

Ovviamente la pivot va creata prima con voce bilancio ed arco temporale già inseriti.

Saluti

Sub Macro1()
Dim PT As PivotTable, ptField As PivotField
Set PT = ActiveSheet.PivotTables("PivotTable1")
For Each ptField In PT.DataFields
    ptField.Orientation = xlHidden
Next ptField
valore = Range("B1")
op = Range("C1")
If valore = "" Or op = "" Then Exit Sub
If op = "XlSum" Then operazione = xlSum
If op = "XlCount" Then operazione = xlCount
PT.ManualUpdate = True
PT.AddDataField PT.PivotFields(valore), "tipo: " & op & " " & valore, operazione
PT.ManualUpdate = False
End Sub




[Modificato da dodo47 04/07/2019 18:07]
Domenico
Win 10 - Excel 2016
Post: 17
Registrato il: 21/02/2004
Utente Junior
2007
OFFLINE
05/07/2019 09:09

Ora funziona perfettamente anche sulla pivot gigantesca che ho.👌 Ti ringrazio della pazienza e dell'aiuto prezioso!
😊
Post: 2.317
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
05/07/2019 10:01

ok, grazie per il riscontro....Ho letto solo dopo la tua spiegazione sulla tua struttura che hai ed ho capito a cosa fai riferimento....
(Attenta se hai campi calcolati quella routine non li gestisce e va in errore, se ti serve dimmelo)


cari saluti



[Modificato da dodo47 05/07/2019 10:16]
Domenico
Win 10 - Excel 2016
Post: 18
Registrato il: 21/02/2004
Utente Junior
2007
OFFLINE
05/07/2019 10:35

No, fortunatamente non ha campi calcolati. solo importi. 😊 Grazie mille.
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 09:11. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com