Control de stock en VBA, aparición de datos en el form

Estoy desarrollando un control de stock.

Actualmente estoy atascado,

(asi es como estan todos los datos)

Columna A grupo genérico, columna B especifico, columna C el producto y DE proveedor

El problema va cuando quiero condicionar la columna D (las otros 3 desplegables se condicionan bien pero este no)

Private Sub UserForm_Activate()
    Set h2 = Sheets("full2")
    For i = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
        Call agregar(generic, h2.Cells(i, "A"))
    Next
End Sub
Sub agregar(combo As ComboBox, dato As String)
    For i = 0 To combo.ListCount - 1
        Select Case StrComp(combo.List(i), dato, vbTextCompare)
            Case 0: Exit Sub
            Case 1: combo.AddItem dato, i: Exit Sub
        End Select
    Next
    combo.AddItem dato
End Sub
Private Sub generic_Change()
    especific.Clear
    especific2.Clear
    Set h2 = Sheets("full2")
    For i = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
        If h2.Cells(i, "A").Value = generic.Value Then
            Call agregar(especific, h2.Cells(i, "B"))
        End If
    Next
End Sub
Private Sub especific_Change()
    especific2.Clear
    Set h2 = Sheets("full2")
    For i = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
        If h2.Cells(i, "A").Value = generic.Value And _
           h2.Cells(i, "B").Value = especific.Value Then
            Call agregar(especific2, h2.Cells(i, "C"))
        End If
    Next
End Sub

Me faltaria que salieran los proveedores y los costes unitarios del producto

los nombres de los textbox son:

proveedores.value y preciounitario.value

Respuesta
1

Lo primero darte las gracias por esta forma tan elegante de rellenar combo boxes.

Dicho esto ahí va mi propuesta de solución, aunque tiene el incoventiente de que el número de proveedores es limitado.

Entiendo que en el formulario existen 4 text boxes para proveedores de nombre Proveedor1, Proveedor2, Proveedor3 y Proveedor4; y otros 4 para precios llamados Precio1, ..., Precio4.

Entiendo también que el precio está en la columna E

Entonces el código podría ser:

Sub ListarProveedores()
Dim MatrizTextBox(2, 4) 'Guardaré los valores en una matriz, una vez terminado el recorrido copiaré esos valores a los textboxes
Dim Fila, NumeroProveedor, Limpiando
'Empiezo iniciando la matriz a empty y limpiando los textboxes
Dim i, j
For i = 1 To 2
    For j = 1 To 4
        MatrizTextBox(i, j) = Empty
    Next
Next
Limpiando = True
GoTo CopiarTextboxes
'Luego empiezo el recorrido
InicioRecorrido:
Limpiando = False
Fila = 1
NumeroProveedor = 1
While Not Cells(Fila, "A").Value = ""
    Cells(Fila, "A").Select
    If (Cells(Fila, "A").Value = Generic.Value And Cells(Fila, "B").Value = Especific.Value And Cells(Fila, "C").Value = Especific2.Value) Then
        If Not (MatrizTextBox(1, NumeroProveedor) = Cells(Fila, "D").Value) Then
            If Not (MatrizTextBox(1, NumeroProveedor) = Empty) Then NumeroProveedor = NumeroProveedor + 1
                MatrizTextBox(1, NumeroProveedor) = Cells(Fila, "D").Value
                MatrizTextBox(2, NumeroProveedor) = Cells(Fila, "E").Value
        End If
    End If
    Fila = Fila + 1
Wend
'Llegados a este punto tenemos la lista de proveedores en la matriz, solo falta copiarla nuevamente a los textboxes
CopiarTextboxes:
Proveedor1.Value = MatrizTextBox(1, 1)
Proveedor2.Value = MatrizTextBox(1, 2)
Proveedor3.Value = MatrizTextBox(1, 3)
Proveedor4.Value = MatrizTextBox(1, 4)
Precio1.Value = MatrizTextBox(2, 1)
Precio2.Value = MatrizTextBox(2, 2)
Precio3.Value = MatrizTextBox(2, 3)
Precio4.Value = MatrizTextBox(2, 4)
If Limpiando Then GoTo InicioRecorrido
End Sub

Por cierto Pol, serías tan amable de explicarme como haces para que te aparezca el código vba así con sus colores y tal.

He abierto una pregunta sobre el tema: Código VBA con formato al responder en todoexpertos

He usado una captura de pantalla de tu código.

Vaya.. que bruto soy.. recién me doy cuenta que ya lo estaba haciendo bien.

Sub Es_lo_que_tiene_la_ignorancia()
msgbox("De todas formas gracias" & vbnewline & "Y suerte con tu macro")
end sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas