Macro para ordenar si cumple la condición

Les paso a detallar el contenido de la Hoja1, para un mejor entendimiento.

A             B              C             D            E                  F                                 G

1      Cliente     Fecha     Corte    Operario      Estado                   Provincia

2         Perez     11/07/17     SI           Luis        Entregar                  Bs As  ---- ESTO SE PASO A FABRICA

3          Ortiz       12/08/17    SI           Franco    Colocar                   Cordoba  ---- ESTO SE PASO A FABRICA

4 Alvarez 13/08 /17 OK Pedro Retira el Cliente Santa Fe ---- ESTO YA ESTA LISTO

5 Alvarez 13/08 /17 NO Juan Retira el Cliente Bs As --- PENDIENTE

6         Alvarez   13/08 /17  NO         Dario       Retira el Cliente     Jujuy  --- PENDIENTE

------------- Mi macro en uso

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.ScreenUpdating = False
If Target.Column = 4 Then
With Range("A2:G2000")
.Sort Key1:=.Cells(1, 4, Order1:=xlDescending, Header:=xlYes  ----- Esta pasa para arriba los  SI / OK

'SOLO MODIFICAR ESTA LINEA
Range("A2:G4").Sort Key1:=Range("F3"), Order1:=xlAscending ----- Esta seria la que necesito modificar 
ThisWorkbook.RefreshAll
End With
End If
End Sub

Lo que me pasa es que cada vez que pongo en corte SI/OK cada pedido que pasa arriba, tengo que entrar en el editor de macros y modificar Range("A2:G4") y pasar a Range("A2:G5").

Me gustaría que la macro automáticamente busque la ultima fila con pedido SI/OK y los ordene por el estado (colocar, entregar, retira el cliente), ignorando las que estén en NO

Espero alguien pueda solucionarlo, en caso de que me puedan pasar un mail, les podría pasar la copia del libro

3

3 respuestas

Respuesta
2

Te anexo la macro actualizada

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 4 Then
        Application.ScreenUpdating = False
        With Range("A2:G" & ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row)
            .Sort Key1:=.Cells(1, 4), Order1:=xlDescending, Header:=xlYes
        End With
        '
        Set b = Columns("D").Find("SI", lookat:=xlWhole, SearchDirection:=xlPrevious)
        If Not b Is Nothing Then f1 = b.Row
        Set b = Columns("D").Find("OK", lookat:=xlWhole, SearchDirection:=xlPrevious)
        If Not b Is Nothing Then f2 = b.Row
        f = WorksheetFunction.Max(f1, f2)
        '
        Range("A2:G" & f).Sort Key1:=Range("F3"), Order1:=xlAscending
        ThisWorkbook.RefreshAll
    End If
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Respuesta
1

Cuando quieras que la macro inluya los cambios que haces en tu información como añadir renglones usa la propiedad .currentregion así conforme agregues rengloes estos se incluirán en automático, checa la macro con las modificaciones, debe funcionar, por cierto un ordenamiento doble no se hace así.

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.ScreenUpdating = False
If Target.Column = 4 Then
With Range("A2").CurrentRegion
.Sort Key1:=.Cells(1, 4), Order1:=xlDescending, Header:=xlYes

'SOLO MODIFIQUE ESTA LINEA

Range("A2").CurrentRegion.Sort Key1:=Range("f3"), Order1:=xlAscending, Header:=xlYes
ThisWorkbook.RefreshAll
End With
End If
End Sub

¡Gracias! En este caso no la puede adaptar a la línea que me agregaste, porque me lo desordena pero agradezco mucho el tiempo que te tomaste en tratar de ayudarme.

Respuesta
1

Esto a lo mejor aporta algo más

https://youtu.be/3LCDc_oxDGU

https://youtu.be/whjOEGPMe_g

https://youtu.be/VV2w5o_G0-4

https://youtu.be/fzn_sJx_COE

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas