Macro borra fila cada vez que se ejecuta

Tengo un problema con una macro que no consigo entender.

Cada vez que se ejecuta la macro va borrando la primera línea del conjunto de datos aunque cumple con la condición establecida, con lo que si le doy 5 veces al botón, me va "comiendo" 5 veces la primera fila.

Gracias de antemano.

Esta es la macro:

Sub ReordenarResultado()
'
' ReordenarResultado Macro
' Reordena el resultado por A-Z (Columna C)y borra lo que sobra (Criterio "-", Columna N)
'
'guardamos en variable la última fila ocupada de la hoja RESULTADO
finfila1 = Sheets("RESULTADO").Range("C65536").End(xlUp).Row
    Range("A11:N" & finfila1).Select
    Selection.AutoFilter Field:=14, Criteria1:="<>-", _
        Operator:=xlAnd
    Selection.EntireRow.Delete
    Range("A11:N" & finfila1).Select
    ActiveWorkbook.Worksheets("RESULTADO").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("RESULTADO").Sort.SortFields.Add Key:=Range( _
        "C11:C" & finfila1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("RESULTADO").Sort
        .SetRange Range("A11:N" & finfila1)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    ActiveCell.Offset(-8, 2).Select
End Sub

1 Respuesta

Respuesta
1

Según tu macro imaginé una tabla algo como en la imagen, donde al seleccionar a partir de la fila 11 estás incluyendo los títulos. Y luego al eliminar la selección pierdes esa fila.

Te dejo otras instrucciones para que las pruebes:

Sub PROBANDO()
'x Elsamatilde
finfila1 = Sheets("RESULTADO").Range("C65536").End(xlUp).Row
    Range("A11:N" & finfila1).Select
    Selection.AutoFilter Field:=3, Criteria1:="<>-", _
        Operator:=xlAnd
'se excluye la fila de títulos y se seleccionan solo las filas filtradas
    Range("A12:N" & finfila1).SpecialCells(xlCellTypeVisible).Select
    Selection.EntireRow.Delete
'quitar el modo de filtrado
    ActiveSheet.ShowAllData
End Sub

Antes del End Sub seguirás con el resto de tus instrucciones.

Hola Elsa, primero gracias por la rapidez.

Lo que yo hago no es un filtro, es reordenar una hoja y borrar todo lo que no necesito para poder seguir con el siguiente paso (viene de otra hoja donde se introdujeron datos en diferentes tablas.

Primero se queda así:

Le doy a mi botón para la macro y se queda asi:

Pero cuando le doy otra (o más) vez al botón, se "come" la línea 11.

Dándole dos veces se queda así:

Como ves, se ha "comido" dos veces lo que había en la línea 11 cuando el criterio de ordenar (el -) sigue estando. Y cada vez que le doy al botón, sigue haciéndolo.

Espero que con esto se explica mejor lo que intento hacer.

SI estás haciendo un filtro, con esta instrucción de tu macro:

Range("A11:N" & finfila1).Select
    Selection.AutoFilter Field:=14, Criteria1:="<>-", _
        Operator:=xlAnd

Y como luego le indicas que elimine ese rango te estás 'comiendo' la fila 11 xq se encuentra en la selección:

 Selection.EntireRow.Delete

Por lo tanto si solo necesitas filtrar la 1ra vez coloca un contador (una variable que indique que es la 1ra vez) o una instrucción que evalúe cierta condición... según tu imagen podría ser si H12 = "TOTAL PIEZAS" (o la col que sea)

Entonces el inicio de tu macro podría quedar así:

Sub ReordenarResultado()
'
' ReordenarResultado Macro
' Reordena el resultado por A-Z (Columna C)y borra lo que sobra (Criterio "-", Columna N)
'
'si es la 1ra vez tendrá este texto en H12 (verificar la col)
    If [H12] = "TOTAL PIEZAS" Then
        finfila1 = Sheets("RESULTADO").Range("C65536").End(xlUp).Row
        Range("A11:N" & finfila1).Select
        Selection.AutoFilter Field:=14, Criteria1:="<>-", _
                Operator:=xlAnd
            Selection.EntireRow.Delete
    End If
'a partir de aquí se ordena
'se vuelve a calcular el fin de rango porque se eliminaron filas 
finfila1 = Sheets("RESULTADO").Range("C65536").End(xlUp).Row
Range("A11:N" & finfila1).Select
    ActiveWorkbook. Worksheets("RESULTADO"). Sort. SortFields. Clear

Si te quedan dudas enviame tu hoja a mi correo (aparecen en mi sitio que dejo al pie... puede ser cibersoft. Arg de gmail)

Hola Elsa,

Hasta el viernes no vuelvo a estar en la ofi para poder mandártelo.

Y ya te escribiré más detallado el sentido de todo este lío que estoy montando.

La solución es tal como te envié en última respuesta, solo tenías que corregir la letra de la celda que tiene el texto a evaluar. No se observaba en tu imagen en que columna estaba el texo, por eso dejé el comentario.

'si es la 1ra vez tendrá este texto en L12 (verificar la col)
If [L12] = "TOTAL PIEZAS" Then

Te estoy devolviendo el libro con el arreglo.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas