Página 1 de 1

Criar Tabela Dinâmica via VBA

Enviado: 11 Dez 2018 às 21:14
por AlissonHenrique89
Boa noite, pessoal.

Preciso criar uma tabela dinâmica via VBA, pois tenho que comparar o relatório de vendas no nosso sistema com o relatório do sistema do cliente. A tabela dinâmica é necessária porque nosso sistema segmenta alguns dados e o relatório do cliente não. Por isso, uso a tabela dinâmica para agrupar os dados do nosso sistema.

Como sou noob em VBA ainda, gravei uma macro da montagem da tabela dinâmica. O problema é que como são empresas diferentes, a quantidade de colunas é fixo mas a quantidade de linhas mudam.

Então quando executo o código em uma tabela que contenha mais linhas, algumas linhas são omitidas na tabela dinâmica e quando a tabela tem menos linhas fica um campo escrito "(vazio)" na tabela dinâmica.

Eu preciso de uma correção no código para que a tabela dinâmica utilize somente a área com dados da tabela original.

Agradeço quem puder me ajudar.

Segue um exemplo do código que estou utilizando e planilha.
Código: Selecionar todos
Sub Macro3()
'
' Macro3 Macro
'

'
    Range("A1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Planilha1!R1C1:R6C9", Version:=6).CreatePivotTable TableDestination:= _
        "Planilha1!R1C12", TableName:="Tabela dinâmica3", DefaultVersion:=6
    Sheets("Planilha1").Select
    Cells(1, 12).Select
       With ActiveSheet.PivotTables("Tabela dinâmica3").PivotCache
        .RefreshOnFileOpen = False
        .MissingItemsLimit = xlMissingItemsDefault
    End With
    ActiveSheet.PivotTables("Tabela dinâmica3").RepeatAllLabels xlRepeatLabels
    With ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Loja")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Filial")
        .Orientation = xlRowField
        .Position = 2
    End With
    With ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Data")
        .Orientation = xlRowField
        .Position = 3
    End With
    With ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Nota")
        .Orientation = xlRowField
        .Position = 4
    End With
    With ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Serie")
        .Orientation = xlRowField
        .Position = 5
    End With
    ActiveSheet.PivotTables("Tabela dinâmica3").AddDataField ActiveSheet. _
        PivotTables("Tabela dinâmica3").PivotFields("Valor"), "Soma de Valor", xlSum
    With ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Chave")
        .Orientation = xlRowField
        .Position = 6
    End With
    Range("L2").Select
    ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Loja").Subtotals = _
        Array(False, False, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Loja").LayoutForm = _
        xlTabular
   
    Range("M2").Select
    ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Filial").Subtotals = _
        Array(False, False, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Filial").LayoutForm = _
        xlTabular
    Range("N2").Select
    ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Data").Subtotals = _
        Array(False, False, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Data").LayoutForm = _
        xlTabular
    Range("O2").Select
    ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Nota").Subtotals = _
        Array(False, False, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Nota").LayoutForm = _
        xlTabular
    Range("P2").Select
    ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Serie").Subtotals = _
        Array(False, False, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("Tabela dinâmica3").PivotFields("Serie").LayoutForm = _
        xlTabular
End Sub

Re: Criar Tabela Dinâmica via VBA

Enviado: 12 Dez 2018 às 06:53
por DJunqueira
Agora qq linha nova acrescida será incorporada pela tabela dinâmica.

Criar Tabela Dinâmica via VBA

Enviado: 12 Dez 2018 às 20:53
por AlissonHenrique89
Era isso mesmo que eu precisava.
Muito obrigado, DJunqueira!!!!