Ésta macro me funciona, pero no se si es la más rápida, ya que está hecha de retales.
Sub Copia_Albaran()
Dim fila1 As Integer, filafinal As Integer, albaran As Integer, ultimo As Integer
Dim cliente As String
Dim fecha As Date
Set h1 = Sheets("COPIA ALBARAN")
Set h2 = Sheets("BDFACTURACION")
'-Si hay datos en la factura preguntar si se borran los datos
h1.Select
If h1.Range("F2:F2").Value <> "" Or h1.Range("F6:F6").Value <> "" Then
Validar = MsgBox("CONFIRMA BORRAR DATOS? ", vbOKCancel, "BORRADO DE DATOS")
If Validar = vbOK Then
h1.Select
h1.Range("Prim_Albaran").ClearContents
h1.Range("F2:F6").ClearContents
Application.ScreenUpdating = False
Else
Exit Sub
End If
End If
Application.ScreenUpdating = False
'Pregunta nº de albaran a duplicar
h1.Range("F6").Select
ActiveCell.Value = Val(InputBox("Nº Albaran", "Nº Albaran", "1", 14370, 5300))
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
albaran = Range("F6").Value
'Pasa a hoja (BDFACTURACION)
h2.Select
h2.Range("E5").Select
ultimo = h2.Range("E2").Value
'Confirma si existe el nº de albaran solicitado
If albaran > ultimo Or albaran = 0 Then
MsgBox "COMPRUEBE Nº DE ALBARAN" & Chr(10) & "ALBARAN NO EXISTE" & _
Chr(10) & Chr(10) & "NO PASO NADA", vbOKCancel, "NO HAY DATOS"
'Borra el nº ingrsado en F6 y que no existe o es (0)
h1.Range("F6").Value = ""
Application.CutCopyMode = False
Exit Sub
Else
'Coger direccion de la primera fila
While ActiveCell.Value <> albaran
ActiveCell.Offset(1, 0).Select
Wend
'Primera fila (fila1) del albaran
fila1 = ActiveCell.Row
'Guarda la fecha del albaran
fecha = ActiveCell.Offset(0, 1).Value
'Guarda el cliente del albarán
cliente = ActiveCell.Offset(0, 13).Value
'Coger direccion de la ultima fila
While ActiveCell.Value = albaran
ActiveCell.Offset(1, 0).Select
Wend
'Ultima fila del albaran
filafinal = ActiveCell.Offset(-1, 0).Row
'Copia los datos del albaran y los ingresa en hoja (COPIA ALBARAN) a partir de la fila 15
filapre = 15
h2.Range("G" & fila1 & ":N" & filafinal).Select
Selection.Copy
ActiveSheet.Paste Destination:=Sheets("COPIA ALBARAN").Cells(filapre, 1)
Application.CutCopyMode = False
'Rellena la celda de cliente
h1.Range("F2").Value = cliente
'Rellena la celda de la direccion del cliente mediante una busqueda
h1.Range("F3").FormulaR1C1 = _
"=VLOOKUP(R[-1]C, CLIENTES!R[-1]C[-3]:R[82]C[3], 5,0)"
h1.Range("F5").Value = fecha
'Guarda el libro
ActiveWorkbook.Save
h1.Select
Range("F2").Activate
Application.ScreenUpdating = True
End If
End Sub