Macro para filtrar con dos columnas

Tengo una macro para hacer un filtro en dos columnas, una en la que le doy el valor de filtrado por un textbox, y en la otra, por dos textbox con dos fechas (inicio y fin). Algo estoy haciendo mal por que no me funciona.

La fecha la tengo en la columna B y el proveedor (en este supuesto), en la columna D

El código que tengo es éste:

Private Sub CommandButton1_Click()
Dim fecha1 As String
Dim fecha2 As String
Dim Prov As String
Sheets("comedor").Unprotect
Prov = Proveedor1.Value
fecha1 = Data1.Value
fecha2 = Data2.Value
fecha1 = Format(fecha1, "mm/dd/yyyy")
fecha2 = Format(fecha2, "mm/dd/yyyy")
Range("B7:K5000").AutoFilter field:=1, Criteria1:=">=" & fecha1, Operator:=xlAnd, Criteria2:="<=" & fecha2, field:=3, Criteria1:=Prov
Proveedor1.Clear
Data1 = ""
Data2 = ""
Prov_Data.Hide
Sheets("comedor").Protect
End Sub

1 respuesta

Respuesta
1

El problema puede ser el formato de la fecha, excel ocupa mm/dd/yyyy para hacer los filtros

Range("B7:K5000").AutoFilter field:=1, Criteria1:=">=" & Format(fecha1, "mm/dd/yyyy"), Operator:=xlAnd, Criteria2:="<=" & Format(fecha2, "mm/dd/yyyy"), field:=3, Criteria1:=Prov

Prueba y me comentas.

Saludos. Dam

Hola, he probado con tu solución y sigue sin funcionar.

He de decirte que el filtro sólo por fechas, lo tengo por separado y funciona bien, pero me han pedido el doble filtro fecha y proveedor, con lo que he implementado uno y otro en este este nuevo formulario y en estas me encuentro.

Perdón tienes razón, por lo menos en la versión 2003, no puedes juntar el autofiltro así como lo tienes, solamente funciona por separado, de esta forma:

Selection.AutoFilter Field:=1, Criteria1:=">=03-Feb", Operator:=xlAnd, _
Criteria2:="<=06-Feb"

Selection.AutoFilter Field:=2, Criteria1:="=a4", Operator:=xlAnd

Pero en la ejecución de la macro, no se nota cuando haces los 2 autofiltros, ¿o por qué los quieres juntar?

Saludos. Dam

Quiero juntarlos por que quiero filtrar por proveedor y por fechas, a la vez.

Ahora no lo puedo comprobar, mañana te digo si funciona lo que me dices.

Gracias

Si filtras uno y luego el otro el resultado es el que esperar

PERFECTO¡¡,

y ya, para rizar el rizo, si me ordenase las fechas de menor a mayor ?? ...

No hace falta, ya he hecho el código y lo he implementado al inicial. Al final me queda así:

Private Sub CommandButton1_Click()
Dim fecha1 As String
Dim fecha2 As String
Dim Prov As String
Sheets("comedor").Unprotect
Prov = Proveedor1.Value
fecha1 = Data1.Value
fecha2 = Data2.Value
fecha1 = Format(fecha1, "mm/dd/yyyy")
fecha2 = Format(fecha2, "mm/dd/yyyy")
Range("B5:K5000").AutoFilter field:=1, Criteria1:=">=" & fecha1, Operator:=xlAnd, Criteria2:="<=" & fecha2
Selection.AutoFilter field:=3, Criteria1:=Prov
ActiveWorkbook.Worksheets("Comedor").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Comedor").AutoFilter.Sort.SortFields.Add Key:= _
Range("B5:B5000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets("Comedor").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Proveedor1.Clear
Data1 = ""
Data2 = ""
Prov_Data.Hide
Sheets("comedor").Protect
End Sub

Muchas gracias por todo.

Finalizo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas