Excel - Contenido ListBox1 buscar en Hoja y pasar a ListBox2

 
Vista:
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Contenido ListBox1 buscar en Hoja y pasar a ListBox2

Publicado por Juan (184 intervenciones) el 19/11/2022 03:19:05
Hola amigos y amigas.

En este archivo quiero una vez realizado el filtro de fecha entre dos rangos TextBox (Fech_InicioFact y Fech_FinalFact) al hacer Enter en el TextBox Fech_FinalFact el contenido de registros del ListBox Fact1 busque por Fecha Vencimiento y Cuenta (con dos criterios adicionales: sean “DF” y comité no sean “Vigente”) en la Hoja Cartola Cli, y todos los registros que encuentra traspasarlo a un ListBox Detalle_Deudor (Cuenta cliente, clase Doc, Referencia, Monto, Vencimiento y Texto), además de cantidad de registro en Label Total_Reg, Monto Total en Label Total_Importe, Cuenta en Label Cuenta_Cli y Razon Social en Label RazonSocial_Cli.

Para activar el formulario hay que hacer lo siguiente:
Seleccionar celda A4("Cuenta") de la hoja Resumen Cart-Cli para activar UserForm1. Después haciendo click en cualquiera de las celdas de Cuenta en la columna (“A5:A57”) cargar de registros al UserForm1(3 ListBox).


ListBox1-Hoja-ListBox2
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Contenido ListBox1 buscar en Hoja y pasar a ListBox2

Publicado por Juan (184 intervenciones) el 20/11/2022 07:51:54
Conseguí armar el código en un Command Button "Actualiza", pero la idea es que la carga del ListBox UserForm2.Detalle_Deudor se realice al hacer Enter en el TextBox UserForm1.Fech_FinalFact. Además hay un problema, es demasiado lento el llenado de registro del ListBox Detalle_Deudor.

Private Sub Actualizar_Click()
Dim CartolaCli As Worksheet
Set CartolaCli = Sheets("Cartola Cli")
Dim Filas, I, C, Total_Monto As Long
Filas = CartolaCli.Range("Q1000000").End(xlUp).Row
UserForm2.Show
With UserForm2.Detalle_Deudor
.Clear
UserForm2.Total_Reg.Caption = Empty
Total_Monto = 0
If UserForm1.Fact1.ListCount > 0 Then
For I = 0 To UserForm1.Fact1.ListCount - 1
If Filas > 1 Then
For C = 2 To Filas
If UCase(CartolaCli.Range("C" & C)) = "DF" And CartolaCli.Range("V" & C) <> "Vigente" _
And UserForm1.Cuenta.Caption = CartolaCli.Range("Q" & C) Then
If CDate(UserForm1.Fact1.List(I, 0)) = CartolaCli.Range("I" & C) _
And UserForm1.Fact1.List(I, 1) = Format(CartolaCli.Range("J" & C), "##,##0") Then
.AddItem
.List(.ListCount - 1, 0) = CartolaCli.Range("Q" & C)
.List(.ListCount - 1, 1) = CartolaCli.Range("C" & C)
.List(.ListCount - 1, 2) = CartolaCli.Range("D" & C)
.List(.ListCount - 1, 3) = Format(CartolaCli.Range("J" & C), "##,##0")
.List(.ListCount - 1, 4) = CartolaCli.Range("I" & C)
.List(.ListCount - 1, 5) = CartolaCli.Range("K" & C)
Total_Monto = Total_Monto + Format(CartolaCli.Range("J" & C), "##,##0")
UserForm2.Cuenta_Cli.Caption = UserForm1.Cuenta.Caption
UserForm2.RazonSocial_Cli.Caption = UserForm1.RazonSocial.Caption
Exit For
End If
End If

Next C
UserForm2.Total_Reg.Caption = .ListCount
UserForm2.Item_Reg = "Item"
UserForm2.Monto_Total.Text = Format(Total_Monto, "##,##0")
End If
Next I
End If
End With
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Contenido ListBox1 buscar en Hoja y pasar a ListBox2

Publicado por Juan (184 intervenciones) el 21/11/2022 19:42:02
Adapte el código de Matriz en vez de usar el .AddItem, y resulto más rápido el proceso. Para hacer la comparación deje ambos códigos en el UserForm1
Command Button “Actualizar”: Proceso con Matriz
Command Button “Salir”: Proceso con .AddItem

Solo me faltaría adaptar, cuando se aplique Enter en TextBox Fech_FinalFact se realice el proceso


Private Sub Actualizar_Click()
'Prueba Rapida (Array)
Dim CartolaCli As Worksheet
Dim NumeroCuenta As Long
Dim Fecha As Date
Dim Vencimiento As Date
Dim Filas, ConTador, C, J, N, I, Total_Monto, MontoFact, Monto As Long
Dim EleMentos As Variant
UserForm2.Show
Set CartolaCli = Sheets("Cartola Cli")
EleMentos = UserForm1.Fact1.ListCount 'Extrae la cantidad de elementos del listbox Fact1
Vencimiento = vbNull
Monto = vbNull
NumeroCuenta = UserForm1.Cuenta.Caption

With UserForm2.Detalle_Deudor
N = 0 'Variable para manejar la fila del vector vR
Filas = CartolaCli.Range("A" & Rows.Count).End(xlUp).Row 'Obtiene el valor de la ultima fila con datos

Dim Arr As Variant 'Vector que contendra los datos de la hoja gente
Arr = CartolaCli.Range("A2:W" & Filas).Value2
Dim Vr() As Variant 'Vector adimensional que se transformara en bidimensional para contener los datos de la busqueda y luego cargarlos en el listbox1

If EleMentos > 0 Then
For ConTador = 0 To EleMentos - 1
Vencimiento = Format(UserForm1.Fact1.List(ConTador, 0), "d/m/yyyy") 'Guarda en la variable vencimiento el valor de la fecha de vencimiento de una cuenta
Monto = Format(UserForm1.Fact1.List(ConTador, 1), "##,##0")
For I = LBound(Arr) To UBound(Arr) 'For, recorre el vector que contiene Datos de la Hoja Cartola Cli desde el registro inicial hasta el registro final
Fecha = Format(Arr(I, 9), "d/m/yyyy")
If Arr(I, 3) = "DF" And Fecha = Vencimiento And Arr(I, 17) = NumeroCuenta And _
Arr(I, 10) = Monto Then
N = N + 1
ReDim Preserve Vr(1 To 6, 1 To N)
For J = 1 To 6
If J = 1 Then
Vr(J, N) = Arr(I, 17) 'Cuenta
UserForm2.Cuenta_Cli.Caption = Arr(I, 17)
UserForm2.RazonSocial_Cli.Caption = Arr(I, 20)
Else
If J = 2 Then
Vr(J, N) = Arr(I, 3) 'Clase
Else
If J = 3 Then
Vr(J, N) = Arr(I, 4) 'Referencia
Else
If J = 4 Then
Vr(J, N) = Format(Arr(I, 10), "##,##0") 'Monto
MontoFact = MontoFact + Arr(I, 10) 'Monto
Else
If J = 5 Then
Vr(J, N) = Format(Arr(I, 9), "d/m/yyyy") 'Vencimiento
Else
Vr(J, N) = Arr(I, 11) 'Texto
End If
End If
End If
End If
End If
Next J
Exit For
End If
Next I
Next

' Chequeo de la primera parte del texto del combobox
If N = 0 Then
'Caso en que no se encontro ninguna coincidencia
Else
If N = 1 Then
'Caso en que se encontro una sola coincidencia
.Column = Vr
If .ListCount = 1 Then .Selected(0) = True
Else
'Caso en que se econtraron mas de una coincidencia
.List = WorksheetFunction.Transpose(Vr)
If .ListCount = 1 Then .Selected(0) = True
End If 'If del control n=1
End If 'If del control n=0
UserForm2.Total_Reg.Caption = .ListCount
UserForm2.Item_Reg.Caption = "Item"
UserForm2.Monto_Total.Text = Format(MontoFact, "##,##0")
End If 'If del control del vencimiento
End With
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar