Ordenar línea desde A a QUE según columna B

DAM

Vengo con esta, tu macro que funciona muy bien si la uso insertando datos manualmente en la hoja1 columna D.

Desde un formulario no me funciona bien. Abre el form, pisa el botón Nuevo, llenar con datos, pisar el botón Agregar y solo me ordena de A a D y no desde A hasta QUE como quisiera

Desde un formulario no me funciona bien. Abre el form, pisa el botón Nuevo, llenar con datos, pisar el botón Agregar y solo me ordena de A a D y no desde A hasta QUE como quisiera.

Mi intención es tener una o algunas líneas para integrarlas en una macro (Botón Agregar) para que me ordene tomando en cuenta la columna B.

Esta me podía servir si la monto en la propia hoja donde se insertan los datos o, montarla en un modulo y llamarla mediante un Call.

Desde un modulo me es más cómodo porque no repito la misma en 2 o 3 hojas y desde e lform la llamo con uin Call, ¿No te parece? O entonces un par de líneas para ordenar tal como te pido

Private Sub Worksheet_Change(ByVal Target As Range)'Por.Dante Amor    If Not Intersect(Target, Range("c:c")) Is Nothing Then 'escribe o entran datos en la C        c = "B" 'ordena por la B        u = Range(c & Rows.Count).End(xlUp).Row 'busca la ultima en B para ordenarla        With ActiveSheet.Sort         .SortFields.Clear: .SortFields.Add Key:=Range(c & "2:" & c & u) 'ordena la B         .SetRange Range("A1:K" & u): .Header = xlYes: .Apply 'ordena solo desde la A a k. Puede cambiar la longitud        End With    End IfEnd Sub

La Imagen  [IMG]http://i59.tinypic.com/10wtpjn.jpg

1 respuesta

Respuesta
1

La macro dice que ordena desde la "A" a la "K"

. SetRange Range("A1:K" & u)

¿Ya probaste cambiando en esa línea la "K" por la "Q"?

Lo que pasa es que al dejar la macro vi que me cambió la k por QUE.

Si, asi la tengo, le cambie A1:B por A1:K y el resultado al insertra DINA desde un formulario, es el de la imagen de abajo.

Ahora no entendí tu respuesta, puedes explicar esto:

"al insertra DINA"

En la hoja1 esta la descripción.

En el libo ejemplo oquet e envíe, tien en la hoja1 en B

25

10

29

8

27

¿Qué vas hacer?

Abre el formulario

Pisa el botón Nuevo

Rellena los cuadros que en el cuadro de edad colócale 20 XE.

en nom,bre colocale Donora Suarez o el que te plazca

Pisa el botón Agregar

Y verifica como te deja la ordenación de LAS LÍNEAS Tanto en B como las demás celdas en que los datos no corresponden al numero que estaba antes en B

En la hoja1 esta la descripción. y en la imagen de abajo está de como me deja el ordenamiento

En el libro ejemplo que te envíe, tiene en la hoja1 en columna B

25

10

29

8

27

¿Qué vas hacer?

Abre el formulario

Pisa el botón Nuevo

Rellena los cuadros y en el cuadro de edad colócale 20 XE.

en nombre colocale Dinora Suarez o el que te plazca

Pisa el botón Agregar

Verifica como te deja la ordenación de LAS LÍNEAS Tanto en B como las demás celdas en que los datos no corresponden al numero que estaba antes en B

Te dejare una imagen de como debe quedar

Ve tu que lo que antes correspondía a cada numero, al ordenar por la B estos números se llevaron sus datos que les corresponden el 20 tien todos sus datos tanto desde a a C, como de c a QUE, es decir desde A a QUE y los demás también.


En cambio si verificas como te deja al Agregar, no es nada parecido, tanto que deja desde c a QUE, la línea de Dinora Suarez (el 20) sin datos desde C a QUE y deja estos subescribiendo los de 29

La macro quedaría así

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Not Intersect(Target, Range("K:K")) Is Nothing Then 'escribe o entran datos en la C
        c = "B" 'ordena por la B
        u = Range(c & Rows.Count).End(xlUp).Row 'busca la ultima en B para ordenarla
        ActiveWorkbook.Worksheets("Hoja1").ListObjects("Tabla3").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Hoja1").ListObjects("Tabla3").Sort.SortFields.Add _
            Key:=Range("B2:B" & u), SortOn:=xlSortOnValues, Order:=xlAscending, _
            DataOption:=xlSortTextAsNumbers
        With ActiveWorkbook.Worksheets("Hoja1").ListObjects("Tabla3").Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        'With ActiveSheet.Sort
        ' .SortFields.Clear: .SortFields.Add Key:=Range(c & "2:" & c & u) 'ordena la B
        ' .SetRange Range("A1:K" & u): .Header = xlYes: .Apply 'ordena solo desde la A a k. Puede cambiar la longitud
        'End With
    End If
End Sub

Saludos.Dante Amor

No olvides valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas