Notifications
Clear all

Inserir valores na linha encontrada pelo FIND

13 Posts
3 Usuários
0 Reactions
1,815 Visualizações
(@pedroal)
Posts: 11
Active Member
Topic starter
 

Oi pessoal...
Minha dúvida é bem simples, mas estou encrencado aqui com a programação em VBA do meu projeto.
Tenho valores em uma planilha ("TABELA") que quero passar para uma segunda planilha ("QUADRO").
Esses valores são referentes a um "NOME". Na "QUADRO" tenho a lista total dos nomes e quero inserir os dados vindos da "TABELA" na coluna H, I e J da linha do "NOME" correspondente, sendo que os dados para a coluna I são uma data.

Já consegui localizar a linha desse "NOME" na "QUADRO" através do FIND, mas agora como passo os valores? Como identifico os Ranges para passar os valores?

Cheguei aqui:

Sub PASSAR_VALORES()
    Dim Rng As Range
    Dim NOME As String
    NOME = Worksheets("TABELA").Range("H1").Value
    
    If Trim(NOME) <> "" Then
        With Worksheets("QUADRO").Range("A:A")
            Set Rng = .Find(What:=NOME, _
                            After:=.Cells(.Cells.Count), _
                            LookIn:=xlValues, _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)
            If Not Rng Is Nothing Then
                Application.Goto Rng, True
            Else
                MsgBox "Nome não encontrado"
            End If
        End With
    End If
End Sub
 
Postado : 13/02/2017 3:05 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa noite PedroAI,

O melhor nesse caso (pelo que entendi) seria usar uma rotina de repetição (For, While) com alguns IFs.
Anexe um arquivo de exemplo, com os critérios para copiar os valores, assim fica mais fácil ajudar.

att,

 
Postado : 13/02/2017 8:38 pm
(@pedroal)
Posts: 11
Active Member
Topic starter
 

brunoxro

Aqui vai o arquivo exemplo sugerido.

 
Postado : 13/02/2017 9:36 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde PedroAL

Seja bem-vindo ao fórum!

Como você é novato, para facilitar a tua participação no fórum, sugiro tomar conhecimento do conteúdo dos links abaixo:
viewtopic.php?f=7&t=203
viewtopic.php?f=7&t=7903
viewtopic.php?f=7&t=3841
viewtopic.php?f=7&t=16757
viewtopic.php?f=7&t=12600
viewtopic.php?f=7&t=3371

[]s

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

 
Postado : 14/02/2017 12:21 pm
(@pedroal)
Posts: 11
Active Member
Topic starter
 

Patropi agradeço os links enviados.
Foram muito úteis para compreender como tudo funciona aqui no fórum.
A forma como apresentei a dúvida não terá sido a melhor, mas agora tudo ficará bem claro.
Aqui vai novo anexo, bem mais fácil de entender a dúvida.
Desde já um OBRIGADO a todos.

 
Postado : 14/02/2017 2:32 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa noite Pedro,

Montei um código que está no Módulo 1 do arquivo em anexo.

A macro que montei pega os valores das células C3,D3 e E3 e coloca na planilha 'Quadro' de acordo com o nome que estiver na B3.
Eu não entendi a parte dos dados estarem 'dispersos' na planilha.

Teste e de retorno.

Sobre a PROCV, de uma olhada: https://www.youtube.com/watch?v=XNhkqlhhpns

att,

 
Postado : 14/02/2017 8:34 pm
(@pedroal)
Posts: 11
Active Member
Topic starter
 

Oi Bruno.
Antes de mais um enorme obrigado pela solução... funciona perfeitamente!
Dei uma pequeno arranjo na apresentação da questão, para ser mais fácil de analisar pelos meus colegas "novatos".
Liguei a sua macro ao botão "Novo Pagamento"... poderei fazer da mesma forma para o botão "Último Pagamento"?

Quando dizia que os "dados estão dispersos na planilha" queria dizer:
- neste exemplo os dados estão em C3, D3 e E3, mas na realidade eles estarão em H6, H5 e (=H43-I46)
Não há problema algum... criarei um pequeno espaço não visível (ao lado da planilha da TABELA) para receber e enviar os dados para "QUADRO"

Att,

 
Postado : 15/02/2017 8:14 am
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa tarde Pedro,

Pelo que entendi, dado o nome você quer trazer o que está preenchido na planilha 'Quadro'.
Para isso, eu 'inverti' a macro que montei anteriormente. Teste o código que está no módulo 2 da planilha em anexo.

att,

 
Postado : 15/02/2017 1:34 pm
(@pedroal)
Posts: 11
Active Member
Topic starter
 

Funciona na perfeição... já estou implementando a solução.
MUITO OBRIGADO Bruno.

Agora surgiu um outro probleminha, numa outra macro do projeto.
Não sei se defini bem as variáveis ou é na definição do filtro avançado.
Vou anexar, na esperança que me possa ajudar... me estou apaixonando pelo VBA.

Na Sheet DETTEs tive que alargar o cabeçalho para criar uma linha permanente de dados, pois se a lista fosse vazia o filtro avançado dava erro

 
Postado : 15/02/2017 3:58 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Pedro,

Explique mais essa tabela. Você quer filtrar que informações de qual tabela e para qual lugar?

att,

 
Postado : 15/02/2017 4:32 pm
(@pedroal)
Posts: 11
Active Member
Topic starter
 

Bruno,
Pretendo filtrar os dados da DETTEs pelo nome inserido na PAIEs.E8. Para isso escondo o cabeçalho e copio a CurrentRegion.
Passo para a ProvPAIEs.A2.
Depois vim atrás à DETTEs para mostrar as linhas ocultadas (restabelecendo a tabela).
Na ProPAIEs, dos dados que acabei de inserir, copio da coluna D à I.
Passo para a PAIEs.A18 os dados copiádos.
Ainda na PAIEs, copio a linha 56 para a 17. Ela irá exibir os resultados da macro "Último Pagamento", que o Bruno ajudou.
No final, volto à ProvPAIEs para deletar os datos provisórios que para lá tinha copiádo.

A ProvPAIEs é uma tabela provisória de onde não vou extrair todos os dados (apenas os dados da coluna D até à I.
Sei que dará para melhorar muito este código, inclusivé eliminar a ProvPAIEs e inserir os dados diretamente na PAIE, mas ainda sou "novato" em VBA. ;)

Nesta macro não pretendo eliminar os dados resultantes do filtro avançado, mas numa outra macro vou fazer este mesmo filtro avançado com o objectivo de eliminar estes registos.

Att,

 
Postado : 15/02/2017 5:48 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa tarde Pedro,

De uma olhada no código que está no módulo1. Ele realiza a busca dos valores na tabela de acordo com o nome preenchido.

Uma coisa importante, suas tabelas usam muito o 'Mesclar', evite usa-lo, principalmente na base de dados. 'Mesclar' atrapalha na montagem do código, por isso tirei alguns no arquivo em anexo.

att,

 
Postado : 17/02/2017 12:34 pm
(@pedroal)
Posts: 11
Active Member
Topic starter
 

Oi Bruno,
funciona na perfeição, com simplicidade e objectividade.
Verdade que a minha falta de experiência complica muito o que vejo ser tão fácil (depois de ler os seus códigos).
Estou assistindo a cursos on-line de VBA para melhorar os conhecimentos.
Mil e um obrigados pelo seu tempo, conhecimentos e amabilidade.
Vou dar por encerrado este tópico.

 
Postado : 17/02/2017 4:01 pm