@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.