Cargar datos a un combobox sin que se repitan y que me de un valor en un textbox

Espero puedan ayudarme ya que no se mucho, les explicare un poco como tengo mi libro de excel, este tiene varias hojas, en una de las hojas tengo mi base de datos completa la cual tiene las siguientes columnas: producto, mes, año, ventas totales (los mismos productos se repiten varias veces). Lo que necesito es que desde un user form pueda colocar un combobox, el cual me muestre los nombres de los productos (sólo una vez, sin repetir) y que por ejemplo en un textbox de enero me de la suma total de todas las ventas del producto en el mes de enero, en el textbox de febrero me de la suma total de la ventas de febrero y así sucesivamente.

1 Respuesta

Respuesta
1

Te anexo el código para cargar los datos únicos en el combo:

Private Sub UserForm_Activate()
'Por.Dante Amor
    Set h1 = Sheets("base de datos")
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        agregar ComboBox1, h1.Cells(i, "A")
    Next
End Sub
Sub agregar(combo As ComboBox, dato As String)
'Por.Dante Amor
    For i = 0 To combo.ListCount - 1
        Select Case StrComp(combo.List(i), dato, vbTextCompare)
            Case 0: Exit Sub 'ya existe en el combo y ya no lo agrega
            Case 1: combo.AddItem dato, i: Exit Sub 'Es menor, lo agrega antes del comparado
        End Select
    Next
    combo.AddItem dato 'Es mayor lo agrega al final
End Sub

Y el siguiente código es para llenar los textbox

Private Sub ComboBox1_Change()
'Por.Dante Amor
    Set h1 = Sheets("base de datos")
    Set r = h1.Columns("A")
    Set b = r.Find(ComboBox1, lookat:=xlWhole)
    If Not b Is Nothing Then
        ncell = b.Address
        Do
            Select Case h1.Cells(b.Row, "B")
                Case 1: TextBox1 = Val(TextBox1) + h1.Cells(b.Row, "D")
                Case 2: TextBox2 = Val(TextBox2) + h1.Cells(b.Row, "D")
                Case 3: TextBox3 = Val(TextBox3) + h1.Cells(b.Row, "D")
                Case 4: TextBox4 = Val(TextBox4) + h1.Cells(b.Row, "D")
                Case 5: TextBox5 = Val(TextBox5) + h1.Cells(b.Row, "D")
                Case 6: TextBox6 = Val(TextBox6) + h1.Cells(b.Row, "D")
                Case 7: TextBox7 = Val(TextBox7) + h1.Cells(b.Row, "D")
                Case 8: TextBox8 = Val(TextBox8) + h1.Cells(b.Row, "D")
                Case 9: TextBox9 = Val(TextBox9) + h1.Cells(b.Row, "D")
                Case 10: TextBox10 = Val(TextBox10) + h1.Cells(b.Row, "D")
                Case 11: TextBox11 = Val(TextBox11) + h1.Cells(b.Row, "D")
                Case 12: TextBox12 = Val(TextBox12) + h1.Cells(b.Row, "D")
            End Select
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> ncell
    End If
End Sub

Estoy asumiendo varias cosas que no comentaste que deberás ajustar en la macro:

- El nombre de la hoja de tu base de datos, le puse "base de datos", busca este nombre en la macro y cámbialo.

- En la columna A el producto, en la B el mes, en la C el año y en la D el valor.

- Que tienes como mes los números del 1 al 12.

- Que tu combo es el combobox1

- Que los textbox para los meses van del texbox1 al textbox12.


Si tienes dudas para actualizar los datos avísame.

Saludos. Dante Amor

Si es lo que necesitas.

Gracias, si me funciono, solo tengo una duda, al momento que me carga los valores totales en cada textbox, estos difieren como en 1000 contra el total de los valores reales en la base de datos excel, como puedo corregir eso?

Los productos son valores o textos.

Limpia los textbox antes de empezar la búsqueda

Revisa que los totales que tengas sean valores y no texto

Disculpa otra pregunta, si quiero colocar otro combobox que me deje escoger la región donde se vendió el producto, como programo mi textbox para que al escoger una región me tire el total por mes solo de la región y no el total general, te agradecería mucho :)

Con gusto te sigo apoyando, puedes crear una nueva pregunta, en el texto de la pregunta escribe que va dirigida a Dante Amor.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas