Notifications
Clear all

Melhorar Código atual.

10 Posts
2 Usuários
0 Reactions
1,674 Visualizações
(@lustosag)
Posts: 39
Eminent Member
Topic starter
 

Boa tarde pessoal, tenho duas guias em uma planilha, uma de cadastro de produtos e outra que é um "banco de dados" por assim dizer. PS: O "banco" é a guia Cadastro Tubos
O que ele tem que fazer é ao cadastrar um produto, verificar se este produto está cadastrado em uma respectiva linha na guia Cadastro Tubos, e se estiver, pegar o nome que está na Cadastro Tubos respectiva e jogar na guia atual, ou se não, deixar uma mensagem como: "Produto não cadastrado"

A dúvida é a seguinte:
eu fiz um código que verifica linha por linha porém não está dinâmico, são varios IF's e end if's colocados... gostaria de uma solução melhor. o Código está aqui:

If txt_produto = Sheets("Cadastro Tubos").Range("b5") Then
   Cells(ultimalinha, 7) = Sheets("Cadastro Tubos").Range("p5")
   If Sheets("Cadastro Tubos").Range("p5") = "" Then
   Cells(ultimalinha, 7) = "Produto não cadastrado"
   End If
End If
If txt_produto = Sheets("Cadastro Tubos").Range("b6") Then
   Cells(ultimalinha, 7) = Sheets("Cadastro Tubos").Range("p6")
      If Sheets("Cadastro Tubos").Range("p6") = "" Then
   Cells(ultimalinha, 7) = "Produto não cadastrado"
   End If
End If
If txt_produto = Sheets("Cadastro Tubos").Range("b7") Then
   Cells(ultimalinha, 7) = Sheets("Cadastro Tubos").Range("p7")
      If Sheets("Cadastro Tubos").Range("p7") = "" Then
   Cells(ultimalinha, 7) = "Produto não cadastrado"
   End If
End If

e assim por diante....
Como são mais de 100 produtos para verificar, logo o código é muito extenso, por favor se alguém souber, poderia me ajudar a deixa-lo dinâmico ?
Desde já agradeço.

 
Postado : 05/03/2018 8:49 am
(@srobles)
Posts: 231
Estimable Member
 

LustosaG,

Experimente adaptar a função que deixo abaixo e ver se a mesma atende sua necessidade, pois, sem ter acesso ao seu modelo, fica difícil acertarmos de primeira, já que não sabemos a disposição dos dados na mesma.
Adicione um módulo á sua pasta de trabalho, e copie e cole :

Function verificarProduto(ByVal codigoProduto As String)
    Application.ScreenUpdating = False
    With ThisWorkbook.Sheets("Cadastro Tubos")
        .Activate

       Dim ultimaLinha As Long
       ultimaLinha = ActiveSheet.Cells(ActiveSheet.Rows.Count,1).End(xlUp).Row

        Dim buscaCodigo

            Set buscaCodigo = Nothing
            
            With .Range("A:Z")
                
                Set buscaCodigo = .Find(UCase(codigoProduto), LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)
                    If Not buscaCodigo Is Nothing Then
                         .Range(buscaCodigo.Address).Select
                         ActiveSheet.Cells(ultimaLinha, 7) = ActiveSheet.Cells(ActiveCell.Row, 2) 'Altere 2 para a coluna onde está o nome do Produto
                    Else
                         ActiveSheet.Cells(ultimaLinha, 7) = "Produto não cadastrado!"
                    End If
                Set buscaCodigo = Nothing
            End With
        
    ThisWorkbook.Sheets("Cadastro produtos").Activate 'Altere Cadastro produtos pelo nome da planilha onde será feita a verificação  
    Application.ScreenUpdating = False
        
    End With
End Function

Para chamar a função pelo UserForm, no evento KeyDow do campo código, faça :

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    'Se for pressionado ENTER ou TAB
    If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then
        'Se o campo possuir valor diferente de nulo
        If TextBox1 <> "" Then
            'Chamamos a função, passando o valor do campo como parâmetro
            verificarProduto UCase(TextBox1)
        End If
    End If
End Sub

Se possível, disponibilize seu modelo.

Espero ter ajudado.

Abs

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 05/03/2018 11:21 am
(@lustosag)
Posts: 39
Eminent Member
Topic starter
 

Olá srobles, primeiramente obrigado pela resposta! Posso sim disponibilizar as guias na quais estou requisitando ajuda.
Ainda não testei seu código, porém disponibilizarei a planilha para que de uma olhada.

Assim que eu testar lhe dou um retorno.

PS: ignore por favor as muitas forms criadas, o código está na frmTorno.

 
Postado : 05/03/2018 2:17 pm
(@lustosag)
Posts: 39
Eminent Member
Topic starter
 

Olá srobes, testei o seu código e infelizmente ainda não deu certo.

Não sei se o raciocínio foi o certo, por favor peço que dê uma olhada na planilha que disponibilizei acima..

PS: Note que no código há diversas referencias a cadastro tubos de maneiras diferentes(1 é este no qual verifica e manda a mensagem "produto nao cadastrado", outro é uma divisão e por ai vai), todas de maneira não dinâmica, eu esperava um código no qual eu pudesse arrumar todos eles a partir de 1 raciocínio..

Desde já agradeço sua atenção.

 
Postado : 05/03/2018 2:41 pm
(@srobles)
Posts: 231
Estimable Member
 

LustosaG,

Editei seu modelo. Veja se me aproximei do pretendido.

Abs

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 05/03/2018 5:31 pm
(@lustosag)
Posts: 39
Eminent Member
Topic starter
 

Olá srobes, muito obrigado pelo retorno e pelo código, creio que está 90%, o que acontece é que acredito que não esteja fazendo o efeito correto ainda, desta planilha que me passou o que deveria ser feito era que quando encontra-se o produto visto na lista, na guia "cadastro tubos", colocaria o nome do produto normalmente na coluna "G" e "K" da Histórico Torno, e caso não encontra-se deveria colocar "produto não cadastrado" nas colunas "G" e "K"...

Poderia alterar a linha de código na qual faz este efeito ?

Desde já muito obrigado pela sua atenção!

 
Postado : 06/03/2018 7:06 am
(@srobles)
Posts: 231
Estimable Member
 

LustosaG,

Amigo, fiz os teste aqui com o produto 3651, onde o mesmo retornou Produto não cadastrado, conforme validação feita usando a coluna P da planilha Cadastro Tubos.
Veja abaixo :

Todavia, estou disponibilizando novamente o modelo.

Abs

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 06/03/2018 10:12 am
(@lustosag)
Posts: 39
Eminent Member
Topic starter
 

srobles, mil perdões :cry: , na verdade eu percebi.. eu que errei feio na explicação...
https://imgur.com/2K6JVQw

Leve esta linha como exemplo.. o nome do produto é FILT. 4,5" X 2m - STD, na coluna "G" e "K" (passadas para 4m -> 2m e 2m -> 1m) deve procurar na "Cadastro tubos" na coluna "P" a sua respectiva LINHA do nome do produto na coluna "B"

https://imgur.com/Bvq2D97

Como na imagem acima mostra, então o produto que selecionei na lista, no caso o FILT. 4,5" X 2m - STD, vai procurar na "Cadastro Tubos" na coluna B a linha na qual está, e conferir se nessa linha na coluna P há um produto, caso tenha como na foto, o nome que está na coluna P, vai para as colunas "G" e "K" (passadas para 4m -> 2m e 2m -> 1m) da guia HISTORICO TORNO, e caso não tenha, ficará como "PRODUTO NÃO CADASTRADO"
No caso a coluna "G" e "K" então ficaria com os nomes FILT. 4,5" X 1m - STD

Obrigado por sua paciencia e atenção, e mais uma vez me desculpe por não explicar corretamente...

 
Postado : 06/03/2018 11:16 am
(@srobles)
Posts: 231
Estimable Member
 

LustosaG,

Veja se agora acertei amigo.

Abs

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 06/03/2018 12:55 pm
(@lustosag)
Posts: 39
Eminent Member
Topic starter
 

Amigo srobles, você é o Deus do excel meu caro, exatamente isso!
Muito obrigado por toda sua ajuda e paciência, caso resolvido!

Leve este video como referência de minha gratidão a sua ajuda:
https://www.youtube.com/watch?v=LQxB13TssXY

:D

 
Postado : 06/03/2018 2:09 pm