Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
Por Gerciley
#67209
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
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord