Como hago para buscar dentro de un mismo filtro sin que reinicia los datos.

Ojala me puedan ayudar tengo un código que me ayudo el experto ANDY MACHIN, se trata de un formulario de diagnósticos, la cual mediante un combobox al seleccionar por ejemplo el diagnostico DENGUE me trae los registros pero que son POSITIVOS nomas, ahora quiero que de ese mismo filtro pueda buscar por FICHA Y NOMBRE si que se reinicie todos los datos solo que busque dentro de los positivos ya filtrados por el combobox.

Este es el funcionamiento del Formulario en tiempo de ejecución.

y este es el código que me ayudo el experto ANDY MACHIN.

Sub filterByPositivos()
Dim pacientes As Worksheet: Set pacientes = Sheets("Paciente")
Dim uF As Integer
Dim diagnostico As String, condicion As String
uF = pacientes.Range("A" & Rows.Count).End(xlUp).Row
If Trim(UserForm1.CboDiagnostico.Value) = "" Then
     UserForm1.ListBox1.RowSource = Clear
   Exit Sub
End If
AutoFilterMode = False
UserForm1.ListBox1 = Clear
UserForm1.ListBox1.RowSource = Clear
For i = 5 To uF
    diagnostico = pacientes.Cells(i, 4).Value
    condicion = pacientes.Cells(i, 5).Value
    If UCase(diagnostico) Like UCase(UserForm1.CboDiagnostico.Value) & "*" And UCase(condicion) Like "POSITIVO" Then
        UserForm1. ListBox1. AddItem pacientes.Cells(i, 1).Text
        UserForm1. ListBox1. List(UserForm1. ListBox1.ListCount - 1, 1) = pacientes.Cells(i, 2).Text
        UserForm1. ListBox1. List(UserForm1. ListBox1.ListCount - 1, 2) = pacientes.Cells(i, 3).Text
        UserForm1. ListBox1. List(UserForm1. ListBox1.ListCount - 1, 3) = pacientes.Cells(i, 4).Text
        UserForm1. ListBox1. List(UserForm1. ListBox1.ListCount - 1, 4) = pacientes.Cells(i, 5).Text
    End If
Next i
End Sub

1 Respuesta

Respuesta
2

Brenda, pon este código 3 veces en el mismo modulo pero con nombre diferente:

Sub FiltrarNombre()
Dim pacientes As Worksheet: Set pacientes = Sheets("Paciente")
Dim uF As Integer
Dim diagnostico As String, condicion As String, ficha As String, nombre As String
uF = pacientes.Range("A" & Rows.Count).End(xlUp).Row
If Trim(UserForm1.CboDiagnostico.Value) = "" Then
     UserForm1.ListBox1.RowSource = Clear
   Exit Sub
End If
AutoFilterMode = False
UserForm1.ListBox1 = Clear
UserForm1.ListBox1.RowSource = Clear
For i = 5 To uF
    nombre = pacientes.Cells(i, 1).Value
    ficha = pacientes.Cells(i, 2).Value
    diagnostico = pacientes.Cells(i, 4).Value
    condicion = pacientes.Cells(i, 5).Value
    If UCase(nombre) Like UCase(UserForm1.txtNombre.Value) & "*" And UCase(ficha) Like UCase(UserForm1.txtFicha.Value) & "*" And UCase(diagnostico) Like UCase(UserForm1.CboDiagnostico.Value) & "*" And UCase(condicion) Like "POSITIVO" Then
        UserForm1. ListBox1. AddItem pacientes.Cells(i, 1).Text
        UserForm1. ListBox1. List(UserForm1. ListBox1.ListCount - 1, 1) = pacientes.Cells(i, 2).Text
        UserForm1. ListBox1. List(UserForm1. ListBox1.ListCount - 1, 2) = pacientes.Cells(i, 3).Text
        UserForm1. ListBox1. List(UserForm1. ListBox1.ListCount - 1, 3) = pacientes.Cells(i, 4).Text
        UserForm1. ListBox1. List(UserForm1. ListBox1.ListCount - 1, 4) = pacientes.Cells(i, 5).Text
    End If
Next i
End Sub

Si te fijas la macro se llama Sub FiltrarNombre()

Copiala 2 veces mas con dos nombres diferentes, FiltrarFicha y FiltrarDiagnostico

Luego debes llamar cada una en el TextBox o ComboBox correspondiente (en el evento Change).

en el texbox del nombre pones Call FiltrarNombre

en el textbox de la ficha pones Call FiltrarFicha

y en el combobox del diagnostico pones Call FiltrarDiagnostico.

---

Otra cosa, en la linea:

If UCase(nombre) Like UCase(UserForm1.txtNombre.Value) & "*" And UCase(ficha) Like UCase(UserForm1.txtFicha.Value) & "*" And UCase(diagnostico) Like UCase(UserForm1.CboDiagnostico.Value) & "*" And UCase(condicion) Like "POSITIVO" Then

Arregla los nombres de los Textbox, puse cualquier cosa, no se como se llaman

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas