Ir ao conteúdo
  • Cadastre-se

Excel Transformar Dados em tabela dinâmica através do VBA


Posts recomendados

Boa tarde!!

Rapaziada eu estou com um problema eu tenho uma planilha do serviço na qual eu após fazer toda uma limpa nela (que já está feita em VBA) eu preciso selecionar todas as células e transformar numa tabela dinâmica. e eu queria saber se teria como fazer deste jeito de moto automático. irei mandar a planilha base e a forma que eu estou tentando chegar. (não necessariamente precisaria ficar exatamente igual, mas algo parecido para criar um padrão de e-mail).

ExportedReport.rarimage.png.3a6c767a7d194d281124e5ce0a940fcf.png

Conforme mostrado aqui, ele precisa estar mais ou menos assim. separado nessas linhas e dessa forma. 

Link para o comentário
Compartilhar em outros sites

@Gabriel Gallonetti Crie a tabela dinâmica e arraste os campos: Categoria Financeira e Favorecido em Linhas e Vl. Previsto em Valores.

 

Uma vez criada a tabela dinâmica só terá que atualizar. Para facilitar isso você pode deixar os dados da planilha no formato de Tabela (Inserir > Tabela). Assim o range da tabela dinâmica sempre será o mesmo da outra.

Link para o comentário
Compartilhar em outros sites

@Midori como assim gravador de macro? isso dentro do próprio excel?

9 minutos atrás, Gabriel Gallonetti disse:

@Midori como assim gravador de macro? isso dentro do próprio excel?

Tentei gravar a macro e fazer os meus passos e não funcionou deu erro de depuração.

Link para o comentário
Compartilhar em outros sites

@Midori Eu fui exatamente aí e este é o erro que está dando. image.png.14abc57136c4ac20db0a354d3d4a78b1.png

E o código que me entrega é este. 

Sub Macro2()
'
' Macro2 Macro
'

'
    Range("A5:D178").Select
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Plan1!R5C1:R178C4", Version:=6).CreatePivotTable TableDestination:= _
        "Planilha1!R3C1", TableName:="Tabela dinâmica1", DefaultVersion:=6
    Sheets("Planilha1").Select
    Cells(3, 1).Select
    With ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields( _
        "Categoria Financeira")
        .Orientation = xlRowField
        .Position = 1
    End With
    ActiveSheet.PivotTables("Tabela dinâmica1").AddDataField ActiveSheet. _
        PivotTables("Tabela dinâmica1").PivotFields("Vl. Previsto"), _
        "Soma de Vl. Previsto", xlSum
    With ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields("Favorecido")
        .Orientation = xlRowField
        .Position = 2
    End With
    ActiveSheet.PivotTables("Tabela dinâmica1").RowAxisLayout xlTabularRow
End Sub
 

 

7 minutos atrás, Gabriel Gallonetti disse:

@Midori Eu fui exatamente aí e este é o erro que está dando. image.png.14abc57136c4ac20db0a354d3d4a78b1.png

E o código que me entrega é este. 

Sub Macro2()
'
' Macro2 Macro
'

'
    Range("A5:D178").Select
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Plan1!R5C1:R178C4", Version:=6).CreatePivotTable TableDestination:= _
        "Planilha1!R3C1", TableName:="Tabela dinâmica1", DefaultVersion:=6
    Sheets("Planilha1").Select
    Cells(3, 1).Select
    With ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields( _
        "Categoria Financeira")
        .Orientation = xlRowField
        .Position = 1
    End With
    ActiveSheet.PivotTables("Tabela dinâmica1").AddDataField ActiveSheet. _
        PivotTables("Tabela dinâmica1").PivotFields("Vl. Previsto"), _
        "Soma de Vl. Previsto", xlSum
    With ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields("Favorecido")
        .Orientation = xlRowField
        .Position = 2
    End With
    ActiveSheet.PivotTables("Tabela dinâmica1").RowAxisLayout xlTabularRow
End Sub
 

o que eu realmente necessitava era que a planilha selecionasse o range de somente o que tem coisa escrita, porque só vai restar na planilha o que será usado na tabela.

7 minutos atrás, Gabriel Gallonetti disse:

 

 

Link para o comentário
Compartilhar em outros sites

@Gabriel Gallonetti Veja se assim resolve. Antes de rodar crie uma aba com o nome Dinâmica.

 

Sub TabelaDinamica()
    Dim Tabela          As PivotTable
    Dim Favorecido      As PivotField
    Dim Categoria       As PivotField
    Dim PlanPagamento   As Worksheet
    Dim PlanDinamica    As Worksheet
    
    Set PlanDinamica = ThisWorkbook.Sheets("Dinâmica")
    Set PlanPagamento = ThisWorkbook.Sheets("RptPagamentoCategoriaFinac")
    Set Tabela = ThisWorkbook.PivotCaches.Create(xlDatabase, _
        PlanPagamento.[B5].CurrentRegion).CreatePivotTable( _
        PlanDinamica.[A1], "TabelaDinamica")
        
    Call Tabela.AddDataField(Tabela.PivotFields("Vl. Previsto"), "Soma de Vl. Previsto", xlSum)
    
     With Tabela
        .InGridDropZones = True
        .DisplayFieldCaptions = True
        .DisplayContextTooltips = True
        .ShowDrillIndicators = True
        .AllowMultipleFilters = True
        .SortUsingCustomLists = True
        .ShowValuesRow = True
        .RowAxisLayout xlTabularRow
    End With
    
    Set Categoria = Tabela.PivotFields("Categoria Financeira")
    Set Favorecido = Tabela.PivotFields("Favorecido")
    
    Categoria.Orientation = xlRowField
    Categoria.Position = 1
    Favorecido.Orientation = xlRowField
    Favorecido.Position = 2
    
    Categoria.PivotFilters.Add2 xlCaptionEquals, Value1:="Salario"
    Favorecido.PivotFilters.Add2 xlCaptionContains, Value1:="FOLHA DE PAGAMENTO"
End Sub

 

Link para o comentário
Compartilhar em outros sites

@Midori image.png.c98372947b55c4d415223dc4a8be18d3.png ele está dando este erro, e criei a Dinâmica.

 

1 minuto atrás, Gabriel Gallonetti disse:

@Midori image.png.c98372947b55c4d415223dc4a8be18d3.png ele está dando este erro, e criei a Dinâmica.

 

Midori parece que houve um mal entendido da minha parte em explicar lá em cima aparece algumas informações pórem as unicas informaçõe que vão se repetir todos os dias são essas image.png.fbe196361a3bf4c9b687295b8c429f09.png

image.png.e05fbbc3e82f33809abdffdffec653bf.png

 

são as colunas e os valores que são sempre os mesmos.

Link para o comentário
Compartilhar em outros sites

20 minutos atrás, Gabriel Gallonetti disse:

Midori parece que houve um mal entendido da minha parte em explicar lá em cima aparece algumas informações pórem as unicas informaçõe que vão se repetir todos os dias são essas

Todas as informações estarão na tabela dinâmica, mas as únicas que vão aparecer são as do critério do filtro.

 

Não entendi o que quer dizer com "repetir todos os dias".

 

Conseguiu rodar a macro que postei? Rodei aqui e ficou no formato do seu exemplo no primeiro post.

Link para o comentário
Compartilhar em outros sites

@Midori não consegui rodar ele da aquele erro Subscrito fora do intervalo

image.png.c25082728450617e4c6f18a9d4c79466.pngé porque vi que você adicinou essas palavras no filtro "salario" "folha de pagamento" e essas palavras vão mudar entendeu? não são as mesmas diariamente.

 

1 minuto atrás, Gabriel Gallonetti disse:

@Midori não consegui rodar ele da aquele erro Subscrito fora do intervalo

image.png.c25082728450617e4c6f18a9d4c79466.pngé porque vi que você adicinou essas palavras no filtro "salario" "folha de pagamento" e essas palavras vão mudar entendeu? não são as mesmas diariamente.

 

eu queria algo que somente formasse a tabela dinamica baseado ali em cima igual coloquei nos filtros mesmo que serão (categoria financeira, valor previsto e favorecido

Link para o comentário
Compartilhar em outros sites

Rodei na planilha que você anexou e a tabela é criada normalmente.

 

Se tentar rodar antes de criar a aba Dinâmica vai dar o erro de subscrito fora do intervalo.

12 minutos atrás, Gabriel Gallonetti disse:

image.png.c25082728450617e4c6f18a9d4c79466.pngé porque vi que você adicinou essas palavras no filtro "salario" "folha de pagamento" e essas palavras vão mudar entendeu? não são as mesmas diariamente.

 

Então acho melhor fazer como cometei no primeiro post que é criar a tabela manualmente.

 

E a macro só será usada para atualizar a dinâmica e mudar essas palavras no filtro.

Link para o comentário
Compartilhar em outros sites

@Gabriel Gallonetti Vamos voltar para o início, esqueça a macro por enquanto. Abra a planilha do anexo sem edição e só com a aba do Pagamento. Selecione a célula B5 e crie a tabela dinamica manualmente em Inserir > Tabela Dinâmica > Ok. Deixe a tabela no formato da primeira imagem: Coloque Vl. Previsto em Valores, Categoria Financeira e Favorecido em Linhas.

 

Se der tudo certo explique qual é o critério para mudar as palavras. É para isso que acho que deve ser usada uma macro para automatizar o critério do filtro da tabela dinâmica. No seu exemplo o critério das palvaras é "salario" e "folha de pagamento". E se entendi direito essas palavras podem mudar.

Link para o comentário
Compartilhar em outros sites

@Midori Bom dia!

 

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("A5").Select
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "RptPagamentoCategoriaFinac!R5C1:R26C5", Version:=xlPivotTableVersion10). _
        CreatePivotTable TableDestination:="Planilha1!R3C1", TableName:= _
        "Tabela dinâmica1", DefaultVersion:=xlPivotTableVersion10
    Sheets("Planilha1").Select
    Cells(3, 1).Select
    With ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields( _
        "Categoria Financeira")
        .Orientation = xlRowField
        .Position = 1
    End With
    ActiveSheet.PivotTables("Tabela dinâmica1").AddDataField ActiveSheet. _
        PivotTables("Tabela dinâmica1").PivotFields("Vl. Previsto"), _
        "Soma de Vl. Previsto", xlSum
    With ActiveSheet.PivotTables("Tabela dinâmica1").PivotFields("Favorecido")
        .Orientation = xlRowField
        .Position = 2
    End With
End Sub
 

O código ficou assim e eu fiz da forma mais simples possível, eu cliquei em A5, (é a coluna certa mesmo) e gerei a tabela dinamica e arrastei cada um para o seu lugar, parei de gravar a macro e encerrei, logo após isso exclui a tabela, e tentei rodar a macro e ele deu o seguinte erroimage.png.0dc022683904ee09fe343fb36d4a7442.png

Link para o comentário
Compartilhar em outros sites

@Gabriel Gallonetti Não vejo motivo para continuar tentando usar outra macro sem fazer as edições necessárias após a gravação. O código que postei funcionou na sua planilha, já que quer uma macro para criar a dinâmica acho que devia tentar usar aquele em vez de gravar outra. Leu o meu último comentário?

Link para o comentário
Compartilhar em outros sites

@Midori Boa tarde, então testei o código e realmente funcionou, pórem tem esse caso, porque esse saldo e folhas são categorias financeiras que mudam todos dias (sempre são as mesmas, pórem em alguns dias aparecem umas e outros as outras) teria como eu colocar no script todas elas? aí assim que rodar o macro ele formar a tabela toda correta? se caso sim, você poderia por gentileza me ensinar onde eu deveria alterar no script para adicionar o nome de todas elas?

Link para o comentário
Compartilhar em outros sites

@Gabriel Gallonetti Essa macro que cria a tabela dinâmica só precisa rodar uma vez. Depois é só atualizar e aplicar o filtro. E se os dados estiverem formatados como Tabela (Inserir > Tabela) o range será ajustado automaticamente. No seu primeiro post os critérios do filtro eram "saldo" e "folha de pagamento", para mudar isso é só passar esses valores para o filtro. Uma forma seria com uma Sub com os dois parâmetros, assim,

 

Sub AtualizaTabela(FiltroCategoria As String, FiltroFavorecido As String)
    Dim Tabela      As PivotTable
    Dim Favorecido  As PivotField
    Dim Categoria   As PivotField
    
    Set Tabela = ThisWorkbook.Sheets("Dinâmica").PivotTables("TabelaDinamica")
    Set Categoria = Tabela.PivotFields("Categoria Financeira")
    Set Favorecido = Tabela.PivotFields("Favorecido")
    
    Categoria.ClearAllFilters
    Favorecido.ClearAllFilters
    Call Categoria.PivotFilters.Add2(Type:=xlCaptionEquals, Value1:=FiltroCategoria)
    Call Favorecido.PivotFilters.Add2(Type:=xlCaptionContains, Value1:=FiltroFavorecido)
    Tabela.PivotCache.Refresh
End Sub

 

Aí é só passar os argumentos para a Sub, p.ex,

Sub Macro()
    Call AtualizaTabela("Consorcios contemplados (Despésa)", "GAPLAN")
End Sub

 

Obs: No filtro do favorecido usei CaptionContains porque os dados estão com espaço.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...