Macro en Excel que busque un número en otra hoja y Elimine las Fila que contengan dicho número

No soy experta en experta en Excel, por eso necesito ayuda con una macro. Tengo un sistema de Facturación y me solicitaron que creara un botón que elimine la última factura agregada a la base de datos. Necesito que cuando le dé a ese botón se eliminen de la hoja de Base de Datos las filas que contengan dicha factura. He intentado de muchas maneras pero no me funciona.

En mi sistema, el número de factura aumenta cuando se le da al botón guardar, o sea, cuando le vaya a dar al botón para eliminar la factura anterior necesito que le reste 1 al nro. De factura actual para que elimine el nro de factura correcto, si no va a intentar borrar una factura que no se ha creado.

La hoja donde debe estar el botón se llama "FACTURACION", el nro. De factura se encuentra en la celda D6 de dicha hoja. La hoja de Base de Datos se llama "BASE DE DATOS FACTURACION".

He intentado hasta con un InputBox y yo coloco el número de la factura pero tampoco se me da. Sé que no debe ser difícil pero nada de lo que he hecho hasta ahora me funciona y lo necesito con urgencia.

1 respuesta

Respuesta
1

Necesitaría saber cómo están tus datos en la base: ordenados, los últimos al final o al principio de la tabla y en qué columna se guarda el nro de factura:

Esperaré tus aclaraciones para desarrollarte la macro adecuada... no valores aún.

Buenas tardes, disculpe la demora, se me presentaron otros problemas con el sistema más urgentes de resolver.

En la base de datos se ordenan los últimos al final de la tabla y el nro. de Factura se guarda en la columna B. Espero su ayuda.  Muchas gracias por atender mi caso.

Te paso la macro para eliminar el registro, en las 2 hojas.

Por una cuestión de formatos asignados, la búsqueda con Set no arroja resultados, por eso hago la búsqueda recorriendo la hojas desde abajo sabiendo que se intenta eliminar la última factura confeccionada.

Si por alguna razón se cambia el orden de la hoja igualmente se encontrarán y eliminarán los registros.

Sub eliminarfactura()
'x Elsamatilde
Dim nrofact As Long, filx As Long, i As Long
Dim hof, hob
Dim canti As Integer
'Se elimina el nro de fact anterior al que tenga la celda D7
If [D7] = "" Then Exit Sub
nrofact = [D7] - 1
'se elimina el registro en BASE x FACTURa buscando el nro desde abajo
Set hof = Sheets("BASE DE DATOS X FACTURA")
filx = hof.Range("A" & Rows.Count).End(xlUp).Row
For i = filx To 6 Step -1
    If hof.Range("C" & i) = nrofact Then
        'si se encuentra el registro se elimina y cancela el bucle
 hof. Unprotect
 hof.Range("A" & i). EntireRow.Delete
        hof. Protect
        Exit For
    End If
Next i
If i = 5 Then
    MsgBox "NO se encontró el nro de factura en hoja BASE x FACTURAS. Se continúa con la otra hoja.", , "ATENCIÓN"
End If
'se eliminan todas las líneas en hoja BASE FACTURACION, empezando desde la última
Set hob = Sheets("BASE DE DATOS FACTURACION")
'ultima fila ocupada
filx = hob.Range("A" & Rows.Count).End(xlUp).Row
hob.Unprotect
For i = filx To 6 Step -1
    If hob.Range("B" & i) = nrofact Then
        hob.Range("A" & i).EntireRow.Delete
        'se lleva un contador para mostrar el mensaje
        canti = canti + 1
    End If
Next i
If canti = 0 Then
    MsgBox "NO se encontró el nro de factura en hoja BASE FACTURACION.", , "ATENCIÓN"
End If
hob.Protect
MsgBox "FIN DEL PROCESO.", , "ATENCIÓN"
End Sub

Nota: Dejé un contador por si deseas enviar un mensaje al final del proceso indicando la cantidad de registros eliminados. Sirve además para saber si hubo registros para eliminar.

Ya te estoy devolviendo el libro comentado.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas