Muito obrigado Jvalq, mas não consegui aplicar a seu código no meu sistema. Não consegui entender o significado da formula que vc me passou. Apesar disso, consegui resolver meu problema usando loop, o código ficou muuuuito mais extenso, mas com ele eu consigo entender o que ele está fazendo. A minha falta de conhecimento avançado em VBA está me prejudicando, mas aos poucos eu vou aprendendo. Basicamente a solução que eu encontrei, foi que tive que incluir uma nova coluna com a validade da verba. E sempre que haja mudança na planilha ou quando o sistema é aberto essa validade é verificada com a data atual para saber se mantém o valor já somado ou se retorna ao valor inicial da verba, isso tudo para cada linha da planilha.
Abaixo segue o loop que fiz
Public Sub LIMITEATUAL()
' FAZ O CALCULO DO LIMITE ATUAL DAS CATEGORIAS NA TABELA DE CATEGORIAS
Dim LIN As Integer
Dim LINB As Integer
Dim CREDITO As Currency
Dim DEBITO As Currency
Dim MSG As String
' CLASSIFICA A TABELA CATEGORIAS
Sheets("CADASTROCATEGORIA").Select
Range("A3:H103").Select
ActiveWorkbook.Worksheets("CADASTROCATEGORIA").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("CADASTROCATEGORIA").Sort.SortFields.Add Key:=Range("D4:D103"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("CADASTROCATEGORIA").Sort.SortFields.Add Key:=Range("B4:B103"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("CADASTROCATEGORIA").Sort.SortFields.Add Key:=Range("A4:A103"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("CADASTROCATEGORIA").Sort
.SetRange Range("A3:H103")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' CLASSIFICA AS CONTAS A PAGAR DA TABELA FLUXO
Sheets("FLUXO").Select
Range("A3:K50003").Select
ActiveWorkbook.Worksheets("FLUXO").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("FLUXO").Sort.SortFields.Add Key:=Range("F4:F50003"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("FLUXO").Sort.SortFields.Add Key:=Range("B4:B50003"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("FLUXO").Sort.SortFields.Add Key:=Range("D4:D50003"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("FLUXO").Sort
.SetRange Range("A3:K50003")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
LIN = 4
LINB = 4
CREDITO = 0
DEBITO = 0
Do While Worksheets("CADASTROCATEGORIA").Cells(LIN, 2).Value <> ""
If Worksheets("CADASTROCATEGORIA").Cells(LIN, 4).Value = "S" Then
If Worksheets("CADASTROCATEGORIA").Cells(LIN, 2).Value = Worksheets("FLUXO").Cells(LINB, 4).Value Then
If Worksheets("FLUXO").Cells(LINB, 6).Value = "FECHADO" Then
If CDate(Format(Worksheets("CADASTROCATEGORIA").Cells(LIN, 7).Value, "DD/MM/YYYY")) >= CDate(Format(Worksheets("FLUXO").Cells(LINB, 2).Value, "DD/MM/YYYY")) And CDate(Format(Worksheets("CADASTROCATEGORIA").Cells(LIN, 8).Value, "DD/MM/YYYY")) <= CDate(Format(Worksheets("FLUXO").Cells(LINB, 2).Value, "DD/MM/YYYY")) Then
If Worksheets("FLUXO").Cells(LINB, 10).Value = "D" Then
DEBITO = DEBITO + Worksheets("FLUXO").Cells(LINB, 5).Value
LINB = LINB + 1
ElseIf Worksheets("FLUXO").Cells(LINB, 10).Value = "C" Then
CREDITO = CREDITO + Worksheets("FLUXO").Cells(LINB, 5).Value
LINB = LINB + 1
Else
LINB = LINB + 1
End If
Else
LINB = LINB + 1
End If
Else
LINB = LINB + 1
End If
Else
LINB = LINB + 1
End If
Else
LIN = LIN + 1
End If
If Worksheets("FLUXO").Cells(LINB, 2).Value = "" Then
Worksheets("CADASTROCATEGORIA").Cells(LIN, 6).Value = CREDITO - DEBITO
If Worksheets("CADASTROCATEGORIA").Cells(LIN, 6).Value > Worksheets("CADASTROCATEGORIA").Cells(LIN, 5).Value And Worksheets("CADASTROCATEGORIA").Cells(LIN, 4).Value = "S" Then
MSG = MsgBox("A CATEGORIA " & Worksheets("CADASTROCATEGORIA").Cells(LIN, 2).Value & " ULTRAPASSOU O LIMITE ESTABELECIDO, POR FAVOR, VERIFIQUE POSSÍVEIS ERROS, OU SE É NECESSÁRIO A ATUALIZAÇÃO DA COTA, OU AINDA, SE O VALOR REALMENTE SERÁ LANÇADO NEGATIVO.", vbOKOnly, "CUIDADO LIMITE ULTRAPASSADO")
End If
LIN = LIN + 1
LINB = 4
CREDITO = 0
DEBITO = 0
End If
Loop
End Sub
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 08/02/2012 9:43 am