Bom, vou te dar umas dicas sobre o código:
Primeiro:
Dim soma As Long
Eu não sei o que vc está somando, mas se tiver valores altos, é melhor declarar a soma as Double (as long só vai ser bom se vc estiver somando valores pequenos
Segundo:
lastrow = Cells(Rows.Count, "C").End(xlUp).Row
Verifique esta linha (percorra o código com F9, para ver qual é a última linha q ela está pegando). Se por algum erro, ela estiver pegando uma linha muito longa, o loop pode demorar mesmo
Terceiro:
soma = WorksheetFunction.Sum(Cells(3 + i, 5).Value, Cells(3 + i, 6).Value, Cells(3 + i, 7).Value, Cells(3 + i, 8).Value, _
Cells(3 + i, 9).Value, Cells(3 + i, 10).Value, Cells(3 + i, 11).Value, Cells(3 + i, 12).Value, Cells(3 + i, 13).Value, _
Cells(3 + i, 14).Value, Cells(3 + i, 15).Value, Cells(3 + i, 16).Value)
Simplificar esta parte vai te ajudar. Em vez de mandar a função correr cada célula individualmente, use apenas 1 range. E não mande ela puxar os valores, apenas indique o range (sem o ".value")
soma = WorksheetFunction.Sum(Range(Cells(3 + i, 5), Cells(3 + i, 16)))
Cells(3 + i, 17).Value = soma
Next i
Por último, lembre que tudo o que vc fizer na planilha, em BA, vai ser aplicado em tempo real, então, evite que o excel "perca tempo" com o que interessa no momento - no caso, evite que ele dispare eventos e/ou atualize a tela à toa. Para isso, inicie o código com:
With Application
.ScreenUpdating = False
.EnableEvents = False
End with
E termine o código com:
With Application
.ScreenUpdating = True
.EnableEvents = True
End with
Se não resolver, sugiro que vc mande a planilha.
Abs
Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.
Gilmar
Postado : 27/02/2015 5:26 am