Mostrar datos de dos hojas en listbox (vba excel)

Tengo un form, desde donde selecciono un No de Pedido mediante un combobox. Y me trae toda la info desde la hoja salidas (hoja5).

Pero quisiera añadir la ubicación que tengo en mi hoja Artículos (hoja3).

Mediante estas líneas de código he conseguido algo, pero no esta completo. Solo me trae la ubicación del ultimo articulo con ese nº de pedido seleccionado. Y necesito que me traiga todas las ubicaciones de todos los artículos con el mimo nº de pedido seleccionado.

items2 = Hoja5.Range("tbl_SALIDAS").CurrentRegion.Rows.Count
            For j = 2 To items
                If Hoja5.Cells(j, 4).Value Like Me.cbx_pedido.Text Then
                    Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Hoja3.Cells(j, 3)
                End If
            Next j

2 respuestas

Respuesta
1

Perdón, la ubicación que me trae es la de la fila 2 columna C, la primera de mi listado de artículos.

Respuesta
1

[Hola 

Pon imágenes de tus datos como ejemplo y el resultado deseado

¡Gracias!

Vale, ahí tiene la info que me pide.

Como ve, selecciono en el form el nº de pedido. Y me trae toda la info de la hoja SALIDAS.

+

Necesito, que en el form me coloque la ubicación que haya en la hoja artículos en el correspondiente articulo.

Coloco el código que tengo en el combobox y con el cual me trae toda la info de la hoja salidas:

Private Sub cbx_pedido_Change()
Dim Fila As Long
Dim Final As Long
Me.cbx_pedido.BackColor = &H80000005
'Limpio los controles cuando borro el contenido del ComboBox
If cbx_pedido.Value = "" Then
Me.lb_fecha.Caption = ""
Me.lb_salida.Caption = ""
Me.lb_pedido.Caption = ""
ListBox1.Clear
End If
    'Determino el final del listado de la hoja de salidas
Final = GetUltimoR(Hoja5)
    For Fila = 2 To Final
        If Val(cbx_pedido) = Hoja5.Cells(Fila, 4) Then
                Me.lb_cli_nombre = Hoja5.Cells(Fila, 19)
            Exit For
        End If
    Next
'Mostrar info pedido
Me.ListBox1.Clear
    items = Hoja5.Range("tbl_SALIDAS").CurrentRegion.Rows.Count
        For i = 2 To items
            If Hoja5.Cells(i, 4).Value Like Me.cbx_pedido.Text Then
                Me.lb_fecha.Caption = Hoja5.Cells(i, 2)
                Me.lb_salida.Caption = Hoja5.Cells(i, 1)
                Me.lb_pedido.Caption = Hoja5.Cells(i, 4)
                Me.ListBox1.AddItem Hoja5.Cells(i, 20)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Hoja5.Cells(i, 21)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Hoja5.Cells(i, 22)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Hoja5.Cells(i, 24)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Hoja5.Cells(i, 25)
                Me.txt_total.Value = Hoja5.Cells(i, 26)
                Me.txt_total = Format(txt_total, "currency")
            End If
        Next i
'======================================================================
'CON ESTAS LINEAS DE CODIGO PENSÉ QUE FUNCIONARIA, PERO SOLO
' ME TRAE LA 1ª UBICACION DE LA COLUMNA C DE MI HOJA ARTICULOS      
'======================================================================  
'''''''        items2 = Hoja3.Range("tbl_ARTICULOS").CurrentRegion.Rows.Count
'''''''            For j = 2 To items2
'''''''                If Hoja5.Cells(j, 4).Value Like Me.cbx_pedido.Text Then
'''''''                    Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Hoja3.Cells(j, 3)
'''''''                End If
'''''''            Next j
'====================================================================================
    For Fila = 2 To Final
            If lb_cli_nombre = Hoja6.Cells(Fila, 2) Then
                lb_cli_cod.Caption = Hoja6.Cells(Fila, 1)
                lb_cli_nombre.Caption = Hoja6.Cells(Fila, 2)
                lb_cli_direccion.Caption = Hoja6.Cells(Fila, 3)
                lb_cli_poblacion.Caption = Hoja6.Cells(Fila, 4)
                lb_cli_cp.Caption = Hoja6.Cells(Fila, 5)
                lb_cli_provincia.Caption = Hoja6.Cells(Fila, 6)
                lb_cli_telf1.Caption = Hoja6.Cells(Fila, 7)
                lb_cli_telf2.Caption = Hoja6.Cells(Fila, 8)
                lb_cli_correo.Caption = Hoja6.Cells(Fila, 9)
                lb_cli_www.Caption = Hoja6.Cells(Fila, 10)
                lb_cli_contacto.Caption = Hoja6.Cells(Fila, 11)
            Exit For
        End If
    Next
End Sub
Private Sub cbx_pedido_Enter()
Dim Fila As Long
Dim Final As Long
Dim Lista As String
Dim Registro As Integer
'Rutina para agregar el listado de números de pedido al ComboBox
For Fila = 1 To cbx_pedido.ListCount
    cbx_pedido.RemoveItem 0
Next Fila
    'Determino el final del listado de la hoja de salidas
Final = GetUltimoR(Hoja5)
    'Agrego todos los números de pedido al ComboBox desde la hoja de salidas
    'Sólo operaciónes de pedido
    For Fila = 2 To Final
        If Hoja5.Cells(Fila, 3) = "PEDIDO" Then
        Registro = WorksheetFunction.CountIf(Hoja5.Range(Hoja5.Cells(2, 4), Hoja5.Cells(Fila, 4)), Hoja5.Cells(Fila, 4))
            Lista = Hoja5.Cells(Fila, 4)
        If Registro = 1 Then
            cbx_pedido.AddItem (Lista)
        End If
        End If
    Next
End Sub

Si necesita mas info, digame, y si quiere le puedo subir el archivo.

MUCHAS GRACIAS!

Sube el archivo

Va la macro actualizada espero tus comentarios


cambia la macro del evento cbx_pedido_Change()

Private Sub cbx_pedido_Change()
Dim Fila As Long
Dim Final As Long
Me.cbx_pedido.BackColor = &H80000005
'Limpio los controles cuando borro el contenido del ComboBox
If cbx_pedido.Value = "" Then
Me.lb_fecha.Caption = ""
Me.lb_salida.Caption = ""
Me.lb_pedido.Caption = ""
ListBox1.Clear
End If
    'Determino el final del listado de la hoja de entradas
Final = GetUltimoR(Hoja4)
    For Fila = 2 To Final
        If Val(cbx_pedido) = Hoja4.Cells(Fila, 4) Then
                Me.lb_cli_nombre = Hoja4.Cells(Fila, 16)
            Exit For
        End If
    Next
'Mostrar ENTRADAS
Me.ListBox1.Clear
    Set h1 = Sheets("SALIDAS")
    Set h2 = Sheets("ARTICULOS")
    '
    For i = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
        dato = h2.Cells(i, "A")
        '
        Set r = h1.Columns("Q")
        Set b = r.Find(dato, lookat:=xlWhole)
        If Not b Is Nothing Then
            If h1.Cells(b.Row, "D") = Val(cbx_pedido) Then
                ListBox1.AddItem h1.Cells(b.Row, 2)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = h1.Cells(b.Row, 18)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = h2.Cells(i, 3)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = h1.Cells(b.Row, 19)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = FormatNumber(h1.Cells(b.Row, 21), 2)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = h1.Cells(b.Row, 22)
        End If
        End If
    Next i
End Sub

¡Gracias!

Funciona perfecto.

Le tuve que agregar unas cuantas líneas de código, que me faltaban para rellenar todo el form, pero de pm!

GRACIAS!

P.D. Tengo algunas dudas más para avanzar en mi proyecto.

Las iré haciendo, haber si pueden ayudarme.

GRACIAS!

Aquí hice otra pregunta hace unos días:

Puedes echarle un ojo, ¿por favor?

Mostrar parte de hoja entradas en listbox (vba excel)

Crea una nueva pregunta y explica con detalles con imágenes lo que necesitas

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas