Condición sobre datos filtrados

Resuelto
Akalia Mensajes publicados 34 Estado Miembro -  
Akalia Mensajes publicados 34 Estado Miembro -
Hola,

Siguiendo con mi realización de indicadores, ahora tengo un escollo, digamos.

Describo lo que hago y lo que deseo en varios puntos:

- Realizar un primer filtro que ordene/filtre los datos en la hoja 1.
- Realizar sobre este filtro existente un segundo filtrado, también sobre los datos de la hoja 1.
- Realizar una condición para buscar en la columna BV cuando la fecha de hoy sea superior a las fechas (Now > La_fecha) donde La_fecha puede ser anterior o posterior a la fecha de hoy.
- Devolver todas las filas filtradas que cumplan la condición a otra hoja llamada “Feuil3”, y no copiar/pegar más que ciertas columnas.

He preparado una implementación de código, pero tengo la impresión de que lo que falla es aplicar la condición dentro de un filtro; hago primero el filtro y luego la condición, pero parece que la condición no tiene en cuenta el filtrado, o tal vez los datos pegados no lo hacen. Por eso he recurrido a una solución intermedia creando una segunda hoja y realizar la última parte de lo que quiero obtener. A continuación el código que funciona, pero mi pregunta es: ¿es posible hacer lo que quiero sin pasar por esa hoja intermedia?

Aquí está el código:

Option Explicit

-----------------------------------------------------
Private Sub CommandButton1_Click()

'Dim Dernligne As Integer, Lig As Integer, Lg As Integer
Dim La_date As Date
Dim Date_test As Date
Dim n As Integer
Date_test = Now()
Dim DerColonne As Integer
Dim Cl As Integer
Dim dernligne As Integer, T_statut
Dim cptr As Byte, Statut As String
Dim Idx As Integer, Nbre As Integer

'Oculta las operaciones y el desplazamiento
Application.CutCopyMode = False
Application.ScreenUpdating = False

'Añadir la hoja de prueba
Sheets.Add.Name = “test”

'Limpieza de datos antiguos
Sheets(“Feuil3”).Select
Range(“A2:CX10000”).Select
Selection.Delete

'Quitamos todos los filtros ya presentes
Sheets(“Feuil1”).AutoFilterMode = False

'Filtrado 1
Selection.AutoFilter
Worksheets(“Feuil1”).Range(“A2:CX65536”).AutoFilter Field:=42, Criteria1:=“=Ordre de fabrication”, Operator:=xlOr, Criteria2:=“=OF non standard”
'Subfiltrado en función del estatus Lanzé
Selection.AutoFilter
Worksheets(“Feuil1”).Range(“A2:CX65536”).AutoFilter Field:=75, Criteria1:=“Lancé”

Dim Lg As Integer
Dim Lig As Integer
Dim ligne As String

dernligne = Sheets(“Feuil1”).Range(“A” & Rows.Count).End(xlUp).Row

Lg = 1
'Bucle sobre las filas
For Lig = 3 To dernligne (porque la primera fecha empieza en la fila 3)

La_date = Sheets(“Feuil1”).Range(“BV” & Lig).Value
If La_date < Now Then

Sheets(“Feuil1”).Select
Range(“A” & Lig & “:BW” & Lig).Select
Selection.Copy
'pegado en síntesis
Sheets(“Feuil2”).Select
Lg = Lg + 1
Range(“A” & Lg).Select
ActiveSheet.Paste

End If
Next

'Filtrado de tipos de OF en standard y no standard
'Selection.AutoFilter
Worksheets(“Feuil2”).Range(“A2:CX65536”).AutoFilter Field:=42, Criteria1:=“=Ordre de fabrication”, Operator:=xlOr, Criteria2:=“=OF non standard”
'Subfiltrado en función del estatus Lanzé
'Selection.AutoFilter
Worksheets(“Feuil2”).Range(“A2:CX65536”).AutoFilter Field:=75, Criteria1:=“Lancé”

With Sheets(“Feuil2”)
Union(.Columns(3), .Columns(4), .Columns(5), .Columns(42), .Columns(47), .Columns(49), .Columns(52), .Columns(54), .Columns(55), .Columns(67), .Columns(74)).Copy Sheets(“Feuil3”).Range(“A1”)
End With

Application.DisplayAlerts = False
Sheets(“Feuil2”).Delete
Application.DisplayAlerts = True

End Sub

Merci d’avance si une solution est possible, car déjà le problème que j’avais avant est qu’il ne copiais pas/copiaba los datos filtrados, sino sólo aquellos que cumplían la fecha. Por eso hice un segundo filtro otra vez.
Configuration: Windows XP / Firefox 17.0

3 respuestas

  1. via55 Mensajes publicados 14393 Fecha de registro   Estado Miembro Última intervención   2 759
     
    Hola

    ¿Por qué filtrar antes y no más bien simplemente copiar solo los valores que cumplen las 3 condiciones?
    Ejemplo, una tabla con en la columna B los días, en la columna C el servicio y en la columna E la fecha; no quiero copiar las fechas<hoy de los lunes del servicio contabilidad

    For lig=3 to dernligne
    le_jour=range("B" & lig)
    le_service=range("C" & lig)
    la_date=range("E" & lig)

    If le_jour="lundi y le_service="compta" y la_date<now then
    Sheets("Feuil1").Select
    Range("A" & Lig & ":BW" & Lig).Select
    Selection.Copy

    etc

    Cdlmnt
    --
    "La imaginación es más importante que el saber." A. Einstein
    0