Em relação ao tempo de processamento, para descobrir a última célula, ao invés de :
Do
If ActiveCell <> "" Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until ActiveCell = ""
utilize:
lngLastRow = Sheets("Dados").Range("A2").End(xlDown).Row
Sheets("Dados").Cells(lngLastRow + 1, 1).Select
Para o usuário não ver os dados sendo colados, utilize no início do código:
application.ScreenUpdating = False
e ao término:
application.ScreenUpdating = true
Adicionalmente,
Ao invés de:
Range("D15:K27").Select
Selection.Copy
Utilize:
Range("D15:K27").Copy
Creio que isso deve ajudar
Abs
André Santo | basevba.wordpress.com