Página 1 de 1

Identificar devolução de vendas

Enviado: 27 Set 2021 às 20:59
por Gerciley
Olá a todos, gostaria de uma dica em um código.

Eu até consegui resolver meu problema, porém o código ficou um pouco redundante, e quando executado em uma base com mais de 1000 linhas de dados, algo comum quando eu trato esse tipo de dado.

O Problema em questão é o seguinte:
tenho uma coluna que é tipo de operação que pode ser "Venda" ou "Devolução", depois o numero do pedido o numero da NF e o valor.

Em um a ultima coluna preciso que me aponte o status que para exemplificar resumi em um para venda. Zero para devoluções até ai blz, uma macro simples resolveu esse problema, mas tem um porem. toda devolução foi oriunda de uma venda, preciso identificar a venda que teve a respectiva devolução. Para isso tenho como indicador o numero do pedido que tanto na venda quanto na devolução são os mesmos. vou deixar abaixo o código que estou usando, até resolve mas estou inseguro quanto a lógica e ao fazer um teste com uma base de dados um pouco extensa o código demorou um tempo considerável pra executar por conta dos dois laços for que tem no código. Não consegui contornar esse problema. Qualquer ajuda será bem vinda.

Segue o código que estou usando:
Código: Selecionar todos
Sub devolucao()
Dim limite As Integer
Dim i As Integer

Dim pedido As Long
Dim operacao As String
Dim somaDevolucao As Integer
Dim valor As Integer

Range("a1").Select

limite = ActiveCell.End(xlDown).Row

For i = 1 To limite - 1
  
    operacao = ActiveCell.Offset(i, 0)
    pedido = ActiveCell.Offset(i, 1)
    valor = ActiveCell.Offset(i, 3)
    
    If operacao = "devolução" Then
        
        somase pedido, i, limite, valor
    End If
    
    'MsgBox "operação: " & operacao & " Pedido: " & pedido & " Valor: " & valor
Next

End Sub

Function somase(pedido, indice, limite, valor)
Dim somaDevolucao As Integer
Dim pedidoVenda As Long

somaDevolucao = WorksheetFunction.SumIf(Range("B2:B10"), pedido, Range("D2:D10"))

If somaDevolucao = 0 Then

    ActiveCell.Offset(indice - 1, 4).Value = 0
    
Else
    
    For i = 1 To limite
        pedidoVenda = ActiveCell.Offset(i, 1)
        
        If pedido = pedidoVenda Then
            
            If Abs(valor) = ActiveCell.Offset(i, 3) Then ActiveCell.Offset(i, 4).Value = 0
        End If
    Next
    
End If

End Function