Hola !
He realizado unos ligeros cambios a tu código como para que cumpla sus fines:
Código:
Sub Copia()
'variables
Dim i As Integer, Destino As Range
'Abro el libro destino
Workbooks.Open ("C:\Archivo back.xls")
Application.ScreenUpdating = False
'Asigno el nombre 'Destino' a un rango
Set Destino = Range("A65536")
'La i es el numero que ira aumentando:
'archivo1.xls , archivo2.xls etc en la ubicacion C
Do While Dir("C:\Archivo" & (i + 1) & ".xls") <> ""
i = i + 1
Workbooks.Open ("C:\Archivo" & i & ".xls")
'Copio y pego los valores
Range("A2:M2").Copy _
Destination:=Destino.End(xlUp).Offset(1, 0)
'Cierro y salvo lo necesario
ActiveWorkbook.Close False
Loop
Application.ScreenUpdating = True
Set Destino = Nothing
End Sub
a) Application.ScreenUpdating = False/True
Desactiva la actualización de la pantalla para acelerar el código de la macro.
b) Workbooks.Open ("C:\Archivo back.xls")
Se ejecuta UNA SOLA VEZ al comienzo y se deja abierto para ir agregando las sucesivas líneas.
c) Dir("C:\Archivo" & (i + 1) & ".xls")
Dudo que tengas
100 archivos de la forma
Archivo'i'.xls de modo que cuando se detecte que se interrumpe la correlatividad, el "loop" se detiene
d) Set Destino = Range("A65536")
'Destino' deja de ser un "string" para ser un rango. Así, no se requiere especificar (está implícito, en realidad) 'Workbooks' ni 'Sheets'.
Pruébalo y después nos cuentas como te resultó.
Saludos