EXCEL - Aplicar Filtro y, a continuación, una macro definida

Los expertos. Tengo una nueva consulta sobre VBA; espero que podáis iluminarme :)

Tengo una hoja en la que recopilo todos los datos de unos pedidos (cantidades, proveedor, precio, fechas,...). Los encabezados se encuentran en la línea 9.

Mediante la siguiente macro, genero dentro del mismo archivo una hoja independiente para cada proveedor (dato en la columna K) y funciona perfectamente:

Sub CrearyCopiarPedidoProv()
    Application.ScreenUpdating = False
        Set h1 = Hoja1
        For i = 10 To h1.Range("K" & Rows.Count).End(xlUp).Row
            If h1.Cells(i, "K") <> "" Then
                existe = False
                For Each h2 In Sheets
                    If h2.Name = h1.Cells(i, "K") Then
                        existe = True
                        Exit For
                    End If
                Next
                If existe Then
                    u = h2.Range("K" & Rows.Count).End(xlUp).Row + 1
                    h1.Rows(i).Copy h2.Rows(u)
                    h2.Range("AA:AJ").Columns.Delete
                Else
                    Set h3 = Sheets.Add(after:=Sheets(Sheets.Count))
                    Hoja = h1.Cells(i, "A")
                    h3.Name = h1.Cells(i, "K")
                    h1.Rows(9).Copy h3.Range("A1")
                    h1.Rows(i).Copy h3.Rows(2)
                    h3.Range("AA:AJ").Columns.Delete
                        Cells.Select
                        Cells.EntireColumn.AutoFit
                        Cells.EntireRow.AutoFit
                End If
            End If
        Next
        MsgBox ("Plan proveedor generado")
End Sub

Me gustaría hacer una evolución en el fichero pero no consigo que funcione.

Quiero que ANTES de aplicar la macro descrita se apliquen dos filtros de fechas a las columnas C (Fecha Inicio) y D (Fecha Fin), y que la macro se ejecute sólo para las líneas visibles.

Los filtros los aplico en función de la casilla C2 con el código siguiente:

Fecha Inico (col C) <= C2 o vacío

Fecha Fin (col D) >= C2 o vacío

Sub filtrar_fechas()
    Dim lFecha1 As Long
    lFecha1 = Range("celFecha")
    With ActiveSheet
        If .AutoFilterMode = True Then .AutoFilterMode = False
    End With
    Range("A9").AutoFilter field:=3, Criteria1:="<=" & lFecha1, _
                            Operator:=xlOr, Criteria2:="="
    Range("A9").AutoFilter field:=4, Criteria1:=">=" & lFecha1, _
                            Operator:=xlOr, Criteria2:="="
End Sub

¿Cómo podría hacer para que la primera macro me tome en cuenta únicamente las líneas filtradas?

1 Respuesta

Respuesta
1

Así quedaría el orden de instrucciones, agregando las que dejo en negrita.

Set h1 = Sheets("Proyectos")
For i = 10 To h1.Range("K" & Rows.Count).End(xlUp).Row
     If h1.Rows(i).Hidden = False Then
          If h1.Cells(i, "K") <> "" Then
               'tus instrucciones
          End If
     End If
Next i

De este modo se evalúa si la fila está oculta o no antes de realizar todo el proceso.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas