Ayuda con esta macro

5 envíos / 0 nuevos
Último envío
dinkys
Imagen de dinkys
Offline
última acción: Hace 4 años 2 semanas
alta: 28/06/2019 - 11:54
Puntos: 115
Ayuda con esta macro

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

 

 

Etiquetas: 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 14 horas 33 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
En tu macro utilizas la

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.

dinkys
Imagen de dinkys
Offline
última acción: Hace 4 años 2 semanas
alta: 28/06/2019 - 11:54
Puntos: 115
Buenos días Paco, lo primero

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

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 14 horas 33 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
¿has declarado la variable?al

¿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.

dinkys
Imagen de dinkys
Offline
última acción: Hace 4 años 2 semanas
alta: 28/06/2019 - 11:54
Puntos: 115
Me funcionó

Muchísimas gracias Paco por tu ayuda, me ha funcionado perfectamente.