Macro para eliminar filas si una de sus celdas son iguales a 0

Tengo una hoja llamada créditos, ahí están en una tabla todas las cuentas por cobrar, quiero que cuando la deuda (columna I) sea igual a 0, se borre esa fila. He intentado con varios macros y funcionan a medias, ya que solo funcionan si los pongo en un botón, pero quiero que se haga automático, el problema es que creo que me hace choque con otra macro que es la que procesa todos los datos a esa hoja. Entonces me parece que funcionaria si aplicara el macro en la hoja (créditos) con el evento tableupdate, pero no sabría como usarlo.

1 Respuesta

Respuesta
1

¿En la columna I tienes una fórmula?

Puedes poner aquí la fórmula para revisarla.

Si, tengo esta formula = SI([@CLIENTE]="";"";[@TOTAL]-[@ABONOS])

Y la macro con la que digo que puede hacer choque es la que procesa los datos de la hoja Cierre a la hoja créditos, cuando pongo ambas macros, no funciona correctamente la de procesar datos, a veces me da error o a veces simplemente no pone los datos

PD: de los datos que son procesados de la hoja cierre a la hoja créditos, claramente no se pone nada en la columna I, la columna I es dependiente de la columna total (en la que si se ponen parte de los datos que son procesados)

¿En la columna @TOTAL tienes fórmula?

¿En la columna @ABONOS tienes fórmula?

Puedes poner aquí las fórmulas.

En la columna abonos sí, esta =SI([@[N.
FACT]]<>"";SUMAR.SI(ABONOS!$B$3:$B$10000;[@[N.
FACT]];ABONOS!$D$3:$D$10000);"")

En la columna total no, ahí van unos de los datos que se procesan desde la hoja cierre

Podríamos poner un evento cuando se modifique un dato de la columna @Total, pero lo ideal sería tener 2 eventos, uno para la columna @Total y otro para las columnas B y D de la hoja ABONOS, esto si en B y D capturas valores, porque si también tienes fórmulas, entonces habrá que buscar el origen, es decir, debemos encontrar en dónde capturas valores los cuales generan un 0 en la columna "I".

Si, en la hoja abonos se capturan valores, no hay fórmulas

Pon el siguiente código en los eventos de la hoja "CREDITOS".

Cambia en esta línea la "C:C" por la letra de la columna donde tienes tu campo @TOTAL.

If Not Intersect(Target, Range("C:C")) Is Nothing Then

El código:

Private Sub Worksheet_Change(ByVal Target As Range)
  '
  'Código en los eventos de la hoja CREDITOS
  '
  On Error GoTo enEvents
  If Not Intersect(Target, Range("C:C")) Is Nothing Then
    If Target.CountLarge > 1 Then Exit Sub
    Application.EnableEvents = False
    If Range("I" & Target.Row).Value <> "" Then
      If Range("I" & Target.Row).Value = 0 Then
        Rows(Target.Row).Delete
      End If
    End If
    Application.EnableEvents = True
  End If
  '
enEvents:
  Application.EnableEvents = True
End Sub

Pon el siguiente código en los eventos de la hoja "ABONOS"

Private Sub Worksheet_Change(ByVal Target As Range)
  '
  'Código en los eventos de la hoja ABONOS
  '
  Dim rng As Range, c As Range
  Dim sh As Worksheet
  Dim lr As Long, i As Long
  '
  On Error GoTo enEvents
  Set sh = Sheets("CREDITOS")
  lr = sh.Range("I:I").Find("*", , xlValues, , xlByRows, xlPrevious).Row
  Set rng = Intersect(Target, Range("B:B, D:D"))
  If Not rng Is Nothing Then
    For Each c In rng
      Application.EnableEvents = False
      For i = lr To 2 Step -1
        If sh.Range("I" & i).Value <> "" Then
          If sh.Range("I" & i).Value = 0 Then
            sh.Rows(i).Delete
          End If
        End If
      Next
      Application.EnableEvents = True
    Next
  End If
  '
enEvents:
  Application.EnableEvents = True
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas