Função PROCV por ma...
 
Notifications
Clear all

Função PROCV por macro linha a linha

12 Posts
1 Usuários
0 Reactions
1,386 Visualizações
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pessoal, é possível criar uma função PROCV por macro de tal modo que ela seja executada toda vez que houver inserção de dados na coluna A, por exemplo ? Insiro um dado numa célula A e, em partindo para a célula B, automaticamente a função é executada na coluna C. E isso linha a linha, toda vez que a célula A for sendo carregada.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/11/2015 12:09 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Sim, é possível, mas o ideal seria anexar seu modelo com os dados que quer procurar, assim saberemos corretamente quais colunas, ranges e aba antes de montar por suposições.

Se pesquisar no forum por "VLOOKUP" encontrara varios tópicos e modelos, quem sabe alguns deles já te ajudam.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/11/2015 1:34 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Boa tarde!!

Use a pesquisa!!!!!!
viewtopic.php?t=13691&p=71682

https://cse.google.com.br/cse?cx=partne ... gsc.page=1

Private Sub WorksheetChanged(ByVal Target As Range, ByVal rngList As Range, ByVal intersectRng As Range)
    Dim lastrow As Long

    lastrow = Cells(Rows.Count, "A").End(xlUp).Row

    If Target.Cells.Count > 1 Then Exit Sub
        On Error Resume Next
        If Not Intersect(Target, intersectRng) Is Nothing Then
            Target.Value = Application.WorksheetFunction.VLookup(Target.Value, rngList, 2, False)
        End If

    Set rngList = Nothing
End Sub

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/11/2015 2:25 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Alexandre, bom dia. Eu tentei a ajuda no site mas qualquer coisa que eu digitasse com "PROCV com macro" ou algo do gênero, a pesquisa retornava uma mensagem dizendo que as palavras eram muito genéricas; tentei de várias formas e sempre o mesmo resultado. Enfim, agradeço muito sua ajuda neste caso.

Inseri a macro abaixo e gostaria de saber onde está o erro pois o resultado não aparece na coluna. Por favor analisem se minhas observações em vermelho estão corretas e onde está esse erro:

Private Sub WorksheetChanged(ByVal Target As Range)
If Target.Column = 1 Then
' Seleciona a coluna A
If Range("A" & Target.Row).Value <> "" Then
'Se, na coluna A que estou atualmente o valor for diferente de vazio então
Cells(Target.Row, 5).Value = Application.WorksheetFunction.VLookup(Range("D" & Target.Row), Sheets("Dados").Range("A1:E" & Rows.Count), 5, 0)
' Na linha que estou no momento e coluna E da planilha de trabalho inserir o resultado desta PROCV ( pegue a referência inserida na coluna D da planilha de trabalho referente ao mesmo índice da linha e, na planilha "Dados", consulte esse valor nas células compreendidas entre as células A1 até E 'infinito', e traga o valor referência exato da coluna E encontrado)
End If
End If
End Sub

O que eu desejo é que, em sendo o valor da coluna A diferente de vazio, a partir do valor digitado na célula D duma Plan1, me retorne um resultado em PROCV na célula E desta Plan1, cujos referência de dados estão na planilha 'Dados' citada acima. Isso linha a linha, a coluna A foi preenchida, a macro é executada a partir da inserção de valor na coluna D.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/11/2015 7:12 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Anexe um exemplo basico com alguns dados, fica mais fácil a analise, alem de não precisarmos ficar criando o cenário que poderá ter algum dado de tipo diferente e ser desconsiderado no criterio da função.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/11/2015 8:31 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Segue planilha anexa.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/11/2015 10:23 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

wagner, por isto que as vezes é bom ter o modelo, como eu disse no post anterior, o erro é devido ao tipo de dados, eu só fiquei em duvida que na sua rotina está vinculada a condição da coluna "A" e no seu modelo diz que a digitação será na coluna "D", mas se é desta maneira que quer, troque a sua linha pela a abaixo :

Troque esta :
Cells(Target.Row, 5).Value = Application.WorksheetFunction.VLookup(Range("D" & Target.Row), Sheets("Dados").Range("A1:D" & Rows.Count), 4, 0)

Por esta :
Cells(Target.Row, 5).Value = Application.WorksheetFunction.VLookup(Range("D" & Target.Row).Text, Sheets("Dados").Range("A1:D" & Rows.Count), 4, 0)

Veja que a única alteração que fiz, foi acrescentar ".text", uma vez que o valor digitado em "D4" na PLAN1 é numerico e o valor que está na aba "Dados" é texto, pois é o resultado da formula "DIREITA(B14;5)".

Faça a alteração e veja se é isto.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/11/2015 11:41 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Oi Mauro, obrigado pela ajuda.

Na verdade, o dado será inserido na coluna D mesmo, linha a linha. Pode desconsiderar o que mencionei sobre a coluna A, ficou meio sem sentido.
O ideal aqui seria: D recebeu um valor inserido pelo usuário; a partir dele, é selecionado um dado pela PROCV em VBA e este é mostrado na coluna E
Eu substitui a linha que você corrigiu acima e não houve retorno da PROCV na coluna E da Plan1. Acredito que o código que eu inseri esteja errado em algum ponto.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/11/2015 1:09 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pelo modelo que anexou funciona corretamente, de uma olhada, aproveitei e deixei a condição somente para digitação na coluna "D".

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/11/2015 1:41 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mauro, perfeito ! Muito obrigado pela ajuda. Acabei deixando uma referência de coluna errada, daí ter dado erro aqui mas agora está tudo ok.
Só uma última informação: caso o usuário digite o código errado (coluna D da Plan1 ) e o delete, a macro retorna um erro. Como poderia alterar sanar esse problema? Ou seja, ainda que ele delete o valor inserido na coluna D, o valor carregado na coluna E ( que foi chamado pela PROCV) apenas seria deletado também e fica disponível pra uma nova inserção de dado.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 01/12/2015 5:14 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

wagner, podemos fazer de duas formas, uma simplesmente ignorando o erro adicionando a instrução :

On Error Resume Next 'Antes da linha que procura o valor
Cells(Target.Row, 5).Value = Application.......

Ou um pouco mais aprimorada, com mensagens das ocorrencias :

Private Sub Worksheet_Change(ByVal Target As Range)

'Se Deletar mais que uma celula de uma vez sai da rotina
If Target.Cells.Count <> 1 Then Exit Sub
   
    Application.EnableEvents = False
    
    If Target.Column = 4 Then
        If Target.Value <> "" Then
        
            On Error GoTo PROC_ERR
            Cells(Target.Row, 5).Value = Application.WorksheetFunction.VLookup(Range("D" & Target.Row).Text, Sheets("Dados").Range("A1:D" & Rows.Count), 4, 0)
            Resume Next
        End If
    End If

PROC_ERR:
    
    If Err.Number = 1004 Then
    
        MsgBox "Valor não localizado"
        Cells(Target.Row, 5).Value = ""
        Cells(Target.Row, 4).Select
        Cells(Target.Row, 4).Value = ""
    
    ElseIf Err.Number <> 20 Then
    
        MsgBox "Valor Deletado"
        Cells(Target.Row, 5).Value = ""
        
    End If
    
    Application.EnableEvents = True
    
End Sub

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 01/12/2015 7:08 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Mauro, perfeito ! Problema resolvido. Muito obrigado pela ajuda. Forte abraço.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 01/12/2015 10:35 am