Esqueceu sua senha? Você pode usar o mecanismo de lembrete neste link: Recuperar senha

Você receberá um link de reativação no email cadastrado.

Não recebeu o email? Lembre-se checar o Lixo Eletrônico.

Busca Avançada

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
Adonias
Manda bem
Manda bem
Mensagens: 122
Registrado em: Sáb Jun 02, 2012 12:55 pm

Busca Avançada

Mensagem por Adonias » Seg Fev 03, 2020 7:47 am

Bom dia Pessoal,
Estou com um probleminha pra resolver.
A propósito, encontrei a solução para o meu último problema, depois posto aqui.

Agora preciso do seguinte código:

Tenho duas planilhas enormes e quero localizar e descobrir se na segunda planilha está cada um dos números de lotes constantes da primeira planilha e se a data de protocolo da primeira planilha está dentro do período de emissão e validade da segunda planilha para cada numero de lote encontrado.
Quando encontrado, gostaria que na plan3 fosse colocado as seguintes informações encontradas e correspondentes:
Código; numero de lote; protocolo; data de emissão; e validade, um na frete do outro.

Eu colei as informações da plan2 ao lado das informações da Plan1 e, dentro dela, para facilitar o entendimento, mas cada tabela está em planilhas diferentes.
Anexos
localiza.zip
(6.24 KiB) Baixado 12 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.


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

!

Mensagem por Reinaldo » Ter Fev 11, 2020 7:57 am

"...Eu colei as informações da plan2 ao lado das informações da Plan1 e, dentro dela, para facilitar o entendimento..."

Para mim, pelo menos está confuso, não entendi seu exemplo nem as descriçao da demanda/necessidade/motivo
Experimente montar um modelo demonstrando, manualmente ou com formulas
Na
Sheet "A" tenho ....
Sheet "B" tenho ....
Espero na Sheet "C"...., pelos seguintes motivos....


Reinaldo
Gostou da resposta?:?: :oops: :D :mrgreen:

Adonias
Manda bem
Manda bem
Mensagens: 122
Registrado em: Sáb Jun 02, 2012 12:55 pm

Re: Busca Avançada

Mensagem por Adonias » Qui Fev 13, 2020 6:15 pm

Reinaldo, agradeço o interesse em resolver desde já.
eu coloquei mais informações dentro da planilha que segue agora.

aguardo
Anexos
localiza.zip
(12.31 KiB) Baixado 5 vezes



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

Re: Busca Avançada

Mensagem por Reinaldo » Sex Fev 14, 2020 4:18 pm

Teste / experimente
localiza.zip
(24.42 KiB) Baixado 3 vezes

Código: Selecionar todos

Private Sub Verifica_Codigo()

'Declaração de variaveis
Dim Localizado As Range, FirstReg As String
Dim wsM As Worksheet, wsBD As Worksheet, wsDest As Worksheet
Dim lngLinha As Long, lngUltLinha As Long
Dim lngX As Integer, lngY As Long

'Atribui valores as variaveis
Set wsM = Sheets("Plan1")        'planilha  origem dos dados
Set wsBD = Sheets("Plan2")      'planilha destino dos dados
Set wsDest = Sheets("Plan3")      'planilha destino dos dados

lngUltLinha = wsM.Cells(wsM.Rows.Count, "A").End(xlUp).Row
lngY = 1
For lngX = 2 To lngUltLinha
    With wsBD.Range("A:A")
        Set Localizado = .Cells.Find(wsM.Range("B" & lngX).Value, LookIn:=xlValues, LookAt:=xlPart)

'Inicia registro dos dados
    If Not Localizado Is Nothing Then
        FirstReg = Localizado.Address
        Do
        'Se houver registro "anota" numero da linha
            lngLinha = Localizado.Cells.Row 'guarda numero da linha onde consta o registro
            If wsM.Range("C" & lngX).Value >= wsBD.Range("B" & lngLinha) And wsM.Range("C" & lngX).Value <= wsBD.Range("C" & lngLinha) Then
                lngY = lngY + 1
                wsDest.Range("A" & lngY) = wsM.Range("A" & lngX).Value                  'código
                wsDest.Range("B" & lngY) = wsM.Range("B" & lngX).Value                 'numero de lote
                wsDest.Range("C" & lngY) = wsM.Range("C" & lngX).Value                 'protocolo
                wsDest.Range("D" & lngY) = wsBD.Range("B" & lngLinha).Value              'emissao
                wsDest.Range("E" & lngY) = wsBD.Range("C" & lngLinha).Value              'validade
                wsDest.Range("F" & lngY) = "Período correspondente"
            End If
            'Verifica se há outro registo
                Set Localizado = .FindNext(Localizado)
            Loop While Not Localizado Is Nothing And Localizado.Address <> FirstReg

    End If
End With
Next
End Sub


Reinaldo
Gostou da resposta?:?: :oops: :D :mrgreen:

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.


Adonias
Manda bem
Manda bem
Mensagens: 122
Registrado em: Sáb Jun 02, 2012 12:55 pm

Re: [RESOLVIDO]Busca Avançada

Mensagem por Adonias » Dom Fev 16, 2020 8:05 am

Reinaldo, eu almejo um dia conhecer tanto assim do VBA. Você resolveu com classe meu amigo.
Código enxuto, eficiente e objetivo.
Muito Obrigado.



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