Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Mudança de valor em qualquer célula da Coluna A

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
Mathmatic
Manda bem
Manda bem
Mensagens: 184
Registrado em: Seg Out 24, 2011 1:50 pm

Mudança de valor em qualquer célula da Coluna A

Mensagem por Mathmatic »

Pessoal,

O código VBA abaixo, encontrei no Link: https://social.msdn.microsoft.com/Forum ... orum=vbapt

da forma que está escrito, só se baseia na mudança de valor da célula A1 ,
então Pergunto:

Teria como adaptá-lo para qualquer célula da Coluna A ? tipo assim :
If Not Intersect(Target, Range("A:A")) Is Nothing Then


================================================


Private Sub Worksheet_Change(ByVal Target As Range)

Dim i As Long

If Not Intersect(Target, Range("A1")) Is Nothing Then

i = Sheets("Plan2").Cells(Rows.Count, "A").End(xlUp).Row + 1

Sheets("Plan2").Range("A" & i).Value = Date
Sheets("Plan2").Range("B" & i).Value = Time
Sheets("Plan2").Range("C" & i).Value = Sheets("Plan1").Range("A1").Value
End If

End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: Mudança de valor em qualquer célula da Coluna A

Mensagem por Mauro Coutinho »

use:

Código: Selecionar todos

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim i As Long

    If Not Intersect(Target, Range("A:A")) Is Nothing Then
    
        i = Sheets("Plan2").Cells(Rows.Count, "A").End(xlUp).Row + 1
    
        Sheets("Plan2").Range("A" & i).Value = Date
        Sheets("Plan2").Range("B" & i).Value = Time
        Sheets("Plan2").Range("C" & i).Value = Target.Value
    
    End If

End Sub
[]s


Mathmatic
Manda bem
Manda bem
Mensagens: 184
Registrado em: Seg Out 24, 2011 1:50 pm

Re: Mudança de valor em qualquer célula da Coluna A

Mensagem por Mathmatic »

Saudações sr. Mauro,

já aproveitando, quero lhe agradecer a ajuda prestada no tópico: Aprimorar código vba : Copiar e Colar

Quanto a este tópico, estou tentando usar o código assim:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
If Not Intersect(Target, Range("A:A")) Is Nothing Then
i = Sheets("Plan1").Cells(Rows.Count, "A").End(xlUp).Row
Range("C" & i).Value = Date
End If
End Sub
======================================================

objetivo : quando ocorrer uma mudança de valor em qualquer célula da coluna A, então o código deverá Lançar a Data na coluna "C", na mesma linha correspondente em que houve a mudança na coluna A (da mesma planilha).

exemplo: se houver mudança na célula A57 então a Data será Lançada na célula C57

fiz testes e notei que sempre Lança a data "somente" na última Linha correspondente.

Pergunta extra: este código servirá também para o caso de haver mudança de valor por fórmula ? ou seja, sem digitar na coluna A, somente mudar por ocorrência de uma fórmula ?


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Mudança de valor em qualquer célula da Coluna A

Mensagem por Reinaldo »

Atendendo sua MP, experimente:

Código: Selecionar todos

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        Range("C" & Target.Row).Value = Date
    End If
End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Mathmatic
Manda bem
Manda bem
Mensagens: 184
Registrado em: Seg Out 24, 2011 1:50 pm

Re: Mudança de valor em qualquer célula da Coluna A

Mensagem por Mathmatic »

Saudações sr. Reinaldo,

o código do sr. executa corretamente a tarefa, MAS somente se a alteração de valor acontecer manualmente (digitando sobre o valor).

estou precisando que a tarefa seja executada se a alteração no valor acontecer por fórmula, pois na coluna "A" existem fórmulas ligadas às outras abas, então preciso que o código Lance a Data na coluna "C" se houver mudança de valor por fórmula .

acho que é através do evento: Private Sub Worksheet_Calculate()


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Mudança de valor em qualquer célula da Coluna A

Mensagem por Reinaldo »

Bom a pergunta inicial foi respondida e creio que atendida. Agora é outra a demanda
O Excel não permite um controle assim como você está "precisando", pode experimentar transferir a rotina para o evento Calculate, mas é um calcula/recalculo da planilha como um todo, independentemente se houveram modificações.
Para tanto, uma possibilidade é: ter um repositório do(s) valor(es) iniciais, e a cada "disparo" do evento calculate, verificar se o valor da celula foi alterado, se sim salvar o novo valor e gravar a data; mas isso com certeza irá refletir no desempenho da planilha.


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: Mudança de valor em qualquer célula da Coluna A

Mensagem por Mauro Coutinho »

Como o Reinaldo ja disse, não temos esta opção diretamente, dá para se tentar alguns caminhos, só que tem de se pensar que toda vez que o excel fizer um recalculo vai percorrer todas as celulas com formula e deixar o processamento mais lento, temos como setar no calculate somente uma celula ou determinado range, mas para isto temos de saber como é todo o procedimento de sua aplicação :

Você diz que tem formulas na Coluna A, mas será digitados valores nesta aba ? ou na mesma não será digitado nada e as formulas fazem referencias a outras abas ?

[]s


Mathmatic
Manda bem
Manda bem
Mensagens: 184
Registrado em: Seg Out 24, 2011 1:50 pm

Re: Mudança de valor em qualquer célula da Coluna A

Mensagem por Mathmatic »

Saudações aos srs. Reinaldo e Mauro Coutinho,

Senhores, entendi suas explicações !

e refletindo ao que disse o sr. Mauro Coutinho: temos como setar no calculate somente uma celula ....., tive uma idéia sobre o assunto.

respondendo a pergunta do sr. Mauro Coutinho, a resposta éh :

Re: na mesma não será digitado nada e as formulas fazem referencias a outras abas .


muito obrigado senhores.


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: Mudança de valor em qualquer célula da Coluna A

Mensagem por Mauro Coutinho »

Utilizando o Evento Calculate, supondo que na Plan1 coluna A - Range(A2:A10) temos formulas que buscam os Valores na Plan2 Range(C2:C10), ou seja, digite na Plan2 e veja se é isto, lembrando que citou que na Plan1 não teremos digitação, sómente as formulas.

Evento Calculate
Evento calculate.zip
(13.68 KiB) Baixado 343 vezes


Mathmatic
Manda bem
Manda bem
Mensagens: 184
Registrado em: Seg Out 24, 2011 1:50 pm

Re: Mudança de valor em qualquer célula da Coluna A

Mensagem por Mathmatic »

sr. Mauro,

Éh isso mesmo, MAS .. observei que se ocorrer números iguais na Range(A2:A10) da Plan1, então repetirá a Data para os números iguais que ocorreram.

Se puder evitar esta repetição de Data, será muito bom.

segue em anexo sua planilha com um exemplo do que estou falando.

OBS: no código VBA mudei "Date" para "Now" , pois será mais útil o Now para mim.
Anexos
Evento calculate.rar
(9.97 KiB) Baixado 212 vezes


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder