Este es el código que hay que agregar a un módulo de macros.
Te comento que soy relativamente novato con esto, así que espero te sirva. Sin embargo lo probé y me funcionó.
Proporcióname un correo al cual pueda mandarte una pequeña instrucción para que instales la macro y cómo la puedas ejecutar.
Saludos.
Option Explicit
Dim filaFinal As Integer
Dim celdaFinal As String
Dim rangoBorrado As String
Dim filaCopiado As Integer
Dim rangoCopiado As String
Dim celdaDisponible As String
Dim celdaSiguiente As String
Sub crearPedido()
' Proceso para crear el pedido de artículos
Call borraPedidoAnterior
Worksheets("Hoja1"). Activate
Range("A1").Activate
' Range("A1:I1").Copy
Range("A1:Z1").Copy
Worksheets("Hoja2").Range("A1").PasteSpecial xlPasteAll
Application.CutCopyMode = False
Range("A2").Activate
Call determinaUltimaCeldaDatos
' Range("I2").Activate
Range("Z2").Activate
Do While ActiveCell.Row <= filaFinal
If Not IsEmpty(ActiveCell) Then
If ActiveCell.Value > 0 Then
filaCopiado = ActiveCell.Row
' rangoCopiado = Replace("A" & Str(filaCopiado) & ":I" & Str(filaCopiado), " ", "")
rangoCopiado = Replace("A" & Str(filaCopiado) & ":Z" & Str(filaCopiado), " ", "")
' celdaSiguiente = Replace("I" & Str(filaCopiado), " ", "")
celdaSiguiente = Replace("Z" & Str(filaCopiado), " ", "")
Range(rangoCopiado).Copy
Call siguienteFilaDisponible
Worksheets("Hoja2").Range(celdaDisponible).PasteSpecial xlPasteAll
Application.CutCopyMode = False
Worksheets("Hoja1").Activate
Range(celdaSiguiente).Activate
End If
End If
ActiveCell.Offset(1, 0).Activate
Loop
End Sub
Sub borraPedidoAnterior()
' Proceso para borrar el pedido anterior
Worksheets("Hoja2").Activate
Range("A1").Activate
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate
Loop
filaFinal = ActiveCell.Row
' celdaFinal = "I" & Str(filaFinal)
celdaFinal = "Z" & Str(filaFinal)
rangoBorrado = Replace("A1:" & celdaFinal, " ", "")
Range(rangoBorrado).Clear
End Sub
Sub siguienteFilaDisponible()
' Proceso para determinar la siguiente fila disponible para copiado
Worksheets("Hoja2").Activate
Range("A1").Activate
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate
Loop
celdaDisponible = ActiveCell.Address
End Sub
Sub determinaUltimaCeldaDatos()
' Proceso para determinar la última celda con datos de origen
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate
Loop
filaFinal = ActiveCell.Row
End Sub