Buenas noches a todos,
Tengo esta macro para consolidar las pestañas de un libro en uno solo, el problema me da que no me coje el último dato de cada pestaña, puesto que el último dato está en la columna D y solo me coje hasta la J (En la J hay dos celdas hacia abajo en blanco que sin embargo si están en la columna D).
A ver si me podeis ayudar
Gracias anticipadas
Sub consolidardatos()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
libro1 = ActiveWorkbook.Name
Workbooks("libro1.xlsm").Activate
Dim var As Integer
Dim hj As Worksheet
var = 0
For Each hj In Worksheets
If hj.Name = "Consolidar" Then
var = 1
Exit For
End If
Next hj
If var = 0 Then Sheets.Add(Before:=Sheets(1)).Name = "Consolidar" Else
Sheets("Consolidar").Move Before:=Sheets(1)
Sheets(2).Activate
Sheets(2).Range(Range("a1"), Range("A1").End(xlToRight)).Copy
Sheets(1).Activate
Sheets("Consolidar").Paste Destination:=Range("a1")
For Each hj In Worksheets
If hj.Name <> ActiveSheet.Name Then
With hj
.Range("A14:J" & .Range("A" & Rows.Count).End(xlUp).Row).Copy _
Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1)
End With
End If
Next hj
Worksheets("Acopio").Range("A13:J13").Copy
Worksheets("Consolidar").Range("a1:j1").PasteSpecial xlPasteAll
Application.CutCopyMode = False
ActiveWindow.DisplayGridlines = False
Range("A1").CurrentRegion.Select
Selection.Columns.AutoFit
End Sub
En tu macro utilizas la columna A para identificar el último dato con esto
.Range("A" & Rows.Count).End(xlUp).Row
¿hay datos e todas las filas qeu te interesan de la columna A?
como alternativa puedes utilizar el rango .UsedRange de tu hoja, que es un rango "especial" que está formado por las celdas que contienen algo. Así que la última fila de ese UsedRange será la que te interese
pro ejemplo:
With hj
ultimafilacondatos = .UsedRange.Rows(.UsedRange.Rows.Count).Row
------
Ya sé Excel, pero necesito más.
Buenos días Paco, lo primero agradecer tu ayuda, sobre tu pregunta: ¿hay datos e todas las filas qeu te interesan de la columna A? la respuesta es SI, pero como aparecen en blanco no la copia con mi código.
He cambiado el código como tu me dices y me da error, te lo marco en amarillo a ver si me puedes ayudar.
Gracias anticipadas.
Sub consolidardatos()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
libro1 = ActiveWorkbook.Name
Workbooks("libro1.xlsm").Activate
Dim var As Integer
Dim hj As Worksheet
var = 0
For Each hj In Worksheets
If hj.Name = "Consolidar" Then
var = 1
Exit For
End If
Next hj
If var = 0 Then Sheets.Add(Before:=Sheets(1)).Name = "Consolidar" Else
Sheets("Consolidar").Move Before:=Sheets(1)
Sheets(2).Activate
Sheets(2).Range(Range("a1"), Range("A1").End(xlToRight)).Copy
Sheets(1).Activate
Sheets("Consolidar").Paste Destination:=Range("a1")
For Each hj In Worksheets
If hj.Name <> ActiveSheet.Name Then
With hj
.Range("A14:J" & ultimafilacondatos = .UsedRange.Rows(.UsedRange.Rows.Count).Row).Copy _
Range("A" & ultimafilacondatos = .UsedRange.Rows(.UsedRange.Rows.Count).Row + 1)
End With
End If
Next hj
Worksheets("Acopio").Range("A13:J13").Copy
Worksheets("Consolidar").Range("a1:j1").PasteSpecial xlPasteAll
Application.CutCopyMode = False
ActiveWindow.DisplayGridlines = False
Range("A1").CurrentRegion.Select
Selection.Columns.AutoFit
End Sub
¿has declarado la variable?
al principio del procedimiento añade
Dim ultimafilacondatos
Luego, en la línea que señalas en amarillo está mezclando la asignación del valor a esa variable con la utilización de dicho valor
tienes que separarlo en dos filas. Además, esta última fila que calculas será para la hoja de origen, pero no para la de destino ¿no?
primero asignas el valor a la variable
ultimafilacondatos = .UsedRange.Rows(.UsedRange.Rows.Count).Row
y luego utilizas ese valor,
.Range("A14:J" & ultimafilacondatos ).Copy _
Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1)
Por lo que entendí, tu problema estaba en el origen, no en el destino ¿no?
------
Ya sé Excel, pero necesito más.
Muchísimas gracias Paco por tu ayuda, me ha funcionado perfectamente.