@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í.
@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.
@Joao1, o problema desta atualização é movimentar somente uma linha e não ser na coluna uma data geral, como a imagem inicial indica.
@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.
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 na pergunta ou abaixo. Não use Adicionar resposta para comentário. Grato.
Caso a resposta atendeu sua necessidade, por gentileza, click na bolinha 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.