Macro de Filtro Avanzado

Respuesta de
a
Usuario

Hola,

Tengo una lista de datos y una macro que funciona como un filtro avanzado con las siguientes características:
En la Hoja1 tengo la lista de datos:
          A               B               C               D
1    FECHA   FACTURA  IMPORTE  NOMBRE (Rango A1:D9 = Datos)
2  1-sep-12      120456      90,00€    Manuel
3  2-sep-12      120457      82,00€    Jose
4  3-sep-12      120458      95,00€    Javier
5  3-sep-12      120459      75,00€    Manuel
6  4-sep-12      120460      86,00€    Carmen
7  4-sep-12      120461      89,00€    Carlos
8  5-sep-12      120462      99,00€    Javier
9  5-sep-12      120463      84,00€    María

 

En la Hoja2 tengo los criterios de búsqueda y el área de extracción de datos:
         A             B              C                 D             E
1   FECHA    FECHA   FACTURA   IMPORTE NOMBRE (Criterios de búsqueda)
2
3
4
5
6    FECHA   FACTURA  IMPORTE  NOMBRE (Área de extracción)

 

La macro tiene el siguiente código en la Hoja2 de VBA:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:E2")) Is Nothing Then
Fechadesde = Range("A2")
Fechahasta = Range("B2")
Range("J2") = ">=" & Fechadesde
Range("K2") = "<=" & Fechahasta
Range("Datos").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
Range("J1:N2"), CopyToRange:=Range("A6:D6"), Unique:=False
End Sub

 

Para automatizar la actualización de los datos, tengo los criterios en otras coordenadas:
           J            K              L               M              N
1   FECHA   FECHA   FACTURA  IMPORTE  NOMBRE (Rango de criterios reales)

 

La macro realiza el filtrado con el criterio de fechas desde/hasta y actualiza los datos al realizar cualquier modificación, pero no permite filtrar más que este criterio, pues si a las fechas le añado otro criterio no lo tiene en cuenta y si busco con un criterio que no incluya las fechas tampoco funciona.
Necesito ayuda para que el filtrado se pueda hacer con cualquiera de los criterios, por
separado (fecha, factura, nombre, etc.) o en combinación (fecha desde-fecha hasta, fecha desde-factura, factura-nombre, etc.).

Gracias anticipadas por vuestras aportaciones.

beam.

Avatar
Experto

Hola:

Sin llegar a revisar el código con detenimiento, primero quisiera que lo coloques en un botón.

Te explico: el evento Change se ejecuta ante cualquier cambio en rango A2:E2

Es decir que cuando ingresas la fecha en A2 se ejecuta ...... luego ingresas la fecha en B2 ... se vuelve a ejecutar.  Y si luego necesitas otro criterio se vuelve a ejecutar filtro sobre filtro.

Pasá las instrucciones a un botón, probalo y comentame si necesitas alguna otra ayuda con esto.

 

Sdos

Elsa

http://aplicaexcel.galeon.com/macros.htm

Usuario

Hola,

He encontrado una vía de solución con

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:E2")) Is Nothing Then
Sheets(1).Range("Datos").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
Range("A1:E2"), CopyToRange:=Range("A6:D6"), Unique:=False
End If
End Sub

 

y añadiendo en la hoja excel las fórmulas

A2

=">=" & TEXTO("01/04/12";"0")

B2

="<=" & TEXTO("09/04/12";"0")

 

Así funcionan todos los criterios, pero lo encuentro poco práctico ya que debo realizar los cambios en A2 o B2 en la barra de herramientas.

¿Es posible incluir este procedimiento en el código?

Gracias

Usuario

Gracias Elsa,