variabile pivot



  • variabile pivot
    di MarcoD (utente non iscritto) data: 30/12/2014 13:41:56

    Ho creato un piccolo riassundo in excell con un foglio dati e un foglio pivot. da questa tabella pivot estraggo alcuni grafici per analisi di lavoro.
    Ogni grafico legge da una pivot diversa ( ma da una tabella univoca ). per confrontare più dati ho affiancato i grafici e attraverso una casella a discesa seleziono i dati da analizzare. Ora ora creato un codice vba e attraverso "if else" selezioni i dati della tabella pivot .
    Funziona ma il codice così come ideato è molto "statico". La selezione dei dati viene regolata dalla restituzione "collegamento cella" della casella a discesa.
    ES: 1 2 3 etc. al posto di essere selezionata dall'indice (=indice ect,)
    Sarebbe buona cosa creare nel codice una variabile che selezione la "spunta della tabella pivot" a seconda della riga scelta.
    Cosi potrei applicare questo codice a molteplici grafici senza doverlo personalizzare tutte le volte
    In allegato il codice che seleziona le causali e aggiorna i grafici ( legati alle tabelle Pivot)
    Con la variabile creata il pivotItems sarebbe determinato direttamente dalla scelta della riga nella casella a discesa.
    Auguro a tutti un felice anno
    Grazie
     
    Sub dettaglio()
    Application.ScreenUpdating = False
    Sheets("dettaglio").Select
    If Worksheets("Causali").Range("B1001").Value = 1 Then
             ActiveSheet.PivotTables("dettaglio").PivotFields("Reparto").CurrentPage = _
              "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Reparto")
               .PivotItems("Elettrico _ Termotecnico").Visible = True
               .PivotItems("Meccanico").Visible = False
               .PivotItems("Gestione manutenzioni").Visible = False
               .PivotItems("Magazzino").Visible = False
               .PivotItems("Management").Visible = False
              End With
    
            If Worksheets("Causali").Range("B1002").Value = 1 Then ' restituzione del collegamento cella della casella a discesa 
             ActiveSheet.PivotTables("dettaglio").PivotFields("Attività").CurrentPage = _
              "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Attività")
                  .PivotItems("Assistenza").Visible = True
                  .PivotItems("Danneggiamento").Visible = False
                  .PivotItems("Disfunzione macchina").Visible = False
                  .PivotItems("Guasto Macchina").Visible = False
                  .PivotItems("Lavoro di servizio").Visible = False
                  .PivotItems("Manutenzione ordinaria").Visible = False
                  .PivotItems("Richiesta d'intervento").Visible = False
                  .PivotItems("Uso Improprio").Visible = False
                  .PivotItems("Usura").Visible = False
             End With
           Else
           If Worksheets("Causali").Range("B1002").Value = 2 Then
            ActiveSheet.PivotTables("dettaglio").PivotFields("Attività").CurrentPage = _
            "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Attività")
                  .PivotItems("Assistenza").Visible = False
                  .PivotItems("Danneggiamento").Visible = True
                  .PivotItems("Disfunzione macchina").Visible = False
                  .PivotItems("Guasto Macchina").Visible = False
                  .PivotItems("Lavoro di servizio").Visible = False
                  .PivotItems("Manutenzione ordinaria").Visible = False
                  .PivotItems("Richiesta d'intervento").Visible = False
                  .PivotItems("Uso Improprio").Visible = False
                  .PivotItems("Usura").Visible = False
            End With
           Else
           If Worksheets("Causali").Range("b1002").Value = 3 Then
            ActiveSheet.PivotTables("dettaglio").PivotFields("Attività").CurrentPage = _
            "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Attività")
                  .PivotItems("Assistenza").Visible = False
                  .PivotItems("Danneggiamento").Visible = False
                  .PivotItems("Disfunzione macchina").Visible = True
                  .PivotItems("Lavoro di servizio").Visible = False
                  .PivotItems("Guasto Macchina").Visible = False
                  .PivotItems("Manutenzione ordinaria").Visible = False
                  .PivotItems("Richiesta d'intervento").Visible = False
                  .PivotItems("Uso Improprio").Visible = False
                  .PivotItems("Usura").Visible = False
             End With
           Else
           If Worksheets("Causali").Range("b1002").Value = 4 Then
            ActiveSheet.PivotTables("dettaglio").PivotFields("Attività").CurrentPage = _
            "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Attività")
                  .PivotItems("Assistenza").Visible = False
                  .PivotItems("Danneggiamento").Visible = False
                  .PivotItems("Disfunzione macchina").Visible = False
                  .PivotItems("Guasto Macchina").Visible = True
                  .PivotItems("Lavoro di servizio").Visible = False
                  .PivotItems("Manutenzione ordinaria").Visible = False
                  .PivotItems("Richiesta d'intervento").Visible = False
                  .PivotItems("Uso Improprio").Visible = False
                  .PivotItems("Usura").Visible = False
             End With
            Else
           If Worksheets("Causali").Range("b1002").Value = 5 Then
            ActiveSheet.PivotTables("dettaglio").PivotFields("Attività").CurrentPage = _
            "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Attività")
                  .PivotItems("Assistenza").Visible = False
                  .PivotItems("Danneggiamento").Visible = False
                  .PivotItems("Disfunzione macchina").Visible = False
                  .PivotItems("Guasto Macchina").Visible = False
                  .PivotItems("Lavoro di servizio").Visible = True
                  .PivotItems("Manutenzione ordinaria").Visible = False
                  .PivotItems("Richiesta d'intervento").Visible = False
                  .PivotItems("Uso Improprio").Visible = False
                  .PivotItems("Usura").Visible = False
             End With
            Else
            If Worksheets("Causali").Range("b1002").Value = 6 Then
            ActiveSheet.PivotTables("dettaglio").PivotFields("Attività").CurrentPage = _
            "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Attività")
                  .PivotItems("Assistenza").Visible = False
                  .PivotItems("Danneggiamento").Visible = False
                  .PivotItems("Disfunzione macchina").Visible = fasle
                  .PivotItems("Guasto Macchina").Visible = False
                  .PivotItems("Lavoro di servizio").Visible = False
                  .PivotItems("Manutenzione ordinaria").Visible = True
                  .PivotItems("Richiesta d'intervento").Visible = False
                  .PivotItems("Uso Improprio").Visible = False
                  .PivotItems("Usura").Visible = False
             End With
            Else
           If Worksheets("Causali").Range("b1002").Value = 7 Then
            ActiveSheet.PivotTables("dettaglio").PivotFields("Attività").CurrentPage = _
            "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Attività")
                  .PivotItems("Assistenza").Visible = False
                  .PivotItems("Danneggiamento").Visible = False
                  .PivotItems("Disfunzione macchina").Visible = False
                  .PivotItems("Lavoro di servizio").Visible = False
                  .PivotItems("Guasto Macchina").Visible = False
                  .PivotItems("Manutenzione ordinaria").Visible = False
                  .PivotItems("Richiesta d'intervento").Visible = False
                  .PivotItems("Uso Improprio").Visible = False
                  .PivotItems("Usura").Visible = True
               End With
           End If
           End If
           End If
           End If
           End If
           End If
           End If
    End If
    If Worksheets("Causali").Range("B1001").Value = 2 Then
             ActiveSheet.PivotTables("dettaglio").PivotFields("Reparto").CurrentPage = _
              "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Reparto")
               .PivotItems("Meccanico").Visible = True
               .PivotItems("Elettrico _ Termotecnico").Visible = False
               .PivotItems("Gestione manutenzioni").Visible = False
               .PivotItems("Magazzino").Visible = False
               .PivotItems("Management").Visible = False
             End With
          If Worksheets("Causali").Range("B1001").Value = 2 Then
            If Worksheets("Causali").Range("B1002").Value = 1 Then
          ActiveSheet.PivotTables("dettaglio").PivotFields("Attività").CurrentPage = _
            "(All)"
            With ActiveSheet.PivotTables("dettaglio").PivotFields("Attività")
                  .PivotItems("Assistenza").Visible = True
                  .PivotItems("Danneggaiamento").Visible = False
                  .PivotItems("Disfunzione macchina").Visible = False
                  .PivotItems("Guasto Macchina").Visible = False
                  .PivotItems("Lavoro di servizio").Visible = False
                  .PivotItems("Manutenzione ordinaria").Visible = False
                  .PivotItems("Richiesta d'intervento").Visible = False
                  .PivotItems("Uso Improprio").Visible = False
                  .PivotItems("Usura").Visible = False
             End With
          Else
            If Worksheets("Causali").Range("B1002").Value = 2 Then
          ActiveSheet.PivotTables("dettaglio").PivotFields("Attività").CurrentPage = _
            "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Attività")
                  .PivotItems("Assistenza").Visible = False
                  .PivotItems("Danneggiamento").Visible = True
                  .PivotItems("Disfunzione macchina").Visible = False
                  .PivotItems("Guasto Macchina").Visible = False
                  .PivotItems("Lavoro di servizio").Visible = False
                  .PivotItems("Manutenzione ordinaria").Visible = False
                  .PivotItems("Richiesta d'intervento").Visible = False
                  .PivotItems("Uso Improprio").Visible = False
                  .PivotItems("Usura").Visible = False
            End With
           Else
            If Worksheets("Causali").Range("b1002").Value = 3 Then
            ActiveSheet.PivotTables("dettaglio").PivotFields("Attività").CurrentPage = _
            "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Attività")
                  .PivotItems("Assistenza").Visible = False
                  .PivotItems("Danneggiamento").Visible = False
                  .PivotItems("Disfunzione macchina").Visible = True
                  .PivotItems("Lavoro di servizio").Visible = False
                  .PivotItems("Guasto Macchina").Visible = False
                  .PivotItems("Manutenzione ordinaria").Visible = False
                  .PivotItems("Richiesta d'intervento").Visible = False
                  .PivotItems("Uso Improprio").Visible = False
                  .PivotItems("Usura").Visible = False
             End With
           Else
            If Worksheets("Causali").Range("b1002").Value = 4 Then
            ActiveSheet.PivotTables("dettaglio").PivotFields("Attività").CurrentPage = _
            "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Attività")
                  .PivotItems("Assistenza").Visible = False
                  .PivotItems("Danneggiamento").Visible = False
                  .PivotItems("Disfunzione macchina").Visible = False
                  .PivotItems("Guasto Macchina").Visible = True
                  .PivotItems("Lavoro di servizio").Visible = False
                  .PivotItems("Manutenzione ordinaria").Visible = False
                  .PivotItems("Richiesta d'intervento").Visible = False
                  .PivotItems("Uso Improprio").Visible = False
                  .PivotItems("Usura").Visible = False
             End With
           Else
            If Worksheets("Causali").Range("b1002").Value = 5 Then
            ActiveSheet.PivotTables("dettaglio").PivotFields("Attività").CurrentPage = _
            "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Attività")
                  .PivotItems("Assistenza").Visible = False
                  .PivotItems("Danneggiamento").Visible = False
                  .PivotItems("Disfunzione macchina").Visible = False
                  .PivotItems("Guasto Macchina").Visible = False
                  .PivotItems("Lavoro di servizio").Visible = True
                  .PivotItems("Manutenzione ordinaria").Visible = False
                  .PivotItems("Richiesta d'intervento").Visible = False
                  .PivotItems("Uso Improprio").Visible = False
                  .PivotItems("Usura").Visible = False
             End With
           Else
            If Worksheets("Causali").Range("b1002").Value = 6 Then
            ActiveSheet.PivotTables("dettaglio").PivotFields("Attività").CurrentPage = _
            "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Attività")
                  .PivotItems("Assistenza").Visible = False
                  .PivotItems("Danneggiamento").Visible = False
                  .PivotItems("Disfunzione macchina").Visible = fasle
                  .PivotItems("Guasto Macchina").Visible = False
                  .PivotItems("Lavoro di servizio").Visible = False
                  .PivotItems("Manutenzione ordinaria").Visible = True
                  .PivotItems("Richiesta d'intervento").Visible = False
                  .PivotItems("Uso Improprio").Visible = False
                  .PivotItems("Usura").Visible = False
             End With
           Else
            If Worksheets("Causali").Range("b1002").Value = 7 Then
            ActiveSheet.PivotTables("dettaglio").PivotFields("Attività").CurrentPage = _
            "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Attività")
                  .PivotItems("Assistenza").Visible = False
                  .PivotItems("Danneggiamento").Visible = False
                  .PivotItems("Disfunzione macchina").Visible = False
                  .PivotItems("Lavoro di servizio").Visible = False
                  .PivotItems("Guasto Macchina").Visible = False
                  .PivotItems("Manutenzione ordinaria").Visible = False
                  .PivotItems("Richiesta d'intervento").Visible = False
                  .PivotItems("Uso Improprio").Visible = True
                  .PivotItems("Usura").Visible = False
             End With
           Else
            If Worksheets("Causali").Range("b1002").Value = 8 Then
            ActiveSheet.PivotTables("dettaglio").PivotFields("Attività").CurrentPage = _
            "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Attività")
                  .PivotItems("Assistenza").Visible = False
                  .PivotItems("Danneggiamento").Visible = False
                  .PivotItems("Disfunzione macchina").Visible = False
                  .PivotItems("Lavoro di servizio").Visible = False
                  .PivotItems("Guasto Macchina").Visible = False
                  .PivotItems("Manutenzione ordinaria").Visible = False
                  .PivotItems("Richiesta d'intervento").Visible = False
                  .PivotItems("Uso Improprio").Visible = False
                  .PivotItems("Usura").Visible = True
             End With
            End If
            End If
            End If
            End If
            End If
            End If
            End If
            End If
            End If
    End If
    Application.ScreenUpdating = True
    End Sub



  • di Grograman (utente non iscritto) data: 30/12/2014 16:54:28

    Un filino ridondante come codice!!

    Domani lo provo, ora ho dato una sforbiciata brutale.

    Puoi usare una routine dedicata a cui passare:
    - Pivotitem da mostrare
    - Quale di essi nascondere o meno

    Ripeto NON l'ho testato:

     
    Sub dettaglio()
    Application.ScreenUpdating = False
    Sheets("dettaglio").Select
    If Worksheets("Causali").Range("B1001").Value = 1 Then
             ActiveSheet.PivotTables("dettaglio").PivotFields("Reparto").CurrentPage = _
              "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Reparto")
               .PivotItems("Elettrico _ Termotecnico").Visible = True
               .PivotItems("Meccanico").Visible = False
               .PivotItems("Gestione manutenzioni").Visible = False
               .PivotItems("Magazzino").Visible = False
               .PivotItems("Management").Visible = False
              End With
              
        Select Case Worksheets("Causali").Range("b1002").Value
          Case Is = 1
            Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Assistenza")
          Case Is = 2
            Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Danneggiamento")
          Case Is = 3
            Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Disfunzione macchina")
          Case Is = 4
            Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Guasto Macchina")
          Case Is = 5
            Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Lavoro di servizio")
          Case Is = 6
            Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Manutenzione ordinaria")
          Case Is = 7
            Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Uso Improprio")
          Case Is = 8
            Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Usura")
        End Select
    End If
    
      If Worksheets("Causali").Range("B1001").Value = 2 Then
             ActiveSheet.PivotTables("dettaglio").PivotFields("Reparto").CurrentPage = _
              "(All)"
              With ActiveSheet.PivotTables("dettaglio").PivotFields("Reparto")
               .PivotItems("Meccanico").Visible = True
               .PivotItems("Elettrico _ Termotecnico").Visible = False
               .PivotItems("Gestione manutenzioni").Visible = False
               .PivotItems("Magazzino").Visible = False
               .PivotItems("Management").Visible = False
             End With
            
            Select Case Worksheets("Causali").Range("b1002").Value
              Case Is = 1
                Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Assistenza")
              Case Is = 2
                Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Danneggiamento")
              Case Is = 3
                Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Disfunzione macchina")
              Case Is = 4
                Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Guasto Macchina")
              Case Is = 5
                Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Lavoro di servizio")
              Case Is = 6
                Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Manutenzione ordinaria")
              Case Is = 7
                Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Uso Improprio")
              Case Is = 8
                Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), "Usura")
            End Select
    Application.ScreenUpdating = True
    End Sub
    
    Sub Mostra_Campi(ByVal oPtFld As PivotField, ByVal sCampo As String)
      Dim oPtItm As PivotItem
    
      For Each oPtItm In oPtFld.PivotItems
        oPtItm.Visible = True
        If oPtItm.Name <> sCampo Then oPtItm.Visible = False
      Next oPtItm
    
    End Sub



  • di Zer0Kelvin data: 30/12/2014 18:08:46

    Salve a tutti.
    Siccome siamo in tema di tagli di ogni genere, propongo una sforbiciata alla sforbiciata.
    Siccome il codice non è testato, posso aver scritto varie cavolate e di vario genere; comunque l'idea finale sarebbe questa:
     
    Option Explicit
    Option Base 1
    
    Sub dettaglio()
    Dim sCAMPI(), dVAL As Integer
        sCAMPI = Array("Assistenza", "Danneggiamento", "Disfunzione macchina", "Guasto Macchina", "Lavoro di servizio", _
                        "Manutenzione ordinaria", "Uso Improprio", "Usura")
        Application.ScreenUpdating = False
        Sheets("dettaglio").Select
        dVAL = Worksheets("Causali").Range("B1001").Value
        If dVAL = 1 Or dVAL = 2 Then
            ActiveSheet.PivotTables("dettaglio").PivotFields("Reparto").CurrentPage = "(All)"
            With ActiveSheet.PivotTables("dettaglio").PivotFields("Reparto")
                .PivotItems("Elettrico _ Termotecnico").Visible = dVAL = 1
                .PivotItems("Meccanico").Visible = dVAL = 2
                .PivotItems("Gestione manutenzioni").Visible = False
                .PivotItems("Magazzino").Visible = False
                .PivotItems("Management").Visible = False
            End With
            Call Mostra_Campi(ActiveSheet.PivotTables("dettaglio").PivotFields("Attività"), _
                                sCAMPI(Worksheets("Causali").Range("b1002").Value))
        End If
        Application.ScreenUpdating = True
    End Sub
    
    Sub Mostra_Campi(ByVal oPtFld As PivotField, ByVal sCampo As String)
    Dim oPtItm As PivotItem
        For Each oPtItm In oPtFld.PivotItems
            oPtItm.Visible = oPtItm.Name = sCampo
        Next oPtItm
    End Sub
    



  • di Grograman (utente non iscritto) data: 31/12/2014 08:15:31

    Ihih come sempre tirate fuori un taglio più divertente dal cilindro, bella l'idea dell'array per i nomi dei pivotitem!

    Mentre aspettiamo feedback io aggiungerei che in realtà non ho capito lo scopo della richiesta



  • di MarcoD (utente non iscritto) data: 31/12/2014 10:16:10

    La mia idea (bislacca) e quella di far scrivere su delle celle i valori (pivotitems) delle pivot composte. Quelle celle poi sono collegate alla selezione della casella a discesa. Con la selezione della stringa (dalla casella a discesa) si attiva e disattivano i campi della pivot e di conseguenza i grafici alla pivot collegata.
    Questo perché con un unico codice collegato posso "attaccarlo" a più pivot indipendentemente da come sono composte.
    se date un occhiara al file allegato vedete
    che al pulsante gestione segue un pulsante causali. Il tutto funziona su quelle due pivot perché il "codicione" è dedicato. Comunque grazie dell'interessamento