Ordernar base de datos según criterios

Esta pregunta la realice el 08/04, pero se ve que dio error el sistema que no la veo por ningún lado... Vuelvo a preguntarte y muchísimas gracias por tu ayuda
Hola Tavo, de vuelta al ataque una vez solucionado el tema de la casilla de verificación.
Intentare explicar que necesito: estoy armando una base de datos en la cual va creciendo a medida que se carga datos. La base abarca por el momento las columnas (A hasta K) y las filas van creciendo a medida que se cargan datos (obvio).
La idea es ordenar esta lista por algún criterio que por ahora son columna "F": Item o columna "I": Proveedores mediante 2 botones o si se puede que aparezca un menu o formulario y ahí elegir la opción que necesite al momento.
El problema que tienen las macros grabadas que te mantienen las referencias al momento del grabado, y como esta base crece no me sirve... Necesito que la macro busque la primera fila que seria "A7" y la ultima a saber.
En la web vi un código pero no lo pude hacer andar que es este, esto esta en modulo 1
Option Explicit
Private celdaactiva
Private Sub OrdenarItem()
' Sub OrdenarItem()
'
' OrdenarItem Macro
' Macro grabada el 26/03/2008 por AObrist
'
Rem este código localiza el ultimo registro por medio del renglón
Range("a7").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Loop
Rem llega hasta el a26 donde no hay información y se regresa un renglón para ser exacto con la siguiente línea.
ActiveCell.Offset(-1, 0).Select
Rem este código localiza la última columna del último dato
Do While ActiveCell <> Empty
ActiveCell.Offset(0, 1).Select
Loop
ActiveCell.Offset(0, -1).Select
Rem esta línea guarda en la variable celdaactiva la celda exacta donde esta el ultimo dato de la ultima columna de información, en este caso M25.
celdaactiva = ActiveCell.Address
Rem este código toma el rango desde A7 donde empieza la información, hasta donde encontró el ultimo dato M25, que lo guarda la variable celdaactiva. Selecciona de A7 hasta M25.
Range("A7:" + celdaactiva).Select
Selection.Sort Key1:=Range("e7"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
Tavo en caso que quieras que te mande el archivo me lo indicas, yo estaría super agradecido si me das una mano con esto.
Desde ya agradezco tu tiempo y atención y paciencia, un abrazo y a la espera de tu comentario
Veto

1 respuesta

Respuesta
1
Revisa esta macro:
Sub OrdenaTabla()
   x = InputBox("Indique el modo del filtro, 1=Item, 2=Proveedor")
   If x = "1" Then
       s = "F1"
   Else
         If x = "2" Then
                s = "I1"
         Else
                MsgBox ("Ingrese una opción válida")
                GoTo fin
         End If
   End If
   Range("A1").Select
   Range(Selection, Selection.End(xlDown)).Select
   Range(Selection, Selection.End(xlToRight)).Select
   Selection.Sort Key1:=Range(s), Order1:=xlAscending, Header:=xlYes
   Range("A1").Select
fin:
End Sub

Si hay algo que no entiendas me lo haces saber. Es importante que reemplaces donde dice A1 por la primera celda de la tabla (primera a la izquierda). Si la tabla no inicia en la fila 1, debes cambiar también para que los valores de s="E1" y s="I1" se cambie por la fila donde inicia.
Hola Tavo.
Quise implementar la macro modifique tal cual me indicaste ya que la 1er celda de la tabla es A7, y lo mismo para F7 y I7.
Corro la macro y da error en Range(Selection, Selection. End(xlRight)). Select
la tabla a la cual quiero ordernar es de A hasta K, comenzando desde la fila 7, lo que no se sabe es cual es la ultima, esto espero yo lo haya explicado bien.
Para este caso cuando corre la macro se clava en deja pintada toda la columna A hasta el ultimo dato.
Así modifique lo que mandaste, quizás estoy haciendo algo mal.
Sub OrdenaTabla()
x = InputBox("Indique el modo del filtro, 1=Item, 2=Proveedor")
If x = "1" Then
s = "F7"
Else
If x = "2" Then
s = "I7"
Else
MsgBox ("Ingrese una opcion válida")
GoTo fin
End If
End If
Range("a7").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlRight)).Select
Selection.Sort key1:=Range(s), order1:=xlAscending, header:=xlYes
Range("a7").Select
fin:
End Sub
Desde ya agradezco tu valiosa ayuda.
Un abrazo, Veto
Entonces prueba así:
Sub OrdenaTabla()
x = InputBox("Indique el modo del filtro, 1=Item, 2=Proveedor")
If x = "1" Then
s = "F7"
Else
If x = "2" Then
s = "I7"
Else
MsgBox ("Ingrese una opcion válida")
GoTo fin
End If
End If
Range("A7").Select
Range("A7:K" & LTrim(Str(Selection.End(xlDown).Row))).Select
Selection.Sort key1:=Range(s), order1:=xlAscending, header:=xlYes
Range("A7").Select
fin:
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas