Para dante - Buscar datos con combobox

Estimado dante:

Gracias a tu ayuda pude simplificar mucho del trabajo que tenia.

Una ultima cosa. Tengo un formulario con dos combobox el primero con datos de sucursal y el otro con numero de documentos. El formulario también tiene un listbox.Necesito cargar datos al listbox en base a los de los combobox. Esto me servirá para revisar la información y corregirla en al listbox para que también se actualize en la hoja excel.

Desde ya muchísimas gracias

https://mega.co.nz/#!0M4EmBQZ!fwn_xumRAyKHmSz0K5-rFDlRZ39xYP8ahhWNa0n8J1Y 

1 respuesta

Respuesta
1

Me parece que te equivocaste de archivo, el que me enviaste solamente tiene un combo, además tu tabla sigue en la columna B, recuerda pasar la tabla la columna A

Mil disculpas me equivoque.

En ves de documento lo Cambie por periodo (mes). Si estos datos están en blanco que me muestre todo

Gracias

https://mega.co.nz/#!tRw0iZBB!iHGJEr9nG6n0LjcJ6DxHgSdOPLaMD5UQRMm0o74o7WE 

Tus valoraciones no están en "Excelente", ¿falta algo a las macros?

Perdona

Mil disculpa tus respuestas son perfectas. Pensé que estav valorando en excelente. Perdón no me fije bien los botones.

¿Puedo corregirlo?

Si quieres, al final de las respuestas, hay un botón que dice: "Cambiar" y te aparecen tres opciones "Excelente", "Si" y "No"

Ya corregí las valoraciones : )

Agradezco mucho tu ayuda.

¿

Podrías darme una mano con esta pregunta?

Gracias

Esta es la macro para la consulta

Sub filtrar()
'Por.Dante Amor
    Set h1 = Sheets("LVT")
    Set h2 = Sheets("tmp")
    Set h3 = Sheets("PERIODOS")
    Application.ScreenUpdating = False
    '
    If h1.FilterMode Then h1.ShowAllData
    h2.Range("A:S").Clear
    per = ""
    suc = IIf(ComboBox1 = "", "", Val(ComboBox1))
    If ComboBox2 <> "" Then
        If ComboBox2.ListIndex > -1 Then
            per = h3.Cells(ComboBox2.ListIndex + 1, "A")
        End If
    End If
    h2.Range("Y2") = suc
    h2.Range("Z2") = per
    u = h1.Range("A" & Rows.Count).End(xlUp).Row
    h1.Range("A1:R" & u).AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=h2.Range("Y1:Z2"), _
        CopyToRange:=h2.Range("A1"), Unique:=False
    '
    ListBox1.ColumnCount = 11
    ListBox1.ColumnHeads = False
    ListBox1.ColumnWidths = "60;60;60;60;60;60;60;60;60;60;60"
    If h2.Range("A2") <> "" Then _
    ListBox1.RowSource = "tmp!A2:S" & Sheets("tmp").Range("A" & Rows.Count).End(xlUp).Row
End Sub

Agregué una hoja "tmp" para hacer el filtro de los combos. Cada que cambies un dato en los combos se actualiza en automático el listobox, sin necesidad del botón "Consultar"

Te comparte el libro para que veas como quedaron los cambios en las macros

https://www.dropbox.com/s/gil7wu77772o1qu/prueba%20DAM.xlsm?dl=0 

Funciona bien el filtro.

Pero no me funciona el botón actualizar ni el de eliminar.

Necesito actualizar o eliminar registros en el listbox para que estos cambios también se hagan en la hoja de calculo.

¿Quieres modificar un registro tomado del listbox con la información filtrada?

¿Quieres borrar un registro tomado del listbox con la información filtrada?

Eso lo tenías que haber comentado desde el principio.

Te explico cómo está el funcionamiento:

Si tienes estos registros:

Por ejemplo, las filas para la sucursal 3 son la 3, la 7, la 8 y la 11.

Entonces, cuando cargas la información en el listbox, la fila 1 del listbox corresponde a la fila 3 de la hoja, la 5 con la 7, la 6 con la 8 y la 9 con la 11, si te das cuenta la fila del listbox es menor en 2 a la fila de la hoja, por eso teníamos esta instrucción

x = ListBox1.ListIndex + 2

Entonces si la fila seleccionada del listbox es la 1 y le sumo 2, ¿la fila de la hoja es la 3. Hasta este punto me explico?


Ahora si aplicas un filtro a la sucursal 3, los datos en el listbox quedan así:

Entonces, si seleccionas el último registro del listbox, la fila del listbox es la 3, si a 3 le sumas 2 es igual a 5, entonces la fila de la hoja para el primer registro en la hoja es la 5, y esto no es cierto, ya que la fila en la hoja para el último registro es la 11.

Una solución, ya que no tienes un identificador único por cada registros, es cargar el número de fila de la hoja en un campo del listbox.

Qué implica: Corregir la forma de cargar, Corregir la forma de actualizar y Corregir la forma de eliminar.

Podrías valorar esta respuesta por la macro entregada. Crea una nueva para corregir todo el código. Parece que tuve un deja vu, jaja. Lo bueno de esto es que ahora ya tienes la experiencia para este tipo de situaciones.

Empiezo a realizar los cambios y te los envío en la nueva pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas