Como disparar uma macro automaticamente toda vez que a busca de um dado é encontrado numa coluna índice?

Tenho uma planilha (P1) que contém uma TABELA PADRAO de Serviços de Engenharia.
Ela contém os seguintes colunas (campos): ITEM,DISCRIMINAÇÃO, QTDE, UND, PC UNIT e PC TOTAL.
Essa planilha possui 5 mil linhas de serviços. Paralelamente, tenho um segunda planilha (P2) que CONTÉM 3 colunas/campos: ITEM, DIVISOR, DESCRITOR.
Essa segunda planilha serve como uma tabela ÍNDICE. Ou seja, iniciando na primeira linha e primeira coluna da P2 tenho um item (comum as duas planilhas) que deve ser buscado na P1. Ao se encontrar em P1 o registro buscado pela P2, inicia-se em P1 uma macro que precisará usar em seu corpo os dados DIVISOR e DESCRITOR da respectiva linha de busca de P2.
Assim, resumidamente, desejo aplicar a MACRO em P1 toda vez que a busca dos registros do campo ITEM de P2 for encontrado ao longo no campo ITEM de P1. A itenização é única. Não há itens repetidos.
Pensei em usar PROCV e CALL MACRO mas não sei como fazer. Agradeço a ajuda.

Link com um esboço do que preciso :

.

Seja bem vindo @jolivaljr, o que exatamente faz a macro ?

Dependendo da necessidade um PROCV + cálculos resolva.

Mostre qual o resultado esperado…

Bom dia. Primeiramente agradeço muito o apoio e a sua disponibilidade em responder. Vou tentar explicar melhor. Por favor veja minhas explicações no link a seguir:

Muito obrigado mesmo!

Ola @jolivaljr, poste uma imagem de como deve ficar a P1 da vencedora para a fiscalização. Esta divisão é feita em linhas ou tipo cronograma em colunas ?

Sobre a Macro que já possue, poste ela, fica mais fácil fazer testes.

Por exemplo é gerada uma P3 ?

O DIVISOR tem limite máximo ?

Quando o DIVISOR não for parcelar !! é indicado 1 ?

Segue uma imagem extraída da planilha P1 original (primeiros itens).

Segue uma imagem extraída da P1 após a execução da macro que divide o item 1.1.1 nos subitens 1.1.1.1 …1.1.1.30

Nesse exemplo, não foi gerada uma nova Planilha. A P1 foi sendo alterada pela macro item a item, caso a caso. A P2 seria “o gatilho” a macro rodar sozinha

A sua macro pode ser acionada pela minha do teste ?

Poste a macro para que eu teste com a minha …

Bom dia,

Segue o link para a macro:

Obrigado novamente!

Bom dia Gilberto…conseguiu acessar o link?

Ola @jolivaljr, ok consegui sim, desculpe a demora do retorno, Esposa teve que implantar Marca-passo com urgência, tive que dar um tempo para o passatempo de planilhas, mas a onda passou, estou voltando. Rodei a macro aqui, ela é em VBA(Excel) certo, no primeiro item ficou certo, a partir do segundo fica uma sujeira estranha, vide imagem, o seu fica certo ?. imagem

Obrigado em responder. Não precisa se desculpar! Espero que tudo tenha melhorado!. Sobre a MACRO, é em VBA(excel) sim. Ela roda bem aqui na planilha original onde tenho que dividir itens (linhas) que necessitam de um maior detalhamento periódico. Quando rodo a macro não fica sujeira não. Creio que pode ser o reposicionamento da ActiveCell. Para cada macro há um reposicionamento da célula ativa para a próxima linha a ser dividida. Por algum motivo parece que isso não está acontecendo contigo.

O fato é que eu tenho que linha a linha decidir se disparo ou não a macro! Queria uma forma de dispará-la baseado na P2 que tem listado os itens que necessitam ser divididos, o texto a ser acrescido na descrição das linhas dividias e o nr de divisões necessárias para aquele item. Com isso, consigo otimizar a execução da macro em toda P1 ou até mesmo em uma nova Planilha (P3…quem sabe!) de uma única vez!
Aguardo…obrigado…muito obigado

A macro que enviei ele segue o Índice e vai para a TabelaPadrao, ao localizar o item aciona a sua macro, só preciso pegar as variáveis do índice e jogar no InputBox de sua macro. Vou dar uma olhada mais detalhada a noite. Ok.Segue arquivo que rodei a macro.

Ola @jolivaljr, acertei a Macro ela percore a coluna do ÍNDICE, pega as tres variaveis, vai para Tabela e divide os itens até o final.

Arquivo alterado

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

boa tarde…vou olhar…obrigado

Bom dia Gilberto. Pergunto ao colega se a macro roda apenas no LibreOffice? Para converter para o Excel ( que é a ferramenta disponibilizada aqui na minha empresa) preciso fazer alguma conversão/reedição ?

Ola @jolivaljr, Sim este site de ajuda é para LibreOffice. Não conheço conversão direta. Aconselho pedir ajuda em site de Excel.

Penso que estudar um caso parecido vai te ajudar. Use este arquivo para estudar controle de estoque tire a proteção das planilhas, assim poderá visualizar as fórmulas. A senha delas está nas propriedades do documento.

Olá, não sei exatamente o resultado que quer chegar, esta macro serve de ideia: Arquivo do teste

Sub Comecar
	Call IrPara "ITENS"
	Call TESTANDO
end Sub

  
'============
Sub TESTANDO
Dim Plan As Object
Dim Var1 As String
Dim oSel As Object
dim document   as object
dim dispatcher as object

	Call IrPara "ÍNDICE"
	Call DeslocarAbaixo 1
' ===== Pegar a variavel Var1, a Pesquisar
	oSel = ThisComponent.getCurrentSelection()
	Var1 = oSel.getString()
	
'	While Var1 <>""
	
'TESTE
if Var1 = "" then 
	MsgBox "Nº ITEM em branco", 0, "A t e n ç ã o"
else
' ===== Ir para o Banco de Dados
	Call IrPara "ITENS2"
	Call SelecionarColuna
' ===== Fazer a busca, achar a célula com a informação
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args3(20) as new com.sun.star.beans.PropertyValue
args3(0).Name = "SearchItem.StyleFamily"
args3(0).Value = 2
args3(1).Name = "SearchItem.CellType"
args3(1).Value = 0
args3(2).Name = "SearchItem.RowDirection"
args3(2).Value = true
args3(3).Name = "SearchItem.AllTables"
args3(3).Value = false
args3(4).Name = "SearchItem.SearchFiltered"
args3(4).Value = false
args3(5).Name = "SearchItem.Backward"
args3(5).Value = false
args3(6).Name = "SearchItem.Pattern"
args3(6).Value = false
args3(7).Name = "SearchItem.Content"
args3(7).Value = false
args3(8).Name = "SearchItem.AsianOptions"
args3(8).Value = false
args3(9).Name = "SearchItem.AlgorithmType"
args3(9).Value = 0
args3(10).Name = "SearchItem.SearchFlags"
args3(10).Value = 0
args3(11).Name = "SearchItem.SearchString"
args3(11).Value = Var1 '<=====VARIAVEL
args3(12).Name = "SearchItem.ReplaceString"
args3(12).Value = ""
args3(13).Name = "SearchItem.Locale"
args3(13).Value = 255
args3(14).Name = "SearchItem.ChangedChars"
args3(14).Value = 2
args3(15).Name = "SearchItem.DeletedChars"
args3(15).Value = 2
args3(16).Name = "SearchItem.InsertedChars"
args3(16).Value = 2
args3(17).Name = "SearchItem.TransliterateFlags"
args3(17).Value = 256
args3(18).Name = "SearchItem.Command"
args3(18).Value = 0
args3(19).Name = "SearchItem.SearchFormatted"
args3(19).Value = false
args3(20).Name = "SearchItem.AlgorithmType2"
args3(20).Value = 1
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args3())
dim args4(1) as new com.sun.star.beans.PropertyValue
args4(0).Name = "By"
args4(0).Value = 1
args4(1).Name = "Sel"
args4(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoLeftToStartOfData", "", 0, args4())
'===== Abaixo vai a Chamada da Macro a executar.
' Call MacroExecutar

	
	Call TESTANDO
	
end If	
	
end Sub	


' ============== SUBMACROS ========================================================


Sub MacroExecutar
	'montar rotina da macro
end Sub





'================================================|
sub IrPara (xlocal as string)
'exemplo uso: IrPara "Planilha.A1" ou "Planila1.A1:B3" ou "NomeArea"
'================================================|
Dim document As Object
Dim 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 = xlocal
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
end sub

	


'================================================|
sub DeslocarAbaixo (xqt As Integer)
' xqt = quantidade de linhas 
' uso: DeslocarAbaixo 3 '3 linhas
'================================================|
Dim document As Object
Dim dispatcher As Object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "By"
args1(0).Value = xqt '<==== quantidade linhas.
args1(1).Name = "Sel"
args1(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0,  args1())
end sub



'=====================================================================
sub SelecionarColuna
'=====================================================================
dim document   as object
dim dispatcher as object
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "By"
args2(0).Value = 1
dispatcher.executeDispatch(document, ".uno:GoDownToEndOfDataSel", "", 0, args2())
end sub

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