Macro que Copie y Pegue de un libro de excel a otro in detenerse en la celdas vacías

Tengo una macro que me funciona perfectamente para copiar y pegar de un libro de excel Origen a uno Destino, pero se detiene en las celdas en blanco. Es decir, copia y pega hasta que se encuentra con un celda en blanco. ¿Cómo puedo hacer para que copie todo tal cual? Además, necesito ejecutar todo desde el Archivo Destino, en vez desde el origen. Aquí copio la macro que estoy utilizando:

Sub CopiarCeldas()

'Definir objetos a utilizar
Dim wbDestino As Workbook, _
wsOrigen As Excel.Worksheet, _
wsDestino As Excel.Worksheet, _
rngOrigen As Excel.Range, _
RngDestino As Excel. Range

'Indicar el libro de Excel destino
Set wbDestino = Workbooks.Open(ActiveWorkbook.Path & "\Destino.xlsx")

'Activar este libro
ThisWorkbook. Activate

'Indicar las hojas de origen y destino
Set wsOrigen = Worksheets("Hoja1")
Set wsDestino = wbDestino.Worksheets("Hoja1")

'Indicar la celda de origen y destino
Const celdaOrigen = "B2"
Const celdaDestino = "B4"

'Inicializar los rangos de origen y destino
Set rngOrigen = wsOrigen.Range(celdaOrigen)
Set rngDestino = wsDestino.Range(celdaDestino)

'Seleccionar rango de celdas origen
rngOrigen.Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy

'Pegar datos en celda destino
rngDestino.PasteSpecial xlPasteValues
Application.CutCopyMode = False

End Sub

2 Respuestas

Respuesta
2

Te anexo la macro con los cambios

Sub CopiarCeldas()
    'Definir objetos a utilizar
    Dim wbDestino As Workbook, _
    wsOrigen As Excel.Worksheet, _
    wsDestino As Excel.Worksheet, _
    rngOrigen As Excel.Range, _
    RngDestino As Excel. Range
    'Indicar el libro de Excel destino
    Set wbDestino = Workbooks.Open(ActiveWorkbook.Path & "\Destino.xlsx")
    'Activar este libro
    ThisWorkbook. Activate
    'Indicar las hojas de origen y destino
    Set wsOrigen = Worksheets("Hoja1")
    Set wsDestino = wbDestino.Worksheets("Hoja1")
    'Indicar la celda de origen y destino
    Const celdaOrigen = "B2"
    Const celdaDestino = "B4"
    'Inicializar los rangos de origen y destino
    Set rngOrigen = wsOrigen.Range(celdaOrigen)
    Set RngDestino = wsDestino.Range(celdaDestino)
    'Seleccionar rango de celdas origen
    rngOrigen.Select
    u = wsOrigen.Cells(Rows.Count, rngOrigen.Column).End(xlUp).Row
    Range(Selection, Cells(u, rngOrigen.Column)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    'Pegar datos en celda destino
    RngDestino.PasteSpecial xlPasteValues
    Application.CutCopyMode = False
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Muchas gracias!! Lo copié y pegué tal cual y sigo teniendo el problema de que solo copia y pega hasta que se encuentra con una celda vacía. Otra cosa, puedo usar esa misma macro pero desde la hoja destino?

:)

Me acabo de dar cuenta de que la macro se detiene si una columna comienza con un espacio vacío. Me imagino que esto sucede porque la macro lee de arriba hacia abajo o viceversa, entonces cuando encuentra una columna iniciando en vacío, pues entiende que ahí se acabó. Podría modificarse la macro definiéndole las columnas de la A a la V de modo fijo, para que siempre copie ese rango de columnas y todas las filas hacia abajo?

Te anexo la macro actualizada

Sub CopiarCeldas()
'
    'Definir objetos a utilizar
    Dim wbDestino As Workbook, _
    wsOrigen As Excel.Worksheet, _
    wsDestino As Excel.Worksheet, _
    rngOrigen As Excel.Range, _
    RngDestino As Excel. Range
    '
    'Indicar el libro de Excel destino
    Set wbDestino = Workbooks.Open(ActiveWorkbook.Path & "\Destino.xlsx")
    '
    'Activar este libro
    ThisWorkbook. Activate
    '
    'Indicar las hojas de origen y destino
    Set wsOrigen = Worksheets("Hoja1")
    Set wsDestino = wbDestino.Worksheets("Hoja1")
    '
    'Indicar la celda de origen y destino
    Const celdaOrigen = "B2"
    Const celdaDestino = "B4"
    '
    'Inicializar los rangos de origen y destino
    Set rngOrigen = wsOrigen.Range(celdaOrigen)
    Set RngDestino = wsDestino.Range(celdaDestino)
    '
    'Seleccionar rango de celdas origen
    rngOrigen.Select
    'u = wsOrigen.Cells(Rows.Count, rngOrigen.Column).End(xlUp).Row
    u = wsOrigen.UsedRange.Rows(wsOrigen.UsedRange.Rows.Count).Row
    'Range(Selection, Cells(u, rngOrigen.Column)).Select
    'Range(Selection, Selection.End(xlToRight)).Select
    'Selection. Copy
    Range("A1:V" & u). Copy
    '
    'Pegar datos en celda destino
    RngDestino. PasteSpecial xlPasteValues
    Application.CutCopyMode = False
End Sub

¡Gracias! 

Funciona perfectamente. Solo que no puedo ejecutarla desde la hoja destino, sino desde el origen.

Gracias por su ayuda.

Respuesta
1

[Hola 

prueba cambiando esta línea

Range(Selection, Selection.End(xlDown)).Select

por 

Range(Selection, Selection.End(xlUp)).Select

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas