none
Filtrar tabela dinamica com "select" RRS feed

  • Pergunta

  • Pessoal, estou tentando criar uma macro que possa filtrar uma tabela dinâmica utilizando um valor selecionado em uma determinada célula:

    Criei duas planilhas, a primeira (ANÁLISE) com uma tabela geral, a segunda planilha (DETALHAMENTO_DO_CUSTO) com duas tabelas dinâmicas referentes à tabela geral.

    Ao selecionar um valor na coluna CÓDIGO da tabela geral, a macro filtraria os dados referentes ao CÓDIGO nas tabelas dinâmicas.

    Não tenho muito conhecimento em vba,então encontrei um código similar ao que preciso, mas que dá erro 1004: "não é possivel obter a propriedade PivotTables da classe Worksheet"

    Se alguém tiver alguma dica, ajudaria muito!

    Private Sub DETALHAMENTO_Click()

    Sheets("ANÁLISE").Select

    ActiveSheet.PivotTables("Tabela_dinâmica1").PivotFields("Projeto").CurrentPage = Sheets("DETALHAMENTO_DO_CUSTO").Range("A1").Value

    End Sub 


    • Editado vssouza domingo, 22 de setembro de 2019 09:03
    domingo, 22 de setembro de 2019 09:02

Todas as Respostas

  • Boa noite!

    Precisa ser por VBA? O mais simples e recomendado é utilizar a "Segmentação de Dados". Fica no menu dinâmico da Tabela Dinâmica.

    Abraço.


    Filipe Magno

    segunda-feira, 23 de setembro de 2019 02:35
  • Caro Filipe, obrigado pela dica! 

    Mas acredito que seriam muitos dados para selecionar via segmentação,  pois se tratam de mais de 2500 itens para segmentar. Se eu simplesmente selecionar um código da TABELA PRINCIPAL e clicar no botão DETALHAMENTO, seria o ideal. Também poderia ser digitando o código em uma caixa de texto, similar ao que é feito no filtro da tabela dinâmica. O problema todo é que são duas tabelas dinâmicas, as duas têm referências ao mesmo código, então se eu conseguir pra uma, já é um bom caminho pra conseguir para as duas. Estou me esforçando para aprender vba, mas parece que esse problema é nível jedi.

    Mas obrigado pela dica!!

    segunda-feira, 23 de setembro de 2019 10:07
  • vssouza...

    não é tão Jedi assim, na verdade é até simples:

      Dim pt As PivotTable 'pt = PivotTable
      Set pt = Sheets("nomeDaPlanilha").PivotTables("nomeDaTabelaDinamica")
    
      For Each p In pt.PivotFields("COD").PivotItems
        p.Visible = (p = Range("a1").Value)
      Next p
    


    Natan

    segunda-feira, 23 de setembro de 2019 10:39
  • Prezado Natan,

    Muito obrigado!! Vou fazer alguns testes e posto o feedback dos resultados.

    Valeu mesmo!

    terça-feira, 24 de setembro de 2019 00:00
  • Pessoal, bom dia.

    Tentei o código acima, mas ficou em loop. O laço for....next p faz a planilha mostrar os itens p a p.
    Entao criei uma planilha menor, mas que reflete a mesma situacao. Tentei adaptar, pesquisei e estudei outras abordagens, e por mais que alterasse o código radicalmente, o algoritmo me retorna o mesmo erro:

     https://i.stack.imgur.com/gRPes.jpg

    Abaixo segue o link da planilha genérica simplificada. Lembrando que a original possui duas PivotTable com mais de 2500 itens:

    https://drive.google.com/file/d/1b2VF9FkqBlDAK0QFaNjsaCSUjCJTvCDq/view?usp=drivesdk

    Nela, criei um botão que chama uma box, e esta pede uma string, que filtra o PivotItem das Pivottables 1 E 2.
    O problema é que ela só aceita o filtro de entrada "2000". Se eu pedir "1999" ele retorna o erro da imagem acima, e aparentemente nem sequer limpa o filtro anterior.
    Por favor, se alguém puder me dizer onde estou errando, agradeceria muito!


    • Editado vssouza sexta-feira, 27 de setembro de 2019 12:59 Gramática
    sexta-feira, 27 de setembro de 2019 12:55