a primeira coisa é que vc tem um loop dentro de outro loop e comparador logico sem necessidade
para que fazer um loop de 11 até 16 e depois comparar se o loop está num valor se vc vai usar o valor fixo?
For colIndex = 11 To 16
If colIndex = 11 Then
fatorUnidadePorCaixa = Cells(RowIndex, colIndex)
End If
por que não assim?
fatorUnidadePorCaixa = Cells(RowIndex, 11)
só se usa comparador quando o valor muda
nesse caso vai ser sempre a coluna 11 na linha corrente
Public Sub converteUnidade()
Dim fatorUnidadePorCaixa As Integer
Dim qtdOriginalBonRev As Integer
Dim qtdOriginalBonFab As Integer
Dim qntCaixaBonRev As Integer
Dim qntUnidadeBonRev As Integer
Dim qntCaixaBonFab As Integer
Dim qntUnidadeBonFab As Integer
For RowIndex = 2 To Cells(Rows.Count, "A").End(xlUp).Row
fatorUnidadePorCaixa = Cells(RowIndex, 11).Value2
qtdOriginalBonRev = Cells(RowIndex, 14).Value2
qntCaixaBonRev = qtdOriginalBonRev fatorUnidadePorCaixa
qntUnidadeBonRev = qtdOriginalBonRev Mod fatorUnidadePorCaixa
qtdOriginalBonFab = Cells(RowIndex, 15).Value2
qntCaixaBonFab = qtdOriginalBonFab fatorUnidadePorCaixa
qntUnidadeBonFab = qtdOriginalBonFab Mod fatorUnidadePorCaixa
Cells(RowIndex, 17).Value2 = qntCaixaBonRev
Cells(RowIndex, 18).Value2 = qntUnidadeBonRev
Cells(RowIndex, 19).Value2 = qntCaixaBonFab
Cells(RowIndex, 20).Value2 = qntUnidadeBonFab
Next RowIndex
End Sub
isso foi oq reparei por enquanto
para melhorar a velocidade se pode ussar array em vez do valor das celulas diretamente
assim o vba vai trabalhar na memória e não tem que pedir permissão ao excel dentro do loop
Postado : 07/12/2016 3:53 pm