Si, no lo había leído pero eso es lo que he hecho. Voy a poner aquí la macro por si a alguien le sirve alguna de las técnicas. No te asustes, hace lo mismo que la que tenías y un poco más.
Sub RegistrarOC()
'By ValeroASM
Dim CuentaCeldas, UltimaFila, Filas, Posicion, PosicionFin As Integer
UltimaFila = WorksheetFunction.Max(Range("C51").End(xlUp).Row, Range("D51").End(xlUp).Row, _
Range("E51").End(xlUp).Row, Range("F51").End(xlUp).Row)
Filas = UltimaFila - 8
CuentaCeldas = WorksheetFunction.CountA(Range("C9:F" & UltimaFila))
If Filas < 1 Or CuentaCeldas <> 4 * Filas Then
MsgBox ("Faltan datos, deben ir todos en las primeras líneas y no faltar ninguno")
Exit Sub
End If
If Range("G2") <> Empty And Range("C4") <> Empty And Range("C5") <> Empty And Range("C55") <> Empty And Range("F55") <> Empty Then
Application.ScreenUpdating = False
Range("C9", Range("C9").End(xlToRight).End(xlDown)).Copy
With Sheets("BBDD OC")
Posicion = WorksheetFunction.Max(2, .Range("G2").End(xlDown).Offset(1, 0).Row)
PosicionFin = Posicion + Filas - 1
.Select
.Cells(Posicion, "G").Select
.Paste
Application.CutCopyMode = False
.Range(.Cells(Posicion, "A"), .Cells(PosicionFin, "A")) = Sheets("Orden de compra"). Range("G2")
.Range(.Cells(Posicion, "B"), .Cells(PosicionFin, "B")) = Sheets("Orden de compra"). Range("C4")
.Range(.Cells(Posicion, "C"), .Cells(PosicionFin, "C")) = Sheets("Orden de compra"). Range("C5")
.Range(.Cells(Posicion, "D"), .Cells(PosicionFin, "D")) = Sheets("Orden de compra"). Range("F55")
.Range(.Cells(Posicion, "E"), .Cells(PosicionFin, "E")) = Sheets("Orden de compra"). Range("C55")
.Range(.Cells(Posicion, "F"), .Cells(PosicionFin, "F")) = "No"
.Range(.Cells(Posicion, "K"), .Cells(PosicionFin, "K")) = Sheets("Orden de compra").Range("G3")
End With
Sheets("Orden de compra").Select
ActiveSheet.PrintPreview
Range("C9:F50,G2:G3,C4:G5,C55:D55,F55:G55").ClearContents
Application.ScreenUpdating = True
Else
MsgBox "Presione la tecla Nueva OC e ingrese los datos necesarios para registrar la OC"
End If
End Sub
Ahora te envío el fichero para que lo pruebes. Si no entiendes algo o hay algún fallo dímelo. Y si ya está bien no olvides puntuar.