lunes

Los 10 mejores

Hola
En una consulta alguien solicitaba lo siguiente: necesito mostrar las mejores n_ventas de una BD, pero un formulario y dentro de un listbox y a la vez que se ordenen segun yo lo requiera, en este caso hacerlo por edad

Pues adjunto lo que le llame los 5 mejores... es un formulario, que lo unico que debe hacer el usuario es indicarle de que forma desea ordenarlo y de cuantos desea que sean las mejores ventas

Revisen el archivo para mayor comprension de parte de ustedes

Codigo y una breve explicacion del mismo:
Private Sub TextBox2_Change()

'Declarar la variable uf
Dim uf

'Desactivar el como la macro trabaja
Application.ScreenUpdating = False

'Saltar cualquier error
On Error Resume Next

'Seleccionar la hoja para filtrar
With Sheets("Filtro")

'Mostrar cualquier fila escondida
Cells.Rows.Hidden = False

'Limpiar el listbox
ListBox1.RowSource = Empty

'Desactivar si el filtro esta modo activo y mostrar los registros
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If

'Marcar el rango desde A32 hasta donde existan datos (hacia la derecha y hacia abajo) _
o sea el rango usado, limpiar y quitar color de celdas
With Range("A32").CurrentRegion
.Clear
.Interior.ColorIndex = xlNone
End With

'Si el textbox es menor o igual a cero, que proceda...
If Me.TextBox2.Value <= 0 Then
MsgBox "Indique el Top porfavor... debe ser mayor a 0 {cero}"
Cells.Rows.Hidden = False
ListBox1.RowSource = Empty
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
With Range("A32").CurrentRegion
.Clear
.Interior.ColorIndex = xlNone
End With
'Limpiar el textbox y activar cursor en el mismo
Me.TextBox2 = ""
Me.TextBox2.SetFocus
Exit Sub
End If

'Si el textbox es diferente a campo vacio
If Me.TextBox2.Value <> "" Then
With Range("A1").CurrentRegion
'Filtrar por la columna C, segun el Top/Mejor numero
.AutoFilter 3, Me.TextBox2.Value, xlTop10Items
.Copy
'Pegar solo los datos visibles, desde A32
With .SpecialCells(xlCellTypeVisible)
Range("A32").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'Ordenar los datos pegados, segun el orden ingresado
With Range("A32").CurrentRegion
.Sort Range("C33"), Me.TextBox1.Value, Header:=xlGuess
End With
Range("A1").Select
End With
End With
End If

'Mostrar los datos en el listbox
ListBox1.RowSource = "A32:C100"

'Crear el siclo o bucle para ocultar las filas que se muestran en listbox (para estetica)
uf = Cells(65536, 1).End(xlUp).Row
For g = 32 To uf
If Cells(g, 1) <> "" Then Rows(g).Hidden = True
Next

End With

'Anular o desactivar cualquier error inniciado
On Error GoTo 0
'Activar la pantalla
Application.ScreenUpdating = True

End Sub

Private Sub CommandButton1_Click()
'Limpiar el formulario
Application.ScreenUpdating = False
ListBox1.RowSource = Empty
Cells.Rows.Hidden = False
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
With Range("A32").CurrentRegion
.Clear
.Interior.ColorIndex = xlNone
End With
Me.TextBox1 = ""
Me.TextBox2 = ""
Me.TextBox1.SetFocus
Exit Sub
Application.ScreenUpdating = True
End Sub

Private Sub UserForm_Activate()
'Al iniciar el fornulario, activar el cursor en el textbox
Me.TextBox1 = ""
Me.TextBox2 = ""
Me.TextBox1.SetFocus
End Sub

Private Sub TextBox1_Change()
'Si el numero para ordenar los datos es mayor a 2, que proceda...
If Me.TextBox1.Value > 2 And Me.TextBox1.Value <> "" Then
MsgBox "Ingrese solamente: el # 1 (orden ascendente) o # 2 (orden descendente)", , "Error de ingreso"
Me.TextBox1 = ""
Me.TextBox2 = ""
Me.TextBox1.SetFocus
Exit Sub
End If
End Sub


Saludos desde Honduras


No hay comentarios:

Publicar un comentario