Como buscar dinamicamente en una caja de texto los nombres de mis funcionarios con cualquier criterio

Favor si me podrian ayudar a armar una busqueda dinamica de mi lista de funcionarios, tengo una hoja donde le llame "catastro" y esta consta de 5 columnas, y tengo otra hoja que se llama "consulta", en la hoja consulta quisiera hacer clic en un boton de comando y que me aparezca un formulario de busqueda dinamica tal cual lo mostrare en una imagen de modelo, lo que quiero es que pueda buscar por cualquier criterio o sea ingresando el apellido o el nombre o su numero de DNI y que me muestre las coincidencias en la pantalla previamente antes de elegir y cuando ubique el nombre, le quiero dar doble click o sino capturarlo con un boton y que me lleve la seleccion en la celda C4 de la hoja consulta, como veran puse el apellido "Acosta" y automaticamente me va trayendo las coincidencias, lo que no logre mostrar son las demas columnas de la hoja de catastro solo logre mostrar en pantalla 3 columnas, si me pueden ayudar desde ya les agradezco

2 Respuestas

Respuesta
2

Este es el resultado de la macro, en formulario se cargan los encabezados en el combobox y en el se selecciona por cual columna quieres filtrar, en el caso de la columna nombre el filtro esta diseñado para buscar coincidencias de los que teclees en e textbox por ejemplo si pones SAN mostrara todas las coincidencias como Santos, Sanchez, Sandra, Sandro conforme sigas tecleando ira dismimuyendo las coincidencias y si borras un caracter aumentara las coincidencias y al dar doble click sobre cualquiera de los que filtres en automatico lo mandara a la celda C4 de la hoja consultas

Y esta es la macro

Option Base 1
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
valor = ListBox1.List(0, 1)
MsgBox (valor)
Sheets("consulta").Range("c4") = valor
End Sub
Private Sub TextBox1_Change()
Set tabla = Range("a1").CurrentRegion
indice = ComboBox1.ListIndex + 1
If indice = 0 Then MsgBox ("selecciona un filtro"), vbCritical, "AVISO": GoTo sal
If indice = 1 Then busca = Val(TextBox1.Text)
If indice = 2 Then busca = "*" & TextBox1.Text & "*"
    With tabla
        .AutoFilter
        .AutoFilter field:=indice, Criteria1:=busca
        cuenta = WorksheetFunction.Subtotal(102, tabla.Columns(1))
        If cuenta = 0 Then GoTo sal
        ReDim matriz(cuenta, .Columns.Count)
        x = 1
       For i = 2 To .Rows.Count - 1
            If Rows(i).Rows.Hidden = False Then
                matriz(x, 1) = .Cells(i, 1)
                matriz(x, 2) = .Cells(i, 2)
                matriz(x, 3) = .Cells(i, 3)
                x = x + 1
            End If
       Next i
    End With
With ListBox1
        .Clear
        .List = matriz
    End With
sal:
Set tabla = Nothing
End Sub
Private Sub UserForm_Initialize()
cargar_datos
End Sub
Sub cargar_datos()
With Range("a1").CurrentRegion
    Filas = .Rows.Count - 1
    col = .Columns.Count
    matriz = .Rows(2).Resize(Filas, col)
    titulos = .Rows(1)
End With
With ListBox1
    .List = matriz
    .ColumnCount = col
    .ColumnWidths = "60;200;40"
End With
With ComboBox1
    .List = Application.Transpose(titulos)
End With
End Sub

Te puedo pasar mi archivo James para que puedas validar que estoy haciendo mal, lo que quiero es buscar por nombre del funcionario y capturarlo con doble click o con un botón de comando, y cuando encuentre la coincidencias de todos los apellidos Acosta o los que tenga nombre comunes, darle doble click y capturarlo y llevarlo a la celda b3 de la hoja consulta, si me podrías ayudar por favor, porque no consigo lograrlo este es el link https://mega.nz/#!ZEQkgaoZ!Gqfea1xJXvEuiaE5ZgozeH-azGu4L0zsWo81RLEx2MI

Cambia esta línea

Me. Pantallafuncionarios. List(pantallafuncionarios. ListIndex, 2)

por esta

CAPTURAFUNCIONARIO = Me.PANTALLAFUNCIONARIOS.List(PANTALLAFUNCIONARIOS.ListIndex, 1)

la instruccion tal como la tienes hace referencia a una columna donde no tienes nada

Que genio sos, muchísimas gracias, aprovechando como puedo hacer tal cual la primera imagen que pasaste tenia un combobox donde podes buscar según el rotulo de columna, sea nombre, numero de cedula, o cualquier otro criterio, vi que también esta muy bueno, si me podrías guiar,

Saludos

Solo necesitas hacer un formulario tal como esta en la imagen que puse, copiar el código y hacer pruebas con el, el código funciona así hace una carga rápida de los datos en el listbox y los encabezados en el combobox en ambas cargas se usan arrays ya que estos aumentan la velocidad de la macro, una vez que seleccionas del combobox el filtro que vas a usar este por medio de IF selecciona la columna por la que se va a filtrar y mediante autofiltros que igual usa array se van mostrando las coincidencias en el listbox ojo solo están programadas las primeras dos columnas cedula y nombre puedes agregar tantos IF como necesites

Respuesta
1

Puede compartir una copia de su archivo con datos ficticios para poder ayudarle

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas