Macro copiar celdas que cumplan condición, de una hoja a otra

Tengo una macro que copia unos campos de la hoja "CLIENTES", a otra hoja llamada "TEMP_BLOQUE", los datos que debe copiar son los que en la hoja "CLIENTES", en la columna M, tengan un texto que dice "NORMAL", los datos que debo copiar desde la hoja "CLIENTES", partiendo de la fila 3, son los de las columnas A, B, C, D y M, el problema que tengo en la siguiente macro, es que no puedo incluirle la columna M a la instrucción:

Sub CopiarClientesParaBloque()

Application.ScreenUpdating = False
Set origen = Worksheets("CLIENTES")
Set destino = Worksheets("TEMP_BLOQUE")

'inicializo la variable j
j = 2
filaultima = Sheets("CLIENTES").Range("A1048000").End(xlUp).Row
libre = destino.Range("A1048576").End(xlUp).Row + 1
'comienzo el bucle
For I = 2 To filaultima
'activo la hoja donde están mis datos
Sheets("CLIENTES"). Activate
'compruebo que el valor de la columna M, es el del grupo
If Cells(I, "M") = "GENERAL" Then
'copio la fila entera
Range(Cells(I, "A"), Cells(I, "E")). Copy
'selecciono la hoja donde quiero pegar y después la celda
Sheets("TEMP_BLOQUE").Activate
Cells(j, "A").Select
'pego la fila que hemos copiado
ActiveSheet. Paste
'pego la fila que hemos copiado
'aumento la variable j para que vaya a la siguiente fila de la hoja filtros
'cuando encuentre una nueva fila que cumple con la condición de edad
j = j + 1
End If
Next

End Sub

Respuesta
2

Aquí tienes la macro ajustada para que copie los datos de la hoja "CLIENTES" a la hoja "TEMP_BLOQUE" solo cuando el valor en la columna M sea "NORMAL":

Sub CopiarClientesParaBloque()
    Application.ScreenUpdating = False
    Dim origen As Worksheet
    Dim destino As Worksheet
    Dim filaultima As Long
    Dim libre As Long
    Dim i As Long
    Dim j As Long
    Set origen = Worksheets("CLIENTES")
    Set destino = Worksheets("TEMP_BLOQUE")
    ' Inicializo la variable j
    j = 2
    filaultima = origen.Range("A" & origen.Rows.Count).End(xlUp).Row
    libre = destino.Range("A" & destino.Rows.Count).End(xlUp).Row + 1
    ' Comienzo el bucle
    For i = 3 To filaultima
        ' Compruebo que el valor de la columna M sea "NORMAL"
        If origen.Cells(i, "M").Value = "NORMAL" Then
            ' Copio las celdas A, B, C, D y M de la fila actual
            origen.Range("A" & i & ":D" & i & ",M" & i).Copy Destination:=destino.Range("A" & libre)
            ' Aumento la variable libre para la siguiente fila en la hoja "TEMP_BLOQUE"
            libre = libre + 1
        End If
    Next i
    Application.ScreenUpdating = True
End Sub

Esta macro copiará las celdas de las columnas A, B, C, D y M de la hoja "CLIENTES" a la hoja "TEMP_BLOQUE" solo si el valor en la columna M es "NORMAL". Asegúrate de que los nombres de las hojas sean los correctos y que la macro se ejecute desde un botón o evento adecuado.

1 respuesta más de otro experto

Respuesta
2

Esta es la instrucción que necesitas ajustar, pero atención con las letras porque en tu macro dice E y en la consulta mencionas D:

Range("A" & i & ":E" & i & ", M" & i). Copy 

Luego sigue tu pegado. Eso también se puede reducir de este modo:

Range("A" & i & ":E" & i & ", M" & i).Copy Destination:=Sheets("TEMP_BLOQUE").Cells(j, "A")

Te invito a mirar el video Nº 71 donde dejé una guía completa de cómo Pegar según lo que quieras conservar: formatos, fórmulas, solo valores, etc, etc.

71 - COPÌAR y PEGAR con VBA.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas