Pasar datos de un ListBox a otro y sumar códigos repetidos

Necesito me ayudéis con lo siguiente:
En el adjunto tenemos userform1 y 2, en el userform 1 añado elementos al listbox con el CommandButton2, tengo además el CommandButton1 que

Me abre el userform 2, en este userform2 puedo igualmente añadir elementos al listbox2, pero además tengo un botón "Añadir a UserForm1"

Que coge los datos del userform 2 y los pasa al userform 1. Hasta aquí todo bien. El problema es que quiero que cuando añado estos datos,

Si en el userform1 existe ya ese código, en vez de añadir otra línea más, sume al código ya existente la cantidad que añado del userform

2.
Es decir, imaginemos que en el userform 1 tengo:
Código Nombre Cantidad
1 Ana Pérez 1
Y en el userform2 tengo:
Código Nombre Cantidad
1 Ana Pérez 1
3 Pedro Rodríguez 2
Al pulsar en este Userform2 al botón "Añadir a UserForm1", el resultado en el userform1 sería:
Código Nombre Cantidad
1 Ana Pérez 1
1 Ana Pérez 1
3 Pedro Rodríguez 2
Yo lo que quiero es que el resultado sea el siguiente:
Código Nombre Cantidad
1 Ana Pérez 2
3 Pedro Rodríguez 2
O sea, que el código 1, no lo duplique, sino que sume las cantidades y deje sólo una línea.

1 Respuesta

Respuesta
1

Checa esta macro, como puedes ver hay nombres repetidos en ambos listbox

y en esta imagen la macro retiro los duplicados y cargo nombres unicos en el listbox1

y esta es la macro, la carga de datos en ambos casos se realiza por un rowsource como no especificas como haces la carga en tus listbox puede presentar un error al entrar en conflicto con el additem

Private Sub CommandButton1_Click()
Application.DisplayAlerts = False
hoja = ActiveSheet.Name
atras:
On Error Resume Next
Set ht = Worksheets("temp")
If Err.Number > 0 Then
    Sheets.Add
    ActiveSheet.Name = "temp"
    GoTo atras
End If
On Error GoTo 0
matriz = ListBox1.List
filas = UBound(matriz)
col = ListBox1.ColumnCount
ht.Range("a1").Resize(filas, col) = matriz
matriz = UserForm1.ListBox1.List
filas = UBound(matriz)
col = ListBox1.ColumnCount
filas2 = ht.Range("a1").CurrentRegion.Rows.Count
ht.Range("a1").Rows(filas2 + 1).Resize(filas, col) = matriz
Set destino = ht.Range("a1").CurrentRegion
With destino
    filas = .Rows.Count
    Set tabla = .Columns(col + 3).Resize(filas, col)
    .Copy
End With
With tabla
    .PasteSpecial xlValues
    .RemoveDuplicates Columns:=1
    Set tabla = .CurrentRegion
    .Columns(col).Formula = "=countif(" & destino.Columns(2).Address & "," & .Cells(1, 2).Address(False, False) & ")"
    With UserForm1.ListBox1
        .RowSource = Empty
        .RowSource = "temp!" & tabla.Address
        .ColumnHeads = False
    End With
End With
Sheets("temp").Delete
Application.DisplayAlerts = True
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas