Logo Hardware.com.br
Marcos R Paulus
Marcos R Pau... Novo Membro Registrado
5 Mensagens 0 Curtidas

[Resolvido] VBA VLookUp em diversas planilhas ao mesmo tempo

#1 Por Marcos R Pau... 06/08/2020 - 20:14
Olá,

Procuro saber se é possível fazer o seguinte, e como faze-lo:

Tenho 1 planilha com um userform para uma pesquisa. Vamos chamar essa planilha de PCP. Ali se insere um valor numérico (barcode).

Tenho 3 outras planilhas (CORTE1, CORTE2, CORTE3), todas com a mesma estrutura, mas alimentadas simultaneamente em salas diferentes.

Essas planilhas/arquivos ficam todos na mesma pasta de rede.

Preciso que ao inserir o barcode, faça um VLookUp nas outras 3 planilhas (em sequencia), buscando aquela informação, para preencher o userform. (Não precisa se preocupar, que o barcode é único, não se repetirá. Se ele existir em 1 das planilhas CORTE, não tem chance de ele existir nas outras 2)

Como eu defino essa busca em 3 planilhas diferentes? Dá pra fazer um Range com diversas planilhas?

Atualmente, eu tenho na planilha PCP esse userform funcionando, mas criei abas espelhadas das planilhas CORTE1, 2 e 3, usando formulas de vinculação. Só que isso deixou a planilha PCP gigantesca, e extremamente demorada pra carregar, sendo impraticável o uso dela.

Agradeço qualquer ajuda

Private Sub txt_talao_AfterUpdate()

Dim intervalo1 As Range
Dim talao As String
Dim dubl1 As String
Dim dubl2 As String
Dim Data As Date
Dim mensagem

talao = txt_talao
dubl1 = txt_dubl1
dubl2 = txt_dubl2
Sheets("BASE-SUPRIMENTOS&quot.Select
Set intervalo1 = Range("A2:j150005&quot

On Error GoTo Erro

pesquisa1 = Application.WorksheetFunction.VLookup(talao, intervalo1, 3, False)
pesquisa2 = Application.WorksheetFunction.VLookup(talao, intervalo1, 6, False)
pesquisa4 = Application.WorksheetFunction.VLookup(talao, intervalo1, 10, False)

txt_dubl1 = pesquisa1
txt_dubl2 = pesquisa2
txt_data = pesquisa4
Exit Sub
Erro:
texto = "Não localizado"
mensagem = MsgBox(texto, vbOKOnly + vbInformation)
End Sub

Anexos

LaerteB
LaerteB Super Participante Registrado
153 Mensagens 127 Curtidas
#2 Por LaerteB
07/08/2020 - 10:38
Bom dia, Marcos R Paulus

Bem vindo ao Fórum!!! cadeado_alegrinho.gif

Como todos aqui, temos compromissos e não temos muito tempo para criar um arquivo do zero, pois
ajudamos somente no nosso tempo livre... é muito importante você anexar uma planilha de
exemplo com dados (fictícios) e que não seja o projeto inteiro ; explicando com as informações
necessárias para alcançar o seu objetivo, desta forma poderemos ajudá-lo com maior rapidez e
eficácia (a maioria nem olharia este Tópico sem um arquivo exemplo, pois existe muitas
"variáveis" que podem impossibilitar o sucesso parcial ou total da solução proposta,se não tiver um
arquivo exemplo que for disponibilizado) boa.gif ..

Tu tens que colocar os seus códigos dentro de uma "janela", como fazer isso? abaixo a explicação:

- No menu clique no sinal de "+" em seguida clique em > código;
- Agora insira seu código na janela que abrir.


Aguardando sua resposta e seu Feed Back ... se foi útil, não esqueça de Clicar no Botão "Curtir"... bom_trabalho.gif

LaerteB smile.png
"Se a resposta foi útil para ti wink.png, por gentileza clicar no botão Curtir, obrigado wink.png ."
Marcos R Paulus
Marcos R Pau... Novo Membro Registrado
5 Mensagens 0 Curtidas
#3 Por Marcos R Pau...
07/08/2020 - 12:25
Laerte, obrigado pelas dicas.
Fiz as alterações no post, e anexei 4 planilhas de exemplo com alguns dados.

Explicando o problema de forma diferente:
Na planilha SRPROD, no userform PESQUISA, ao escanear o barcode do talão, quero que procure esse numero nas colunas A das planilhas SRPRECORTE1, SRPRECORTE2 e SRPRECORTE3. E quando encontrar, retornar a informação existente na coluna B e na D e na J.

Meu código deve estar um tanto bagunçado, foi na base da tentativa e erro. Eu não havia postado planilhas antes, porque eu estava buscando mais uma orientação de como fazer, e tentar resolver por conta própria. Mas se conseguir resolver essa parte do código, eu consigo extrapolar pro restante.

Abraço, e novamente obrigado.
P@tropi
P@tropi Highlander Registrado
3.4K Mensagens 2.6K Curtidas
#4 Por P@tropi
07/08/2020 - 21:25
Boa noite @Marcos R Paulus

Experimente:

Private Sub txt_talao_AfterUpdate()
Dim tl As Range, k As Long, m As Boolean
For k = 1 To 3
Set tl = Workbooks("SRPRECORTE" & k).Sheets("PRECORTE" & k).[A:A].Find(txt_talao.Text, lookat:=xlWhole)
If Not tl Is Nothing Then
txt_dubl1 = tl.Offset(, 1).Value
txt_dubl2 = tl.Offset(, 3).Value
txt_data = tl.Offset(, 9).Value
m = True: Exit For
End If
Next k
If Not m Then MsgBox "Não localizado"
End Sub


OBS.: Considerei que os 3 arquivos SRPRECORTE estarão abertos ao fazer a pesquisa.

Se foi útil, clique em Curtir.

Quando a dúvida for sanada marque o tópico como Resolvido.(Na minha assinatura tem um link para o Guia de Utilização do Fórum).

[]s
Se foi útil, clique em Curtir.
Devemos combater o Comunismo ou qualquer doutrina totalitária.
Marcos R Paulus
Marcos R Pau... Novo Membro Registrado
5 Mensagens 0 Curtidas
#5 Por Marcos R Pau...
09/08/2020 - 10:33
Obrigado, P@tropi

Testei aqui na minha maquina, mas não funcionou... ficou acusando "Erro em Tempo de Execução '9': Subscrito Fora do Intervalo" nesta linha abaixo:
  Set tl = Workbooks("SRPRECORTE" & k).Sheets("PRECORTE" & k).[A:A].Find(txt_talao.Text, lookat:=xlWhole)


EDIT1: resolvi esta parte, tinha faltado indicar a extensão do arquivo:
  Set tl = Workbooks("SRPRECORTE" & k & ".xlsm").Sheets("PRECORTE" & k).[A6:A100].Find(txt_talao.Text, lookat:=xlWhole)

Mas só funciona se as planilhas estiverem abertas...

OBS.: Considerei que os 3 arquivos SRPRECORTE estarão abertos ao fazer a pesquisa.

Sobre isso:
Estarão abertos a principio, mas por outros usuários em outras maquinas na rede. Estando fechado ele não faz a busca, como podemos resolver isso?
Entendo que a variavel 'k' serve pra fazer o looping entre os 3 arquivos, pois eles tem o mesmo padrão de nome de arquivo. Mas como eu faço quando tenho arquivos com nomes muito diferentes?

Grato!
P@tropi
P@tropi Highlander Registrado
3.4K Mensagens 2.6K Curtidas
#6 Por P@tropi
09/08/2020 - 15:44
Boa tarde Marcos

Testei aqui na minha maquina, mas não funcionou... ficou acusando "Erro em Tempo de Execução '9': Subscrito Fora do Intervalo"
Sobre o erro acima, pode ter duas origens:

1. os nomes dos arquivos não estão iguais aos nomes dos arquivos do post #1 ou
2. um ou mais dos 3 arquivos não está aberto na máquina em que está rodando a macro
Estarão abertos a principio, mas por outro usuário em outra maquina na rede. E se algum estiver fechado, isso é problema?

Os 3 arquivos deverão estar abertos na máquina em que a macro será executada.
Se um ou mais deles estiver aberto também em outra máquina eu acredito que não haverá conflito, mas é preciso testar essa situação.

[]s
Se foi útil, clique em Curtir.
Devemos combater o Comunismo ou qualquer doutrina totalitária.
P@tropi
P@tropi Highlander Registrado
3.4K Mensagens 2.6K Curtidas
#7 Por P@tropi
10/08/2020 - 10:53
Bom dia Marcos

Vi que o você editou o post #5.

EDIT1: resolvi esta parte, tinha faltado indicar a extensão do arquivo:
Aqui funcionou corretamente da forma que passei, sem a extensão.

Mas só funciona se as planilhas estiverem abertas...
Sim, conforme comentei no post #4 os 3 arquivos deverão estar abertos na mesma máquina em que rodará o código.

Estando fechado ele não faz a busca, como podemos resolver isso?
Existe algum impedimento para você abrir os arquivos antes de rodar o código ?

Mas como eu faço quando tenho arquivos com nomes muito diferentes?
O código foi elaborado com base nos arquivos que você disponibilizou no post #1, agora se a situação é diferente,
ou você muda os nomes dos arquivos de acordo com o código ou altera o código de acordo com os nomes dos arquivos.

[]s
Se foi útil, clique em Curtir.
Devemos combater o Comunismo ou qualquer doutrina totalitária.
Marcos R Paulus
Marcos R Pau... Novo Membro Registrado
5 Mensagens 0 Curtidas
#8 Por Marcos R Pau...
10/08/2020 - 22:03
Olá,

Eu vou ter de testar essas situações, mas tô achando que vai dar conflito, devido as planilhas estarem abertas por outro usuário em outra máquina da rede.

Já pensando numa forma de contornar esse problema, faço uma nova pergunta:

O Excel/VBA consegue fazer manipulação de arquivos? Tipo copiar um arquivo para uma pasta TMP, daí abrir essa copia e executar alguma ação, fechar o arquivo e apaga-lo. Como no esquema da imagem anexada. Acho que aquela minha proposta inicial não vai dar certo, pois por exemplo, ao tentar abrir uma das SRPRECORTE?.xlsm na maquina 'A', dá o aviso de que está aberto por outro usuário e pergunta se quero abrir como somente leitura ou fazer uma copia (acho que são essas as opções).

Anexo do post

Anexos

apimente.br
apimente.br Cyber Highlander Moderador
51.4K Mensagens 3.8K Curtidas
#10 Por apimente.br
17/08/2020 - 09:26
Marcos R Paulus disse:

Poderia descrever essa "outra forma"? Um Fórum é um local para ajuda mútua, assim o seu conhecimento será muito útil para outras pessoas que tenham problemas/situações semelhantes.

Muito obrigado.
O Linux não é o Windows
Como fazer perguntas inteligentes? Clique aqui!
Ao pedir ajuda, informe sua configuração completa e forneça detalhes suficientes para alguém te ajudar.

© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal