Criar um histórico de contagens por item

@Conras faltou uma observação: Seria atualização diária. A cada dia seria incluso itens diferentes, não funcionaria mensalmente, sobrecarregando como imagina.

Poste uma imagem, Como é lançado na planilha [Contagem] ?

Edite sua pergunta para anexar.

@schiavinatto na Planilha Contagem funciona de forma independente, só é preenchido a contagem de tal item e seu respectivo valor observacional, ou seja, sua diferença. Assim, na coluna E puxa o valor dessa observação e volta para a célula. Assim sendo, casa não tenha nenhuma informação a ser obtida retorna o valor “” (vazio).

Pelo que entendi acima na pergunta, ela é a fonte para carregar na Acompanhamento, certo?

Se SIM fica mais fácil sugerirmos algo se sabermos como esta a informação fonte.

@Joao1, se puder postar a imagem da planilha contagem, facilita mais a análise. Pois com base em suas informações, um simples SOMASES, resolve o problema. E lembrando que, com 01 data ou N datas, a macro vai percorrer linha a linha das duas abas na mesma forma. Seria um cálculo longo tendo em base a quantidade de informações que seu bando de dados possuí.

@schiavinatto Sim, ela fornece apenas a diferença no estoque. Um único valor pelo PROCV.

@Conras não se trata de somar as diferenças ou algo assim, quero deixar registrado todas as diferenças que tiveram ao longo das contagens.

Ou seja, hoje no dia 01 contamos o produto X e obteve a diferença H. Assim ele vai pegar essa diferença H que se encontra na célula E8 e começar a montar o histórico. A cada diferença que aparece na célula E8 tem que ser registrada em sua linha mantendo as diferenças anteriores.
No dia 02, não contamos o produto X mas contamos o produto Y, ou seja, a célula E8 estará vazia assim o macro pulará para a célula E9, que encontra uma diferença K, sendo assim fazer o mesmo processo da diferença H, criar o histórico na linha do produto Y.
No dia 03, voltamos a contar o produto X e obtivemos a diferença H novamente. Assim sendo, como a célula que recebe a informação (no caso do produto X = E8), não está vazia, ele vai criar uma célula antes da diferença anterior (NA MESMA LINHA) e colar a diferença do dia 03 antes da diferença do dia 01.
Enviei por email

Planilha para testes está anexa ao Tópico.

Vocês preenchem a Coluna “K” ou a Coluna “M” da aba Contagem? E cada dia terá um relatório de contagem diferente? De onde é extraído os dados da Coluna Auditoria?

O valor a ser informado na planilha do histórico seria o Valor da Coluna M.
Sim, a cada dia seria um relatório diferente. Uma vez que, pela quantidade alta do mix de produtos, até retornar no primeiro demoraria, assim sendo, dividimos.

@Conras há alguma novidade a respeito?
@schiavinatto há alguma novidade a respeito?

@Joao1, o problema desta atualização é movimentar somente uma linha e não ser na coluna uma data geral, como a imagem inicial indica.

Descrição da imagem

@schiavinatto não vou considerar mais a data. Pode esquecer este campo com data. Como citei acima, daria interferência com as datas reais das contagens dos produtos. Só quero que ele atualize linha por linha , produto por produto. Caso o produto não é contado, quero que ele pule para o próximo produto e verifica se é contado ou não, caso contado inseri a informação, caso não segue para o próximo item.

@Joao1, se na planilha Contagem a coluna M der 0 (zero) é lançada ou desprezada na planilha Acompanhamento.

@Joao1, desculpa a ausência…estou em fechamento semanal de indicadores da fábrica.

Ola @Joao1, segue uma macro “funcionando sem parar”… precisa de um conserto

para parar pressione Shift+F5

NÃO SALVAR EM EXCEL, VAI PERDER AS MACROS.

Arquivo teste

REM  *****  BASIC  *****

Sub Atualizar
	IrPara "Iniciar" 'Iniciar é a célula E7 nomeada.
	Execute "GoDown"
	Continue
End Sub	

Sub Continue
Dim oSel as Object : oSel = ThisComponent.getCurrentSelection()
Var1 = oSel.getString()
	Do While Var1 = "" Or Var1 = "-"
		Execute "GoDown"
		oSel = ThisComponent.getCurrentSelection()
		Var1 = oSel.getString()
	Loop
	Mover
End Sub

Sub Mover
	Execute "Copy"
	Execute "GoRight"
	InsertCellRight
	ColarOque "SVD"
	Execute "GoLeft"
	Execute "GoDown"
	Continue
End Sub

'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
'                                                                     SUBMACROS
'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Sub Execute ( oQue$ )
CreateUnoService("com.sun.star.frame.DispatchHelper") _
.executeDispatch(ThisComponent.CurrentController.Frame, ".uno:" & oQue & "", "", 0, Array())
End Sub

Sub IrPara ( X As String )
'O############################################################################O
dim args1(0) as new com.sun.star.beans.PropertyValue : args1(0).Name = "ToPoint" : args1(0).Value = X
CreateUnoService("com.sun.star.frame.DispatchHelper") _
.executeDispatch(ThisComponent.CurrentController.Frame, ".uno:GoToCell", "", 0, args1())
End Sub

Sub InsertCellRight
'O############################################################################O
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Flags" : args1(0).Value = ">"
CreateUnoService("com.sun.star.frame.DispatchHelper") _
.executeDispatch(ThisComponent.CurrentController.Frame, ".uno:InsertCell", "", 0, args1())
End Sub

Sub ColarOque ( xxx$ )
'O############################################################################O
' Add the letters in the sequence below - |- - - or - -- - - - |
' "S" "V" "D" "F" "N" "T" | “A” |
' Text Number DateTime Formula Annotation Format | All + Object |
'------------------------------------------------------------------------------------|
dim args1(5) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Flags" : args1(0).Value = xxx 
args1(1).Name = "FormulaCommand" : args1(1).Value = 0
args1(2).Name = "SkipEmptyCells" : args1(2).Value = false
args1(3).Name = "Transpose" : args1(3).Value = "false"
args1(4).Name = "AsLink" : args1(4).Value = "false"
args1(5).Name = "MoveMode" : args1(5).Value = 4
CreateUnoService("com.sun.star.frame.DispatchHelper") _
.executeDispatch(ThisComponent.CurrentController.Frame, ".uno:InsertContents", "", 0, args1())
End Sub

ATENÇÂO:: Para dar mais detalhes a sua pergunta, use Descrição da imagem na pergunta ou Descrição da imagem abaixo. Não use Adicionar resposta para comentário. Grato.

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

@Joao1, segue complemento verificando qual coluna está vazia para receber a contagem

Sub ChecarProduto
	
	Dim oDoc, oPlan1, oPlan2 as Object
	Dim UltimaLinhaContagem, UltimaLinhaAcompanhamento as Long
	Dim CodigoContagem, CodigoAcompanhamento as String
	Dim Contagem as Double
	Dim LinInicialContagem, LinInicialAcompanhamento as Long
	Dim FaltaCodigo, CodigoOk as String
	Dim nCount, c as Long
	Dim Check as String
	
		oDoc = ThisComponent
		oPlan1 = oDoc.Sheets.getbyname("Contagem")
		oPlan2 = oDoc.Sheets.getbyname("Acompanhamento")
		rng = oPlan2.getcellrangebyname("A8:Z8")
			
			rem as linhas no libreoffice começam a contar a partir do 0. A1  = 0 / A2 = 1 / A3 = 2 .... Serve o mesmo para coluna
			LinInicialContagem = 7
			LinInicialAcompanhamento = 7
			
			rem verifica qual coluna está vazia entre as colunas "E" e "Z"
			For c = 4 to 25
				Check = oPlan2.getcellbyposition(c, LinInicialAcompanhamento).String
				If Check = "" Then
					nCount = c
					Exit for
				End If
			Next c
			
			If nCount = "" then
				MsgBox "Planilha atingiu número máxima de contagens." & Chr(10) & "Crie nova planilha"
				Exit Sub
			End If
			
			Do rem percorre linha a linha da aba Contagem
				CodigoContagem = oPlan1.getcellbyposition (0, LinInicialContagem). String
				Contagem = oPlan1.getcellbyposition (12, LinInicialContagem). Value
				
				rem percorre linha a linha da aba Acompanhamento
				Do While oPlan2.getcellbyposition (0, LinInicialAcompanhamento). String <> ""
					CodigoAcompanhamento = oPlan2.getcellbyposition (0, LinInicialAcompanhamento). String
					If CodigoAcompanhamento = CodigoContagem Then
						oPlan2.getcellbyposition (c, LinInicialAcompanhamento).Value = Contagem
						LinInicialAcompanhamento = 7
						CodigoOk = "Sim"
						FaltaCodigo = ""
						Exit do
					Else
						CodigoOk = "Não"
					End If
					LinInicialAcompanhamento = LinInicialAcompanhamento + 1
				Loop
				
				If CodigoOk = "Não" Then
					FaltaCodigo = CodigoContagem & Chr(10) & FaltaCodigo
				End If
				
				LinInicialContagem = LinInicialContagem + 1
			Loop Until CodigoContagem = ""
			
				If FaltaCodigo <> "" Then
					MsgBox "Códigos não encontrados" & Chr(10) & FaltaCodigo
				End If
			
			MsgBox "Concluido!!"
	
End Sub

@Joao1, segue uma macro para percorrer cada linha da aba contagem, e depois cada linha da aba acompanhamento.

Como funciona:

1 - inicia pegando o código do primeiro produto da aba contagem (linha 08), e depois verifica em cada linhada aba acompanhamento (a partir da linha 08) se contém o código.

2 - quando o código existe, ele pega o valor da contagem (coluna M da aba contagem), e lança na coluna E da aba acompanhamento.

3 - quando algum código da aba contagem, não existir na aba acompanhamento, aparece uma msg no final informando os mesmos.

4 - após concluído toda a programação, aparece uma msg no fim como Concluído.

Sub ChecarProduto
	
	Dim oDoc, oPlan1, oPlan2 as Object
	Dim UltimaLinhaContagem, UltimaLinhaAcompanhamento as Long
	Dim CodigoContagem, CodigoAcompanhamento as String
	Dim Contagem as Double
	Dim LinInicialContagem, LinInicialAcompanhamento as Long
	Dim FaltaCodigo, CodigoOk as String
	
		oDoc = ThisComponent
		oPlan1 = oDoc.Sheets.getbyname("Contagem")
		oPlan2 = oDoc.Sheets.getbyname("Acompanhamento")
			
			rem as linhas no libreoffice começam a contar a partir do 0. A1  = 0 / A2 = 1 / A3 = 2 .... Serve o mesmo para coluna
			LinInicialContagem = 7
			LinInicialAcompanhamento = 7
			
			Do rem percorre linha a linha da aba Contagem
				CodigoContagem = oPlan1.getcellbyposition (0, LinInicialContagem). String
				Contagem = oPlan1.getcellbyposition (12, LinInicialContagem). Value
				
				rem percorre linha a linha da aba Acompanhamento
				Do While oPlan2.getcellbyposition (0, LinInicialAcompanhamento). String <> ""
					CodigoAcompanhamento = oPlan2.getcellbyposition (0, LinInicialAcompanhamento). String
					If CodigoAcompanhamento = CodigoContagem Then
						oPlan2.getcellbyposition (4, LinInicialAcompanhamento).Value = Contagem
						LinInicialAcompanhamento = 7
						CodigoOk = "Sim"
						FaltaCodigo = ""
						Exit do
					Else
						CodigoOk = "Não"
					End If
					LinInicialAcompanhamento = LinInicialAcompanhamento + 1
				Loop
				
				If CodigoOk = "Não" Then
					FaltaCodigo = CodigoContagem & Chr(10) & FaltaCodigo
				End If
				
				LinInicialContagem = LinInicialContagem + 1
			Loop Until CodigoContagem = ""
			
				If FaltaCodigo <> "" Then
					MsgBox "Códigos não encontrados" & Chr(10) & FaltaCodigo
				End If
			
			MsgBox "Concluido!!"
	
End Sub

@Conras Era quase isso amigo, infelizmente só está registrando a contagem atual no lugar da última contagem, não havendo a movimentação de um “Histórico”

@schiavinatto Era isso mesmo. Exatamente o que eu precisava. Como imaginei ficou bastante extenso. Estava trabalhando e elaborei em cima da base de VBA e consegui elaborar exatamente do jeito que eu queria. Todavia, ele não funciona no Office pelo fato das particularidades do Excel. Há como traduzir esse macro para rodar no Office?
Não conheço muito afundo sobre as funções do Office.

Desde já agradeço aos dois pela iniciativa e pela ajuda!
Muito obrigado,
Bom trabalho!

Ola @Joao1, creio que pediu ajuda no lugar errado, aqui é para LibreOffice. Eu não utilizo MS desde 1998 quando conheci o StarOffice, fico devendo.

@Joao1, fiz com base informado que seria uma planilha por data, ajustando a macro dá para colocar em coluna seguintes.

Conforme informado pelo @schiavinatto, não tem como você utilizar a programação do LibreOffice e salvar a planilha em extensão xls, pois a macro seria apagada.

Em relação a compatibilidade MsOffice e LibreOffice, algumas funções não existe no LibreOffice, mas tem como adaptar praticamente tudo que se escreve em MsOffice.