Activar la fila del Registro Seleccionado, al hacer click, después de un Filtro en TextBox

Rengo una planilla, con columnas útiles, desde la A hasta la R y filas que superan las 1000.

Mediante esta macro:

Set Rango = Range("M1", Range("M1").End(xlDown))
Rango.AdvancedFilter 2, , Range("IV1"), Unique:=True
Range("IV1").Sort Range("IV1"), xlAscending, Header:=xlYes
With Me.ComboBox1
        .Clear
        .List = Range("IV1", Range("IV1").End(xlDown)).Value
        .RemoveItem (0)
End With
Range("IV:IV").EntireColumn.SpecialCells(xlCellTypeConstants).ClearContents
Set Rango = Nothing

Cargo los varlores únicos al ComBoBox para realizar los filtros por esos valores únicos.

Una vez obtengo los registros que corresponden al elemento seleccionado en el combobox, al hacer click en unos de esos elementos obtenidos en el ListBox, necesito activar la celda y/o la fila donde esta almacenado el registro y posteriormente cargar la información contenida desde la Celda AX hasta RX en un Formulario que eta compuesto por TextBox y ComboBox para realizar la edición de la información contenida en el mismo.

1 respuesta

Respuesta
2

Para conocer la fila de un registro filtrado, debemos cargar el número de fila también en el listbox.

Te anexo la macro

Private Sub ComboBox1_Change()
'Por.Dante Amor
    u = Range("M" & Rows.Count).End(xlUp).Row
    ListBox1.RowSource = ""
    Columns("S").Clear
    Columns("IV:JP").Clear
    Range("S1") = 1
    If u > 1 Then Range("S2") = 2
    If u > 2 Then Range("S1:S2").AutoFill Destination:=Range("S1:S" & u)
    Set rango = Range("A1:S" & u)
    [IV1] = [M1]
    [IV2] = ComboBox1
    rango.AdvancedFilter 2, Range("IV1:IV2"), Range("IX1"), False
    Columns("IV").Clear
    ListBox1.ColumnCount = 18
    ListBox1.RowSource = "IX1:JP" & Range("JJ" & Rows.Count).End(xlUp).Row
End Sub

Después de cargar los valores únicos en el combobox, si seleccionas un registro del combobox, supongo que quieres cargar en el listbox todos los registros que corresponden al dato que seleccionaste en el combo.

Lo que hace la macro es numerar la columna "S" con un consecutivo desde la fila 1 y hasta el último de tus datos.

Después filtra toda la información del rango A:S y lo copia en el rango IX, pero esta información filtrada ya contiene el número de fila.

Lo que sigue es cargar en el listbox la información de IX:JP. Tu información es de 18 columnas (A:S), por eso el listbox. Columncount = 18, pero en el rowsource estamos cargando 19 columnas, pero lo dejamos hasta 18, para que no se vea la columna con la numeración.

Por último, para saber cuál es la fila que seleccionas en el listbox, puedes poner lo siguiente

Private Sub ListBox1_Click()
'Por.Dante Amor
    If ListBox1.ListIndex > -1 Then
        fila = ListBox1.List(ListBox1.ListIndex, 18)
        Range("M" & fila).Select
    End If
End Sub

Gracias Dante por tu pronta respuesta.

Veo que no tuve la fortuna de hacerme entender.

Te cuento que eso del filtro de los valores únicos, ya lo hago sin problema.

Mi problema radica es a partir de que ya tengo el resultado de lo filtrado por el combobox. Ya obtenidos los datos en el ListBox, ahora necesito es mediante el Click en uno de los elementos del ListBox, ACTIVAR la fila donde están contenidos esos datos y posteriormente ( o de una vez), se carguen en un Formulario compuesto por TextBox y ComboBox.

Eso es todo lo que necesito que haga.

Te agradezco el interés por ayudarme.

Quedo atento a cualquier otra observación.

Por otra parte, este error me sale cuando intento seleccionar un elemento de los ya obtenidos en el ListBox (ya estando filtros), en este paso es donde requiero que los datos almacenados en las celdas del respectivo registro, se carguen en el Formulario.

Más bien yo no me hice entender.

Voy desde el principio, si cargas los datos filtrados en un listbox, ya no puedes saber en qué fila se encontraba en excel. Suponiendo el siguiente ejemplo:

            A               B

1     Título          Valor

2     Dato1           100

3     Dato2           101

4     Dato1           200

5     Dato2           150

1.- En el combo cargas Dato1 y Dato2, ¿correcto?

2.- Si seleccionas en el combo Dato1

3.- En el listbox cargas :

Dato1 100

Dato1 200

4.- Si seleccionas en el listbox el Dato1 que tiene el valor 200, quieres que la macro seleccione la fila 4, ¿correcto?

Lo que te estoy proponiendo, es que carguemos el listbox de esta forma

Dato1 100 2

Dato1 200 4

¿Me explico?, en una columna del listbox estamos metiendo el número de fila, así cuando seleccionas el Dato1 con el valor 200, podemos saber que su número de fila es la 4.


Si esta forma no te convence. La otra forma es tomar un dato del listbox, pero este dato deberá ser único, es decir, no debe haber 2 ó más filas con el mismo dato; y buscar ese dato en la hoja, al momento de encontrarlo ya tenemos la fila.


Si quieres puedo adaptar el código a tu archivo, lo revisas y me dices si te gusta.

Listo Dante, te acabé de enviar el Archivo a tu correo.

Estaré atento, por si requieres alguna explicación.

De todas formas, el formulario Que tiene el combobox, es el del filtro y el otro formulario es el que debe ser llamado una vez se seleccione un elemento en el ListBox para poder editar la informaciòn.

Muchas gracias nuevamente por tu valioso apoyo.

He cometido un error al escribir "Activar la fila del Registro Seleccionado, al hacer click, después de un Filtro en TextBox", cuando en realidad quería escribir: "Activar la fila del Registro Seleccionado, al hacer click sobre un elemento de un ListBox, después de haber sido filtrado con un ComboBox.

Listo!, agregué los siguiente

Hola:
Agregué esta parte cuando cargas el listbox
.Column(7, ListBox1.ListCount - 1) = C.Row
Y cuado le das click al listbox, puse esto:
Private Sub ListBox1_Click()
'Por.Dante Amor
    fila = ListBox1.List(ListBox1.ListIndex, 7)
    Range("A" & fila).Select
    'frmModificar.Show
End Sub

Dante, muchísimas gracias!, eso era exactamente lo que necesitaba...! ¿Viste?, te lo dije, fui yo el que no se supo hacer entender. Pero tu, buen conocedor de pocas palabras, lo interpretaste muy bien!.

Muchísimas gracias..!

Dante, disculpa, una cosa más.

¿Qué puedo hacer para lograr que el contenido del listbox filtrado se actualice automáticamente al cerrar el FrmModificar?

Tienes que limpiar el listbox y volver a cargar

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas