Notifications
Clear all

Completar Pedidos de Produto em STOCK - VBA

3 Posts
2 Usuários
0 Reactions
1,005 Visualizações
(@pedro12345)
Posts: 48
Eminent Member
Topic starter
 

Boa tarde,

Necessito da vossa importante ajuda! :)

Tenho em 2 separadores de Excel, denominados Entrada e o outro Saída, uma única Tabela.

Numa das Tabelas, tenho o Número do Produto e o Total de Produtos, em Stock:

Na 2ª Tabela, que se encontra no outro separador, tenho Pedidos para certas Quantidades de Produtos, ordenados pelas datas de Entrega.

O que pretendo é criar uma macro, associada a um botão, para que percorra cada Produto na Tabela de Entrada(stock) e procure se existe o Produto na Tabela de Saída (pedidos).
Após encontrar o Produto e se o existir o mesmo na Tabela de Saída, quero que vá colocando no Status, a Quantidade Pendente se o total de peças do produto e pendentes for <= às peças em Stock.

Ou seja, para o exemplo de um Produto em concreto, verifico que na Tabela Entrada, tenho em STOCK, o valor de 37 unidades do PRODUTO_135,
Pretendo que a Macro preencha o STATUS da seguinte forma:

Ou seja, à variável de unidades STOCK, para cada Produto, vai ser Retirada para completar pedidos..

Já desenvolvi o código abaixo:

Option Explicit

Sub MacroVerifica()


    Application.ScreenUpdating = False

    ThisWorkbook.Activate
        
    'DEFINIR LIVRO ENTRADA E SAÍDA
    Dim WsIN        As Worksheet: Set WsIN = Sheets("Entrada")
    Dim WsOUT        As Worksheet: Set WsOUT = Sheets("Saída")
    
    'GUARDAR NÚMERO LINHAS PREENCHIDAS EM VARIÁVEL E DEFINIR INICIO LINHA 2 - LIVRO ENTRADA
    Dim NLinIN        As Double: NLinIN = WsIN.Range("A1048575").End(xlUp).Row
    Dim lIN           As Double: lIN = 2
    
    'GUARDAR NÚMERO LINHAS PREENCHIDAS EM VARIÁVEL E DEFINIR INICIO LINHA 2 - LINHA SAÍDA
    Dim NLinOUT        As Double: NLinOUT = WsOUT.Range("A1048575").End(xlUp).Row
    Dim lOUT           As Double: lOUT = 2
    
    Dim STOCK As Integer
    'Dim QTDPRODUTO As Integer
    
    'VARÍAVEL PRODUTO ÚNICO NO LIVRO ENTRADA COM QUANTIDADE TOTAL PEÇAS
    Dim QTDProduto    As Variant: QTDProduto = Trim(UCase(WsIN.Cells(2, 1).Value))
    
    
    'FAZ ATÉ ULTIMA LINHA DA TABELA ENTRADA DE PEÇAS EM STOCK
    Do While lIN <= NLinIN
    
    'SE PEÇAS EM STOCK FOR MAIOR QUE ZERO FAZ...
    If STOCK >= 0 Then
    
    'PARA CADA LINHA QUE ENCONTRAR NA TABELA SAÍDA COM O PRODUTO CORRESPONDENTE AO DA ENTRADA..
        For lOUT = 1 To NLinOUT
            
            'VERIFICA SE QUANTIDADE PEDIDO É MENOR QUE QUANTIDADE DE PRODUTO EM STOCK
             If QTDProduto <= STOCK Then
             
             'SE FOR SUPERIOR ENTÃO TEM PRODUTOS PARA COMPLETAR O PEDIDO E COLOCA
             'qual codigo aqui???????
             
            ' DEPOIS VALOR DE STOCK SERÁ...??
            STOCK = STOCK - QTDProduto
    
    'VERIFICA SE QUANTIDADE PEDIDO É MAIOR QUE QUANTIDADE DE PRODUTO EM STOCK
            ElseIf QTDProduto > STOCK Then
            
            'SE VALOR DE PRODUTOS PEDIDO FOR SUPERIOR AO STOCK APRENSENTA PEÇAS DISPONIVEIS APENAS EM STOCK
            QTDProduto = QTDProduto - STOCK
            
            'Se não tiver Peças em Stock, aparece 0 produtos
            Else
            QTDProduto = 0
       
            End If
    
    
    Next lIN
       
       Loop
       
       
End Sub

O código tem erros, mas acredito que esteja lá a ideia, daí que peço pf se me podem dar uma valente ajuda!!
Em anexo envio o Excel, se me poderem o reenviar com o código correcto era algo TOP!!! :!: :)
Obrigado!

Um grande abraço,
Pedro

 
Postado : 14/03/2017 2:50 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa noite Pedro,

Teste o código que montei, veja se o resultado é o desejado.
O código está no Módulo1.

Att,

 
Postado : 14/03/2017 4:10 pm
(@pedro12345)
Posts: 48
Eminent Member
Topic starter
 

Olá Bruno,
Está a cumprir com o que eu preciso! :)
Já me deu um grande avanço, agora continuarei a desenvolver mais!

Um ABRAÇO de Obrigado! :)

 
Postado : 14/03/2017 5:02 pm