Como evitar no filtrar datos

5 envíos / 0 nuevos
Último envío
Jesus_2012
Imagen de Jesus_2012
Offline
última acción: Hace 9 años 6 meses
Nivel 1 - 200 puntos
alta: 17/05/2011 - 15:42
Puntos: 390
Como evitar no filtrar datos

Hola a todos.

Me gustaría saber que instrucción puedo utilizar para que me haga el match en un filtro. Es decir, si existe una instrucción que pueda ayudarme a que cuando hago una filtro y no se encuentran datos con ese criterio de filtro en una tabla, no me realice el filtro y solo me mande un mensaje de error de que "no existe ese dato en la tabla". Ya que el filtro que tengo actualmente al seleccionar un criterio y no existen datos con ese criterio en la tabla me filtra la tabla y sólo me pone el encabezado.

 

Gracias y Saludos,

 

 

 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 7 horas 21 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: Como evitar no filtrar datos

Para saber si hay datos o no hay que aplicar el filtro, no queda otro remedio.

Lo que puedes hacer a continuación es comprobar si hay resultados, y si no los hay, desactivar el filtro para mostrar todos los resultados.

Para saber si hay algún dato que cumplen el filtro puedes contar las celdas visibles en el rango filtrado, si hay cero (o una si incluyes el encabezado), es que todas quedaron ocultas y por tanto ninguna cumple el filtro.

Para saber las celdas visibles, los rangos tienen una propiedad SpecialCells  (¿te suena lo de Ir a Especial...?) que permite elegir determinado tipo de celdas, por ejemplo las visibles.

celdas especiales de un rango de Excel

por ejemplo si utilizas un autofiltro, el rango del autofiltro es algo así:

ActiveSheet.AutoFilter.Range

Si utilizas un filtro avanzado tendrás que utilizar el mismo rango que utilices para aplicar el filtro.

Como el resultado de esto es también un rango, puedes contar sus filas con algo así:

MiRangoDeFiltrado.SpecialCells(xlCellTypeVisible).Rows.Count

Si esto es igual a uno (sólo devuelve el encabezado) quiere decir que ningún dato cumple los criterios, así que puedes mostrar un mensaje o desactivar el filtro, o lo que quieras hacer en este caso, por ejemplo con algo así:

If MiRangoDeFiltrado.SpecialCells(xlCellTypeVisible).Rows.Count = 1 Then
    ' muestra un mensaje y lo que quieras hacer más
    MsgBox "No hay ningún dato para estos criterios de búsqueda"
   
End If

Ya nos contarás qué tal... 

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

Jesus_2012
Imagen de Jesus_2012
Offline
última acción: Hace 9 años 6 meses
Nivel 1 - 200 puntos
alta: 17/05/2011 - 15:42
Puntos: 390
Re: Como evitar no filtrar datos

Hola Paco,

Muchas gracias por responder mi duda. Sin embargo al añadir estas instrucciones con SpecialCells, aún sigue sin filtrarme la información de la tabla. Por ejemplo, mi código queda:  

  Sub Datos()
   Dim error As String
If [AB22] = 0 Then
   error = MsgBox("Error: Seleccione un dato")
   End If
  
Range("Table1[#All]").AdvancedFilter Action:=xlFilterInPlace,
        CriteriaRange:=Range.SpecialCells(xlCellTypeVisible,"AB21:AB22"), Unique:=False
            MsgBox "No existen contactos con este criterio de búsqueda"
    ActiveSheet.ShowAllData

End Sub

Yo creo que no me quedó muy claro, como utilizar esa propiedad :(

 Gracias por tu ayuda!

 

Saludos,

Jesús

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 7 horas 21 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: Como evitar no filtrar datos

no se trata de poner SpecialCells como criterio del filtro.
Debes aplicar el filtro normalmente, y luego, sobre el rango ya filtrado, cuentas las celdas visibles.

'primero aplicas el filtro
Range("Table1[#All]").AdvancedFilter Action:=xlFilterInPlace,
        CriteriaRange:=Range("AB21:AB22"), Unique:=False
' Y ahora comprobamos si hay datos o no:
   If Range("Table1[#All]").SpecialCells(xlCellTypeVisible).Rows.Count = 1 Then
   ' si no hay resultados es cuando mostramos el mensaje
            MsgBox "No existen contactos con este criterio de búsqueda"
            ActiveSheet.ShowAllData
   End If
 

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

beduino (no verificado)
Imagen de beduino
respuesta simple

tal vez puedas ahorrarte el filtro si haces un match para contar el numero de repeticiones del parametro de busqueda en el rango deseado

WorksheetFunction.Match("criterio", Range("1:1"), 0)