Gestione Pivot



  • Gestione Pivot
    di Textomb data: 30/07/2015 00:22:28

    lavorando sulle Pivot mi accorgo che sono estremamente potenti.
    Ma forse a scapito della flessibilità.
    Un caso che fin ora non sono riuscito a risolvere. Vedi l'esempio nel file in allegato
    Considerando le due tabelle Pivot vorrei, tramite formule senza VBA, passare al criterio della Pivot2 il valore applicato al filtro dati della Pivot1
    Quindi nel caso specifico, il mese applicato sul criterio della Pivot2 deve assumere il valore scelto sul filtro dati della Pivot1. Quindi, in definitiva, collegare il filtro dati della Pivot1 al criterio della Pivot2.



  • di Vecchio Frac data: 30/07/2015 08:24:19

    cit. "mi accorgo che sono estremamente potenti. "
    ---> Vero, ultimamente mi sto smazzando pure io con successo (il capo mi sta facendo fare delle megastatistiche)

    cit. "Un caso che fin ora non sono riuscito a risolvere"
    ---> Mi sono incuriosito :)
    Sarebbe uno spunto per un Esercizio collettivo :P





  • di Vecchio Frac data: 30/07/2015 10:35:43

    Sono qui con Excel 2007 e mi pare che funzioni il filtro dati indipendente (tu affermi nel file che "I filtri dei dati possono essere utilizzati a partire da Excel 2010"). Sempre se funziona davvero, lo potrò provare solo a casa :)







  • di Textomb data: 30/07/2015 11:15:29

    cit.. tu affermi nel file che "I filtri dei dati possono essere utilizzati a partire da Excel 2010
    Veramente non ho detto una cosa del genere...
    In ogni caso, credo che con il 2007 funzioni.

    Fin ora non sono riuscito nel mio intento. Vedremo gli sviluppi.



  • di Vecchio Frac data: 30/07/2015 11:18:03

    L'ho trovato scritto nel riquadro di testo del tuo file ^_^ ma non importa.
    Credo nel merito che tu una cosa così l'abbia già provata:
    ActiveSheet.PivotTables("Tabella_pivot2").PivotFields("MESE").ClearAllFilters
    ActiveSheet.PivotTables("Tabella_pivot2").PivotFields("MESE").CurrentPage = (Range("D4"))


    Tra parentesi il metodo GetData è potentissimo e permette una cosa così:
    ActiveSheet.PivotTables("Tabella_pivot2").GetData("MESE IMPORTO DICEMBRE")





  • di mb (utente non iscritto) data: 30/07/2015 14:16:40

    Scusa Vecchio Frac
    mi puoi aiutare a capire la tua affermazione

    ... L'ho trovato scritto nel riquadro di testo del tuo file
    dove devo andare per leggere quanto da te indicato nelle righe successive ??

    grazie




  • di Vecchio Frac data: 30/07/2015 16:01:12

    cit. "dove devo andare per leggere quanto da te indicato nelle righe successive ?? "
    ---> Non facciamo nascere equivoci... la prima casella di testo del file di Textomb riporta un'affermazione che può riferirsi anche ad Excel 2007 (cit. Textomb: "Questa forma rappresenta un filtro dei dati. I filtri dei dati possono essere utilizzati a partire da Excel 2010.")

    Quello che ho scritto dopo, riportando un esempio di codice, è un test che ho fatto io ma che sicuramente anche Textomb ha provato. Stavo cercando un modo per non scrivere Range("D4") ma qualcosa del tipo tabella_pivot1.filtromese.value (che ovviamente è inventato e non esiste).





  • di mb (utente non iscritto) data: 30/07/2015 16:04:08

    grazie come sempre le la puntuale precisazione

    ci aggiorniamo ..



  • di mb (utente non iscritto) data: 30/07/2015 17:07:57

    Ciao a tutti
    mi piace visitare i vari forum per cercare di imparare e nel caso applicare le soluzioni alle varie esigenze

    se volete provate questa soluzione se fa al caso vostro

    la premessa è che prima di lanciare la macro è necessario prima togliere il filtro sulla tabella pivot2 poi funziona

    qualsiasi altra soluzione da programmatori professionisti è ben desiderata

     
    Sub filtra_pivot()
      Dim wb As Workbook
       Dim ws As Worksheet
       
       Dim oPvTbl As PivotTable
       Dim oPvFld As PivotField
       Dim oPvItm As PivotItem
       Dim blnCampo As Boolean
       Dim sCampo As String
       sCampo = Range("d4") ''QUI SELEZIONARE IL CAMPO UNIVOCO, TRAMITE UNA CELLA, COMBOBOX O USERFORM.
       
       Set wb = ActiveWorkbook
       Set ws = wb.ActiveSheet
       On Error Resume Next
       For Each ws In wb.Worksheets
         For Each oPvTbl In ws.PivotTables
           For Each oPvFld In oPvTbl.PivotFields
    
             For Each oPvItm In oPvFld.PivotItems
               If oPvItm.Name = sCampo Then
                 blnCampo = 1
                 Exit For
               End If
             Next oPvItm
             
             If blnCampo = True Then
               For Each oPvItm In oPvFld.PivotItems
                 If oPvItm.Name <> sCampo Then
                   oPvItm.Visible = 0
                 End If
               Next oPvItm
               blnCampo = 0
             End If
             
           Next oPvFld
         Next oPvTbl
       Next ws
       
       Set ws = Nothing
       Set wb = Nothing
     End Sub