Excel - Ordenar los resultados de un listbox por la fecha desde la mas reciente a la mas antigua

 
Vista:
Imágen de perfil de Jorge

Ordenar los resultados de un listbox por la fecha desde la mas reciente a la mas antigua

Publicado por Jorge (39 intervenciones) el 09/08/2021 16:08:11
Buenos días, tengo una pequeña traba, tengo un formulario donde ListBox2 me muestra todos los registros de mi base de datos al iniciar el formulario. Al ingresar una cédula registrada y presionar "intro" me muestra todos los registros que hayan en mi base de datos correspondientes a la cédula ingresada. Hasta ese momento todo perfecto, lo que quiero que suceda es que los registros referentes a la cédula ingresada me muestre los resultados en orden descendente de acuerdo a la fecha (desde la mas reciente a la mas antigua). Dejo aquí una imagen del formulario y el código que uso para que al momento de ingresar la cédula y presionar "intro" el ListBox2 me muestre los resultados correspondientes a la cédula.

Screenshot_1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
'
'Código para buscar y captar los datos del involucrado al presionar la tecla "INTRO" de acuerdo a la cédula
'
Private Sub cedula_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer): On Error Resume Next
Dim FILA As Long, DATAPAD As Long, i As Long
 
FILA = Hoja3.Range("A" & Rows.Count).End(xlUp).Row
DATAPAD = Hoja1.Range("A" & Rows.Count).End(xlUp).Row
 
    ListBox2.Clear
 
   If KeyCode = 13 Then
        'Función BUSCARV al VLookup:
        With WorksheetFunction
        siglas = .VLookup(Val(cedula), Hoja3.Range("A2:E" & FILA), 2, 0)
        involucrado = .VLookup(Val(cedula), Hoja3.Range("A2:E" & FILA), 3, 0)
        unidad = .VLookup(Val(cedula), Hoja3.Range("A2:E" & FILA), 4, 0)
        estatus = .VLookup(Val(cedula), Hoja3.Range("A2:H" & FILA), 5, 0)
 
        'Busca alguna coincidencia en DATAPAD que facilite el autollenado de datos
        graduacion = .VLookup(Val(cedula), Hoja1.Range("B2:H" & DATAPAD), 5, 0)
        instituto = .VLookup(Val(cedula), Hoja1.Range("B2:H" & DATAPAD), 6, 0)
        promocion = .VLookup(Val(cedula), Hoja1.Range("B2:H" & DATAPAD), 7, 0)
        foto.Picture = LoadPicture(.VLookup(Val(cedula), Hoja1.Range("B2:AI" & DATAPAD), 34, 0))
        End With
 
   'End If
 
    For i = 2 To DATAPAD + 1
        If UCase(Hoja1.Cells(i, 2)) Like "*" & UCase(cedula) & "*" Then
            With ListBox2
                    .AddItem
                    .List(.ListCount - 1, 0) = Hoja1.Cells(i, 1) 'ID
                    .List(.ListCount - 1, 1) = Hoja1.Cells(i, 18) 'Tipo de Informe
 
                    If Hoja1.Cells(i, 21) = "" Then
                    .List(.ListCount - 1, 2) = Hoja1.Cells(i, 19) & " " & Hoja1.Cells(i, 20) 'Número de Informe
                    Else
                    .List(.ListCount - 1, 2) = Hoja1.Cells(i, 21) 'Nro. Oficio (Breve o Nota Informativa)
                    End If
 
                    .List(.ListCount - 1, 3) = Hoja1.Cells(i, 24) 'Fecha de emisión por la cual tiene que ordenarse
                    .List(.ListCount - 1, 4) = Hoja1.Cells(i, 14) 'Causa
                    .List(.ListCount - 1, 5) = Hoja1.Cells(i, 34) 'Decision
            End With
        End If
    Next i
    End If
 
End Sub
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
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Ordenar los resultados de un listbox por la fecha desde la mas reciente a la mas antigua

Publicado por Antoni Masana (2477 intervenciones) el 09/08/2021 17:23:20
No se para que haces los .VLookup ni que resultado dan en el formulario pero me pregunto si has validado que va a existir en las dos hoja, hoja3 y hoja1, antes de llegar a este punto.

Al tema que viene la consulta: ordena la tabla de datos de la hoja1 por el campo que quieres ver ordenado el ListBox antes de cargar los datos. En este caso creo que es la columna 24.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jorge

Ordenar los resultados de un listbox por la fecha desde la mas reciente a la mas antigua

Publicado por Jorge (39 intervenciones) el 09/08/2021 17:36:35
La hoja3 contiene mas de 50mil nombres que es una data de personal, la hoja1 es donde se alojan los registros. De tal manera que al ingresar la cedula y no exista algun tipo de registro en la hoja1 referente a la cedula, el .VLookup que busca en la hoja3 me va a traer los datos principales de la persona a la que pertenece la cédula como lo es (las siglas que es referente al cargo, el apellido y nombre, la unidad que seria el departamento al cual esta adscrito y el estatus laboral referente si esta activo o inactivo). El .VLookup que busca en la hoja1 es para suministrarme datos para no volverlos a transcribir de la persona referente a la cedula, en tal caso que quiera hacer otro registro de la misma persona.
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
Imágen de perfil de Jorge

Ordenar los resultados de un listbox por la fecha desde la mas reciente a la mas antigua

Publicado por Jorge (39 intervenciones) el 09/08/2021 17:39:16
Referente a la respuesta es correcto, tiene que ordenarse en mi ListBox2 referente a la columna 24 que es la "Fecha de Emision" del informe y es lo que necesito aplicarle al código para complementarlo, en que manera se puede hacer para obtener el resultado de mayor a menor
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
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Ordenar los resultados de un listbox por la fecha desde la mas reciente a la mas antigua

Publicado por Antoni Masana (2477 intervenciones) el 09/08/2021 18:28:06
Tienes dos opciones, bueno quizás tres o más.

1º - Ordenar los datos de la hoja. Para saber código usas GRABAR MACRO y ordenas la hoja por el datos que deseas.
2º - Cargar previamente en un ARRAY, ordenar el ARRAY y pasarlo al listbox.
3º - Ordenar directamente el ListBox.

La más simple de programar es la opción 1 y la más rápida la opción 2. La tercera la descartaría en favor de la segunda.

Se me ocurre otra opción, mezcla entre la primera y la segunda:

1.- Creas una nueva hoja.
2.- Lees los datos de la hoja1 y los guardas en la hoja nueva. Solo los que tienen que ir al ListBox
3.- Ordenas los datos de la hoja nueva.
4.- Los pasa al ListBox
5.- Borrar la hoja nueva.

Saludos.
\\//_
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