none
Filtro em Tabela Dinâmica RRS feed

  • Pergunta

  • Numa tabela dinâmica, quero deixar apenas os itens com erro (#N/D). Entretanto podem haver novos itens "TIPO" a serem classificados como FALSO, vejam o exemplo abaixo.

    ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields("TIPO").CurrentPage = "(All)"
    With ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields("TIPO")
      .PivotItems("Administrador").Visible = False
      .PivotItems("Avançado").Visible = False
      .PivotItems("Não Aplicado").Visible = False
      .PivotItems("Normal").Visible = False
      .PivotItems("#N/D"").Visible = true
    End With

    Parece simples, mas na primeira linha se faço um "ClearAllFilters" dá erro! Então tenho que listar todos os demais como FALSE e o #N/D como true... só que devem aparecer novos TIPOs que neste momento não estão listados. Como proceder ?

    quinta-feira, 10 de julho de 2014 15:42

Respostas

  • pode colocar esse código no fim do seu....

     Dim tb As PivotTable
      Dim x As Integer
      
      Set tb = ActiveSheet.PivotTables("Tabela dinâmica1")
      
      For x = 1 To tb.PivotFields("TIPO").PivotItems.Count
        
        If tb.PivotFields("TIPO").PivotItems(x) = "#N/D" Then
          
          tb.PivotFields("TIPO").PivotItems(x).Visible = True
        
        Else
          
          tb.PivotFields("TIPO").PivotItems(x).Visible = False
        
        End If
      
      Next x

    e apaga esse trecho do seu....

    With ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields("TIPO")
                    .PivotItems("Administrador").Visible = False
                    .PivotItems("Avançado").Visible = False
                    .PivotItems("Não Aplicado").Visible = False
                    .PivotItems("Normal").Visible = False
    End With


    • Editado 'Natan Silva quinta-feira, 10 de julho de 2014 19:21
    • Marcado como Resposta MLRamos sexta-feira, 11 de julho de 2014 11:02
    quinta-feira, 10 de julho de 2014 19:20

Todas as Respostas

  • MLRamos,

    faz usando um laço....

      Dim tb As PivotTable
      Dim x As Integer
      
      Set tb = Sheets("Plan1").PivotTables("tbTestes")
      
      For x = 1 To tb.PivotFields("TIPO").PivotItems.Count
        
        If tb.PivotFields("TIPO").PivotItems(x) = "#ND" Then
          
          tb.PivotFields("TIPO").PivotItems(x).Visible = True
        
        Else
          
          tb.PivotFields("TIPO").PivotItems(x).Visible = False
        
        End If
      
      Next x

    Se ajudei, não esqueça de Marcar Como Resposta!

    quinta-feira, 10 de julho de 2014 17:07
  • Nossa ! Faz sentido e tentei adaptar, mas não funfou !

    Meu código é fruto do "gravar macro", com alterações, não sei porque não dá!

                Sheets.Add
                ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
                    NEW_SHIT & "!R1C1:R" & ulin & "C4", Version:=xlPivotTableVersion14).CreatePivotTable _
                    TableDestination:=ActiveSheet.Name & "!R3C1", TableName:="Tabela dinâmica1", _
                    DefaultVersion:=xlPivotTableVersion14
                'layout classico e remoção do total geral
                With ActiveSheet.PivotTables("Tabela dinâmica1")
                    .InGridDropZones = True
                    .RowAxisLayout xlTabularRow
                End With
                ActiveSheet.PivotTables("Tabela dinâmica1").ColumnGrand = False
                'campo1
                With ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields("SOFTWARE")
                    .Orientation = xlRowField
                    .Position = 1
                End With
                'campo2, filtro por TIPO
                With ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields("TIPO")
                    .Orientation = xlPageField
                    .Position = 1
                End With
                ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields("TIPO").CurrentPage = "(All)"
                With ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields("TIPO")
                    .PivotItems("Administrador").Visible = False
                    .PivotItems("Avançado").Visible = False
                    .PivotItems("Não Aplicado").Visible = False
                    .PivotItems("Normal").Visible = False
                End With
                ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields("TIPO").EnableMultiplePageItems = True

    Desde já agradeço sua paciência.

    quinta-feira, 10 de julho de 2014 18:38
  • pode colocar esse código no fim do seu....

     Dim tb As PivotTable
      Dim x As Integer
      
      Set tb = ActiveSheet.PivotTables("Tabela dinâmica1")
      
      For x = 1 To tb.PivotFields("TIPO").PivotItems.Count
        
        If tb.PivotFields("TIPO").PivotItems(x) = "#N/D" Then
          
          tb.PivotFields("TIPO").PivotItems(x).Visible = True
        
        Else
          
          tb.PivotFields("TIPO").PivotItems(x).Visible = False
        
        End If
      
      Next x

    e apaga esse trecho do seu....

    With ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields("TIPO")
                    .PivotItems("Administrador").Visible = False
                    .PivotItems("Avançado").Visible = False
                    .PivotItems("Não Aplicado").Visible = False
                    .PivotItems("Normal").Visible = False
    End With


    • Editado 'Natan Silva quinta-feira, 10 de julho de 2014 19:21
    • Marcado como Resposta MLRamos sexta-feira, 11 de julho de 2014 11:02
    quinta-feira, 10 de julho de 2014 19:20
  • Funcionou !!

    Único detalhe é que apesar de mostrar #N/D, internamente ele é #N/A (não sabia disso!).

    Descobri por acaso ao executar. Inicialmente apresentava erro e verifiquei que todos estavam indo para o FALSE, inclusive o #N/D...

    Muito obrigado!

    sexta-feira, 11 de julho de 2014 11:02