Macro para atualizar duas Tabelas Dinâmicas na mesma planilha

Tenho duas tabelas dinâmicas numa planilha chamada Relatorio, e preciso de uma Macro para atualizar todas as Tabelas ao mesmo tempo atribuindo num botão. Como seria essa macro se o botão estiver na mesma planilha e se estivesse numa planilha diferente?

Ola @quitomoreno, seja bem vindo ao Grupo.

Tenho estas macros:

	'================================================|
sub AtualizarTabelaDimamicaPorCelula (x as string)	
	' exemplo uso: AtualizarTabelaDinamicaPorCelula  "Planilha1.c7"
	' x = célula da Tabela Dinâmica.
	'================================================|
	Dim document, dispatcher As Object
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	dim args1(0) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "ToPoint"
	args1(0).Value = x 'indicar uma célula da Tabela Dinâmica.
	dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
	dispatcher.executeDispatch(document, ".uno:RecalcPivotTable", "", 0, Array())
end Sub
	
	
	'================================================|
Sub AtualizaTabelaDinamicaPorNumero (x as integer)	
	' exemplo uso: AtualizarTabelaDinamicaPorNumero 1
	' x = numero da Tabela Dinâmica.
	' Desenvolvida por Grafeno.
	'================================================|
	'Obter a Planilha Ativa e a Tabela Dinâmica
	PlanAtiva = ThisComponent.getCurrentController.getActiveSheet()
	TabDinam1 = PlanAtiva.DataPilotTables.getByIndex(x) 'x = Numero Tabela
	'Atualizar a Tabela Dinâmica
	TabDinam1.refresh()
End Sub

Pode deixa-las como SubMacros

Para usar:

Sub AtualizarTabDin
Call AtualizarTabelaDinamicaPorCelula "Planilha1.C2"
Call AtualizarTabelaDinamicaPorCelula "Planilha2.C2"
Ens Sub

ou

Sub AtualizarTabDin
Call AtualizarTabelaDinamicaPorNumero 1
Call AtualizarTabelaDinamicaPorNumero 2
Ens Sub

ATENÇÂO:: Caso queira dar mais detalhes a sua pergunta, use Descrição da imagem na pergunta ou Descrição da imagem abaixo. Grato.

Caso a resposta atendeu sua necessidade, por gentileza, click na bolinha Descrição da imagem a esquerda da resposta, para finalizar a pergunta.

Olá boa tarde, obrigado pela resposta, mas não consegui está dando a seguinte mensagem:
Ocorreu um erro de Scripting Framework durante a execução do script Basic Standard.Atualiza_Cartas.AtualizaTabelaDinamicaPorNumero.

Mensagem: wrong number of parameters!

.

'----------------------------------------------------------------
    '   Atualiza a primeira Tab. Dinâmica da Planilha Ativa
    '----------------------------------------------------------------
    Sub AtualizarTabDinamica
    Dim PlanAtiva as Object
    Dim TabDinam1 as Object
    
        'Obter a Planilha Ativa e a Tabela Dinâmica
        PlanAtiva = ThisComponent.getCurrentController.getActiveSheet()
        TabDinam1 = PlanAtiva.DataPilotTables.getByIndex(0)
    
        'Atualizar a Tabela Dinâmica
        TabDinam1.refresh()
    End sub

Usei esta Macro mas só está atualizando a primeira tabela mas eu tenho 4 na mesma planilha, queria que atualizasse todas ao mesmo tempo.

@quitomoreno, Use assim: a ref. Plan1 é o NomeDaSuaPlanilha e a célula, é uma qualquer de cada Tabela dinâmica.

Sub AtualizarTabelasDinamicas
Call AtualizarTabelaDimamicaPorCelula "Plan1.C2"
Call AtualizarTabelaDimamicaPorCelula "Plan1.F2"
Call AtualizarTabelaDimamicaPorCelula "Plan1.H2"
Call AtualizarTabelaDimamicaPorCelula "Plan1.K2"
End Sub


Sub AtualizarTabelaDimamicaPorCelula (x as string)  
    Dim document, dispatcher As Object
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    dim args1(0) as new com.sun.star.beans.PropertyValue
    args1(0).Name = "ToPoint"
    args1(0).Value = x 'indicar uma célula da Tabela Dinâmica.
    dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
    dispatcher.executeDispatch(document, ".uno:RecalcPivotTable", "", 0, Array())
end Sub

A macro de numero, não sei onde ver o numero da tabela dinâmica

Ainda tá dando erro:

Ocorreu um erro de Scripting Framework durante a execução do script Basic Standard.Atualizar.AtualizarTabelaDimamicaPorCelula.
Mensagem: wrong number of parameters!

Deixei assim:

Sub AtualizarTabelasDinamicas
Call AtualizarTabelaDimamicaPorCelula "Relatorio.C4"
Call AtualizarTabelaDimamicaPorCelula "Relatorio.D22"
Call AtualizarTabelaDimamicaPorCelula "Relatorio.C34"
Call AtualizarTabelaDimamicaPorCelula "Relatorio.D54"
End Sub


Sub AtualizarTabelaDimamicaPorCelula (x as string)  
    Dim document, dispatcher As Object
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    dim args1(0) as new com.sun.star.beans.PropertyValue
    args1(0).Name = "ToPoint"
    args1(0).Value = C4 'indicar uma célula da Tabela Dinâmica.
    dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
    dispatcher.executeDispatch(document, ".uno:RecalcPivotTable", "", 0, Array())
end Sub

Poderia me enviar o arquivo, sigilo garantido.

Veja aqui o contato. https://wiki.documentfoundation.org/User:Schiavinatto

OK erro localizado: deve ser este, na linha

args1(0).Value = C4 'indicar uma célula da Tabela Dinâmica.

manter como original

args1(0).Value = x 'indicar uma célula da Tabela Dinâmica.

O x é a variável que a macro inicial vai substituindo.

Boa tarde.
No site da Studio Excel foi disponibilizado um excelente código vba que permite atualizar todas as tabelas dinâmicas automáticas de maneira rápida. Você pode conferir aqui.

@rfh7, mas… funciona no Calc.?

O ideal é você inserir o código em um botão. Esse código irá percorrer todas as tabelas dinâmicas de sua planilha.

@rfh7, mas não funciona no Calc…