Saltar al contenido

Eliminar registro de otra hoja segun combobox


Recommended Posts

publicado

Hola!

Antes que nada quiero agradecerle a muchos de ustedes ya que muchas veces logro solucionar mis problemas gracias a todos los que interactuan en el foro.

Mi problema es el siguiente:

En la hoja VENTAS, tengo un boton "Modificar", a partir del cual puedo borrar un registro de venta (Ej: VEN-00006). A su vez, simultaneamente, me tiene que borrar en la hoja COMISIONES, todos los registros que terminen con esa numeracion (Siguiendo el ejemplo, todos los registros terminados en 00006, ya que en COMISIONES los registros comienzan con VEN- y COM-), lo cual NO puedo lograrlo.

 

En definitiva, el codigo que necesito seria aquel que extraiga los ultimos 5 caracteres del combobox, y busque las coincidencias (puede haber mas de un registro terminado en esa numeración) en los últimos 5 caracteres de otra columna en otra hoja y elimine dichas filas.

 

Hago un ejemplo segun el archivo que dejo adjunto: al eliminar el registro de venta VEN-00001 en la hoja VENTAS, necesito eliminar tambien el registro VEN-00001 Y COM-00001 en la hoja COMISIONES.

Espero ser claro.

Dejo adjunto el archivo: https://drive.google.com/open?id=1uxJFo5v_U2YXYbvmjW_tox1Eenfzctf8

Muchisimas gracias al que pueda brindarme una solución.

publicado

Como veo que eres aficionado a las funciones, aquí te dejo una que hace lo que pides pasándole el valor del Registro a eliminar, devuelve True si encuentra el registro en la hoja Ventas, en caso contrario devuelve False.

Recuerda que para realizar cualquier acción sobre una hoja, debe estar desprotegida.

Function EliminarVentasComision(Registro As String) As Boolean
Dim Ventas As Worksheet
Dim Comision As Worksheet
Dim Buscado As Range
Dim x As Long
'--
Set Ventas = Sheets("Ventas")
Set Comision = Sheets("Comision")
'--
Ventas.Unprotect "joaco9wert"
Comision.Unprotect "joaco9wert"
'--
Set Buscado = Ventas.Columns("D").Find(Registro, , , xlWhole)
If Not Buscado Is Nothing Then
   EliminarVentasComision = True
   Ventas.Rows(Buscado.Row).Delete
   For x = Comision.Range("D" & Rows.Count).End(xlUp).Row To 5 Step -1
      If Right(Comision.Range("D" & x), 5) = Right(Registro, 5) Then
         Comision.Rows(x).Delete
      End If
   Next
End If
'--
Ventas.Protect "joaco9wert"
Comision.Protect "joaco9wert"
End Function

GIF.gif

publicado
Hace 11 horas, Joaquin Wertmuller dijo:

Hola @AlexanderS, gracias por tu respuesta.

La verdad no me funciona. A veces me salta el depurador de VBA, y otras los registros eliminados no coinciden (por ejemplo al eliminar el registro VEN-00001 en hoja VENTAS, me elimina el registro VEN-00002 en la hoja COMISION).

A mi me funciona correctamente siempre, igualmente puedes probar las opciones de JSDJSD y Antoni.

Saludos.

publicado

Gracias @JSDJSD y @Antoni, ambas funcionan. Elijo la de JSDJSD por ser mas sencilla.

 

Una ultima consulta @JSDJSD. Tu codigo es:

Cita

 

    Dim buscado As Variant
    Dim registro As String
    Dim ufh5 As Long
    Dim cont As Long
    
    
    ufh5 = Hoja05.Range("D" & Rows.Count).End(xlUp).Row

        registro = Right(cbo_Registro, 5)
        
        For cont = ufh5 To 5 Step -1
            If Hoja05.Cells(cont, 4) Like "*" & registro Then
                Hoja05.Cells(cont, 4).EntireRow.Delete
            End If
        Next

 

 

2 preguntas:

- Para que definiste la variable "buscado"? Ya que no encuentro que la hayas utilizado.

- Podrias explicarme esta linea?:         For cont = ufh5 To 5 Step -1

 

Gracias a todos.

publicado
Hace 8 horas, Joaquin Wertmuller dijo:

- Para que definiste la variable "buscado"? Ya que no encuentro que la hayas utilizado.

En principio utilice el cliclo For Each....Next para lo que declaré la variable buscado, pero luego cambie a For ... Next para hacerlo más fácil y olvide eliminar dicha variable, en definitiva puedes eliminarla sin ningún problema.

Hace 8 horas, Joaquin Wertmuller dijo:

- Podrias explicarme esta linea?:         For cont = ufh5 To 5 Step -1

Esta linea significa que realizamos un ciclo desde la ultima fila con datos hasta la fila 5, es decir un ciclo a la inversa, puesto que vamos a borrar más de una línea, con lo que evitaremos saltos en el ciclo y por consiguiente errores a la hora de borrar las lineas que deseamos.

 

 

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.