Se puede crear un formulario de búsqueda filtrada

Estoy depurando modificado y actualizando las bases de datosa que llevo en el trabajo

Y cada día se me ocurren cosas para agilizar y mejorar el manejo de la información

Por eje,, me gustaría hace run formulario flotante que me busque y filtre el dato o datos buscados y arroje la informaicon de ese registro o si son varios

¿Me imagino que se necesitaría fórmulas y código o se puede hacer con simples macros?

ASÍ COMO ESTA imagen que tome de video

Fijense q aqui esta el cuadro flotante de los registros de la base de datos

AHORAra el tercer cuadro, filtro erl nombre de MARIA TERESA

Es complicado hacer esto para una tabla de datos en excel,

Si logro dar con el código de este archivo,, seria más fácil.. Pero estoy en ello

Hasta ahora no he encontrado nada

1 respuesta

Respuesta
2

Se puede hacer con código VBA, no es necesario el uso de fórmulas.


Si ya tienes un archivo con tu userform, comparte tu archivo en google drive y te ayudo a completar el código para filtrar los datos en un userform por nombre o por ID.

Envío archivo con su respectivo forms (búsqueda) para el código, hasta donde lo puede hacer

La contraseña de código visual es: neptuno*

Y si le llegase a pedir clave en alguna de las hojas, pues se las quite a todas,, la clave es: 5

https://drive.google.com/file/d/1g617RiiVWskjbSlN-fV3eWbHmjFG9DfG/view?usp=sharing 

Hay un label que coloque en el forms en la parte de abajo del cuadro lista, y es para que muestre la fecha día hora año,, pero no me sale, y tampoco sale ERROR

Private Sub busqueda_Initialize()
busqueda = Format(Now, "[$-80A]dddd, DD"" de ""mmmm"" de ""yyyy   hh:mm:ss am/pm")
End Sub

Cambia en las propiedades del listbox "Lista" a columnCount 5

Reemplaza todo tu código por lo siguiente:

Option Explicit
'
Dim a As Variant
'
Sub Cargar_Lista()
  Dim b As Variant, c As Variant
  Dim i As Long, j As Long, k As Long
  Dim cmb1 As String, txt1 As String, txt2 As String
  '
  ReDim b(1 To UBound(a, 1), 1 To 5)
  Lista.Clear
  '2 programa, 3 tec, 4 mun, 5 nomb, 7 fec, 10 %
  For i = 1 To UBound(a, 1)
    If ComboBox1.Value = "" Then cmb1 = a(i, 2) Else cmb1 = ComboBox1.Value
    If TextBox1.Value = "" Then txt1 = a(i, 5) Else txt1 = TextBox1.Value
    If TextBox2.Value = "" Then txt2 = a(i, 4) Else txt2 = TextBox2.Value
    If LCase(a(i, 2)) = LCase(cmb1) And _
       LCase(a(i, 5)) Like LCase(txt1) & "*" And _
       LCase(a(i, 4)) Like LCase(txt2) & "*" Then
      j = j + 1
      b(j, 1) = a(i, 3)
      b(j, 2) = a(i, 4)
      b(j, 3) = a(i, 5)
      b(j, 4) = a(i, 7)
      b(j, 5) = a(i, 10)
    End If
  Next
  If j > 0 Then
    ReDim c(1 To j, 1 To 5)
    For i = 1 To j
      For k = 1 To 5
        c(i, k) = b(i, k)
      Next
    Next
    Lista.List = c
  End If
End Sub
'
Private Sub ComboBox1_Change()
  Call Cargar_Lista
End Sub
Private Sub TextBox1_Change()
  Call Cargar_Lista
End Sub
Private Sub TextBox2_Change()
  Call Cargar_Lista
End Sub
'
Private Sub UserForm_Activate()
  a = Range("A4", Range("P" & Rows.Count).End(3)).Value
  Call Cargar_Lista
  busqueda = Format(Now, "[$-80A]dddd, DD"" de ""mmmm"" de ""yyyy   hh:mm:ss am/pm")
End Sub

Funciona de la siguiente manera.

- Ejecuta el form

- Selecciona un dato del combo

- O empieza a escribir en el textbox1

- O empieza a escribir en el textbox2

En automático se hace el filtro y se llena el listbox.

Hola

Dices aquí: "Cambia en las propiedades del listbox "Lista" a columnCount 5 "

¿Es decir el nombre (name) es lo que hay que cambiar? Si es así,, no acepta el objeto

¿Y ese código donde lo voy a colocar? ¿En thisworkbook?

¿O en un modulo?

OK,, Listo, ya entendí, no me había dado cuenta

Te muestro

Ok, listo,, lo que no entiendo es que cuando voy a elegir a uno no me lo filtra,,

Lo que sucede es que hay un combobox que tengo que elegir el programa,, ya que ambos están en los mismo programas, lo que cambian son fechas y %..

Como posiciono el porcentaje en la columna del % ya que sale en la fechas,, y las fecha no salieron

No me atrevo a mover el código,

Cambia en las propiedades del listbox "Lista" a columnCount 5


El código va en el userform. Borras todo tu código y pones el mío. 

Donde modifico para desplazar un cms ala derecha el Nombre del técnico

Y un poco más el resto

Funciona de la siguiente manera.

- Ejecuta el form

- Selecciona un dato del combo (también filtra cuando cambias el dato en el combobox, revisa bien los datos que aparecen)

- O empieza a escribir en el textbox1

- O empieza a escribir en el textbox2

En automático se hace el filtro y se llena el listbox.

Cualquier cambia, ya sea en el combo o en los textbox hace los filtros.

Donde modifico para desplazar un cms ala derecha el Nombre del técnico

Y un poco más el resto


Eso lo vemos en otra pregunta. Valora esta respuesta. R ecuerda, una pregunta por petición!

tampoc filtra correctamente

Es decir,, si dígito un nombre me lo pasa en blanco

Tienes que poner unas letras de un nombre que exista. Si el nombre no existe no te pone nada.

El filtro es con el NOMBRE DEL ESTABLECIMIENTO, entonces en el campo nombre escribe la letra F y te va a poner todo lo que empieza con F, por ejemplo Ferretería.

Ejemplo:

AHH lo que sucede

Es que el filtraje debe hacerse por el nombre del técnico o por el municipio

NO por establecimiento

Ok,, de todas maneras gracias,, ya hizo mucho,

Buscare la forma de modificarlos,,,

Es por eso que nome da

Otro ejemplo:

¿En serio?

Solamente vas a valorar la respuesta como "Buena". Las opciones son "Excelente"

El código hace todo lo que pediste, incluso creo que hace hasta mucho más.

E spero que cambies la valoración.

No me di cuenta

El código esta excelente,, pero no hago nada si no me funciona como lo necesito,

¿Dime dónde modifico para que busque por el técnico responsable o nombre del técnico?

Cambia el 5 por el 3:

    If ComboBox1.Value = "" Then cmb1 = a(i, 2) Else cmb1 = ComboBox1.Value
    If TextBox1.Value = "" Then txt1 = a(i, 3) Else txt1 = TextBox1.Value
    If TextBox2.Value = "" Then txt2 = a(i, 4) Else txt2 = TextBox2.Value
    If LCase(a(i, 2)) = LCase(cmb1) And _
       LCase(a(i, 3)) Like LCase(txt1) & "*" And _
       LCase(a(i, 4)) Like LCase(txt2) & "*" Then

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas