Copiar solo filas rellenas a otra hoja

Creo que antes no me esplique bien, por lo que ahora intentare hacerlo mejor, ademas he modificado el archivo para que sea mas fácil, esta es la descripción de la pestaña tipo:
Fila 1.- descripción de la hoja, debe copiarse pero no borrarse.
Fila 2.- conceptos que se listan, debe copiarse pero no borrarse.
Filas de la 3 a la 23 ambas incluidas.- Aquí recopilamos fechas, textos y contadores, deben copiarse y borrarse solo las filas que contengan datos y no modificarse los formatos de celda y las formulas de la columna BP.
Fila 24.- Mismos conceptos que en la fila 2 pero de otro departamento, debe copiarse pero no borrarse.
Filas de la 25 a la 44 ambas incluidas.- Aquí también recopilamos fechas, textos y contadores, deben copiarse y borrarse solo las filas que contengan datos y no modificarse los formatos de celda y las formulas de la columna BP.
Por lo que he entendido hay que describir que hay tres filas de títulos que son 1,2, y 24 que solo deben copiarse pero no borrarse.
No existen totales porque lo que se recopila en estas paginas son preguntas( textos) que se contean en la columna BP (por eso hay que respetar las formulas de esta columna) y que de hay pasan a la hoja MATRIZ y GRÁFICO (por eso hay que dejar estas hojas aparte).
La intención de la hoja resumen es listar las diferentes preguntas con la fecha en la que se recopilaron, por eso lo ideal es que las filas 1, 2 y 24 se copien siempre pero no se borren y que de los intervalos 3 a 23 y 25 a 44 se copien y se borren solo las filas que se han rellenado pero que no se copien las lineas vacías que quedan dentro de estos intervalos. Todas las filas que se copien deben ocupar la primera fila vacía que haya en la hoja resumen, partiendo siempre desde la fila 2 porque la uno quedara ocupada por el titulo de esta hoja (resumen). Al ejecutar el macro debe borrarse el contenido de la hoja resumen a excepción de la fila 1 ó titulo para que se pueda copiar el nuevo conténido de las difierentes hojas tal y como esta explicado arriba.
Espero haber sido mas explicito esta vez, como siempre darte las gracias por adelantado y mandarte un saludo.
PD.- Si puedes introducir lineas que expliquen lo que hace cada parte del texto de la macro aunque tengas que hacerlo aparte te lo agradecería, estoy muy interesado en aprender para asi poder echar una mano en la medida de lo posible, por lo que si me envías algún enlace de pagina o curso con la que poder empezar a aprender a programar seria genial.

1 Respuesta

Respuesta
2

Te regreso la macro actualizada

Sub ultimas()
'copia las últimas filas
'por.dam
colt = Range("BP1").Column
Application.ScreenUpdating = False
Set h1 = Sheets("resumen")
h1.Select
    'limpia hoja resumen
    ufila = ActiveCell.SpecialCells(xlLastCell).Row
    If ufila = 1 Then ufila = 2
    ucol = ActiveCell.SpecialCells(xlLastCell).Column
    h1.Range(Cells(2, 1), Cells(ufila, ucol)).Clear
    On Error Resume Next
    ffin = h1.UsedRange.Find(what:="*").Row
    ActiveCell.SpecialCells(xlLastCell).Select
'Repite el proceso para cada hoja
For Each hoja In Worksheets
    Set h2 = Sheets(hoja.Name)
    h2.Select
    Application.StatusBar = "Copiando hoja: " & hoja.Name
    Select Case hoja.Name
        Case "MATRIZ", "GRAFICO", "GRÁFICO", "resumen"
        Case Else
            ufila = ActiveCell.SpecialCells(xlLastCell).Row
            ucol = ActiveCell.SpecialCells(xlLastCell).Column
            'Repite el proceso para 2 rangos (3 a 23 y 25 a 44)
            For f = 1 To 2
                'Rango de filas a copiar
                If f = 1 Then
                    'copia la fila 1 y 2
                    udes = h1.Range("A1").SpecialCells(xlLastCell).Row + 1
                    h2.Select
                    h2.Range(Cells(1, 1), Cells(2, ucol)).Copy _
                    h1.Range("A" & udes)
                    tit = 3
                    tot = 23
                Else
                    'copia la fila 24
                    udes = h1.Range("A1").SpecialCells(xlLastCell).Row + 1
                    h2.Select
                    h2.Range(Cells(24, 1), Cells(24, ucol)).Copy _
                    h1.Range("A" & udes)
                    tit = 25
                    tot = 44
                End If
                'busca si tiene datos la fila y la copia
                For i = tit To tot
                    For j = 1 To ucol
                        If h2.Cells(i, j) <> "" Then
                            udes = h1.Range("A1").SpecialCells(xlLastCell).Row + 1
                            h2.Range(Cells(i, 1), Cells(i, ucol)).Copy _
                            h1.Range("A" & udes)
                            j = ucol
                        End If
                    Next
                Next
                'Borra los datos
                h2.Range(Cells(tit, 1), Cells(tot, colt - 1)).ClearContents
            Next
    End Select
Next
Application.StatusBar = False
Application.ScreenUpdating = True
h1.Select
MsgBox "Copias Terminadas", vbInformation, "COPIAR"
End Sub

Prueba y me comentas

Saludos. Dam
Si es lo que necesitas.

funciona muy bien pero sigue copiando todas las filas de los intervalos 3 a 23 y 25 a 44, puede que sea porque la columna BP tiene formato de contabilidad y aparece un guion?

Te explico, en cada hoja cada fila de estos intervalos esta dividida de la siguiente manera:

-Parte1: columnas de la A a la F ambas incluidas, están unidas y contienen la fecha en la que rellenamos esa fila.

-Parte2: columnas de la G a la AZ ambas incluidas, están unidas para recoger texto.

-Parte3: columnas de la BA a la BO ambas incluidas, están separadas y sirven para ir recogiendo unidades (una por cada celda), tantas como veces se repita el texto.

-Parte4: columnas BP BQ BR están unidas y con formato contabilidad para contar las unidades de cada fila, por eso si la fila esta vacia aparece un guion.

Ej. Si el dia 20/02/2013 me preguntan 4 veces "¿tenéis televisores?" pues en mi hoja en la parte1 pongo la fecha "20/02/2013" en la parte2 pongo la pregunta "¿tenéis televisores?" en la parte3 relleno 4 celdas con un uno y en la parte4 me aparece el numero 4 como resultante de la suma de la parte3. luego se suman todas las celdas de la parte4 de los intervalos y se pasan a la pestaña matriz que es en la que aparecen todos los nombres de los empleados con los resultados de cuantas preguntas han recibido.

A ver que te parece mi idea:

hacer que de los intervalos 3 a 23 y 25 a 44 solo copie las filas en las que la parte2 (la del texto) este ocupada, pero que no solo copie la parte2 sino toda la fila, asi ignoraria los guiones de la columna BP, si es que es ese el problema.

Tal vez tambien podamos sustituir la parte3 de cada fila por un boton que cada vez que se pulse sume +1 a la celda de la misma fila de la columna BP.

gracias otra vez Dam, no olvides que si necesitas ver el archivo te lo envio en un momento.

un saludo

Pero no entiendo cuál es el problema, tu planteamiento era: "que de los intervalos 3 a 23 y 25 a 44 se copien y se borren solo las filas que se han rellenado pero que no se copien las lineas vacías que quedan dentro de estos intervalos."

Si con el texto anterior hay algún problema en la macro, con gusto lo corrijo.

Esta condición es nueva: "solo copie las filas en las que la parte2 (la del texto) este ocupada".

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas