Página 1 de 1

Planilha não executa macro ao ser alterada

Enviado: 25 Abr 2018 às 18:52
por AlexandreJos
Meus Caros,

Boa noite.
Esta é a primeira vez que posto aqui no Guru do Excel.

Estou recorrendo ao fórum para tentar resolver um código VBA aqui.

Por favor, poderiam dar uma olhada?

Explicando: Segue anexo uma planilha de lançamentos. A cada linha lançada, a coluna F pode conter, entre outras, as palavras "Compra" ou "Venda". Toda vez que aparecer "Compra" ou "Venda" na coluna F, as fórmulas da planilha preenchem a linha imediatamente abaixo da linha lançada, que aqui eu chamo de "linha gerada". Até aqui tudo funciona.

Na linha gerada, na coluna O, tem uma fórmula que resulta em um número. Exatamente neste ponto, eu preciso que a fórmula deixe de existir e permaneça apenas o resultado da fórmula. Depois de horas de tentativas e erros eu consegui um resultado parcial com este código:

Sub ProcCompraVenda()

Dim i As Long
Dim LastLine As String

'Localiza a última linha preenchida da planilha na coluna F
'LastLine = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
LastLine = Plan1.Cells(Rows.Count, 6).End(xlUp).Row

'Determina onde inicia-se a localização na coluna F
For i = 3 To LastLine

'Procura por Compra ou Venda na coluna F
If Plan1.Cells(i, 6) = "Compra" Or Plan1.Cells(i, 6) = "Venda" Then

'Seleciona célula que receberá a macro
Plan1.Cells(i + 1, 17).Select
'Executa a macro que elimina a fórmula de deixa o seu resultado
Call Macro1_EliminarFormula

End If

Next i
End Sub

O que fiz até aqui foi um código que chama uma macro e transforma uma formula em seu resultado. Agora eu preciso que a cada linha lançada, isto seja verificado. Assim:

- A cada linha lançada o código verifique se na coluna F existe as palavras "Compra" ou "Venda". Em caso positivo, o código precisa ir até a coluna O, imediatamente abaixo da linha lançada, e executar a macro contida no código acima (que transforma uma formula em seu resultado).

A inteligência esperada aqui é justamente reconhecer, a cada linha lançada, os lançamentos de "Compra" ou "Venda" na coluna F e que estes dois lançamentos representem a condição para executar a macro na coluna O da linha gerada. Isso deve resolver o problema.

O código acima quando executado de dentro do Editor VBA funciona. Ele percorre a condição por toda a planilha e executa a macro nas células corretas, MAS quando lanço uma nova linha, a macro/código (ainda não sei o que acontece) não é acionada. A condição para a macro ser acionada deveria ser orgânica, transparente para o usuário, sem eu precisar entrar no Editor VBA para disparar a macro.

NOTA1: Para não perder as fórmulas da planilha eu repiquei a coluna O na coluna Q e apliquei o código acima na coluna repicada (Q).

NOTA2: eu também gostaria de acrescentar uma tarefa a mais no código antes dele executar a macro. Hoje quando existe o lançamento de uma Compra ou Venda na coluna F, a planilha, por fórmula, multiplica, na mesma linha as células O por k (quantidade x Cotação), só depois a planilha chama a execução da macro. Eu gostaria que o código passasse a fazer esta conta antes de chamar a macro e não mais as fórmulas da planilha.

Alguém pode ajudar, por favor?

Obrigado.

Estou há dias tentando resolver isso.
Espero que possam me ajudar e desde já eu agraço imensamente!

Re: Planilha não executa macro ao ser alterada

Enviado: 26 Abr 2018 às 10:34
por osvaldomp
Se a sua tabela ainda necessita da substituição das fórmulas pelos seus respectivos valores conforme o critério, então rode o código abaixo.
Para rodar o código (que deverá ser instalado em um módulo comum) ~~~> com a planilha "Saldos" ativa aperte Alt+F8 / selecione SubstituiFórmulaPorSeuValor / Executar
Código: Selecionar todos
Sub SubstituiFórmulaPorSeuValor()
 Dim LR As Long, c As Range
  Application.ScreenUpdating = False
  ActiveSheet.AutoFilterMode = False
  LR = Cells(Rows.Count, "F").End(3).Row
  ActiveSheet.Range("B2:O" & LR).AutoFilter Field:=5, Criteria1:="=Compra", Operator:=xlOr, Criteria2:="=Venda"
   For Each c In Range("F3:F" & LR).SpecialCells(xlCellTypeVisible)
    c.Offset(1, 9).Value = c.Offset(1, 9).Value
   Next c
  ActiveSheet.AutoFilterMode = False
  ActiveSheet.[B2].AutoFilter
  Application.ScreenUpdating = True
End Sub
Daí em diante ao inserir os termos "Compra" ou "Venda" via teclado/mouse na coluna F, o código abaixo (que deverá ser instalado no módulo da planilha "Saldos") irá fazer a substituição da fórmula pelo seu valor conforme o critério.
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Count > 1 Then Exit Sub
 If Target.Column <> 6 Or (Target.Value <> "Compra" And Target.Value <> "Venda") Then Exit Sub
 Target.Offset(1, 9).Value = Target.Offset(1, 9).Value
End Sub
obs. antes de testar os códigos acima remova os códigos existentes no seu arquivo.

Re: Planilha não executa macro ao ser alterada

Enviado: 26 Abr 2018 às 11:14
por AlexandreJos
Caro osvaldomp,

Muito obrigado pelo retorno!
Muito bom!

Obrigado.

Re: Planilha não executa macro ao ser alterada

Enviado: 27 Abr 2018 às 16:52
por babdallas
AlexandreJos, marque o tópico como resolvido.