Condición sobre datos filtrados
Resuelto
Akalia
Mensajes publicados
34
Estado
Miembro
-
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
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
-
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