Saltar al contenido

Duplicidad de registros


Recommended Posts

publicado

Buenas noches,

Como vereis, entre otros, utilizo dos UserForm: uno, para la entrada de datos (UserForm1); y, el otro, (UserForm2), para modificarlos. El problema me surge en la modificación de registros (utilizando el UserForm2); ya que, cuando el registro a modificar se encuentra duplicado, aunque con fechas distintas (supongamos uno con fecha de 2013 y el otro del 2014), todos sus registros se duplican. En cambio, si el registro es único, se modifica sin problema.

Ejemplo:

En la Hoja "INICIO", ejecutamos “Modificación de Informes”, en el formulario que se abre, ejecutamos “Modificación de Datos”, y en en el ComboBox “Número de Registro”, desplegamos y elegimos el “4”. Inmediatamente, en el ListBox, aparecen los registros asociados a este número, en este caso dos; uno, con fecha, 10/01/2013; y, otro, con fecha, 01/02/2014, ambos, con sus correspondientes registros.

Seleccionamos el registro de fecha 01/02/2014, entonces se cargan los distintos campos de este registro en sus correspondientes TextBox y Combos, al objeto de poder modificar cualquiera de ellos.

Elijamos, por ejemplo, modificar el campo "Tipo de Documento", cambiemos el Documento 5 por cualquier otro, despleguemos este ComboBox y seleccionemos, por ejemplo, el Documento 8 (podríamos modificar cualquier otro campo) y ejecutamos “Modificación de Datos”. Teóricamente, en el registro núm. 4, de fecha 01/02/2014, únicamente debió modificarse el Documento 5 por el Documento 8, quedando el resto de los campos como estaban. Pues aquí viene el problema, en vez de haber modificado este dato concreto, Lo que ha hecho es lo siguiente:

Nos dirigimos a la hoja “DATOS”, y comprobamos que han desaparecido todos los campos correspondientes al Num. de Registro "4", de fecha 10/01/2013; y el Núm. de Registro "4", el correspondiente al 01/02/2014, se ha duplicado, uno con Documento 5 y el otro con Documento 8.

En cambio, si elegimos un núm. de registro que no se encuentre duplicado, se modifica normalmente. Incomprensible, al menos para mí.

Por más vueltas que le he dado al código de este formulario, no doy con la solución a este problema. Agradecería, sinceramente, cualquier aportación que contribuya a su resolución.

Muchísimas gracias.

Como el archivo pesa bastante y no lo puedo subir al foro, os dejo este enlace para su descarga:

https://www.dropbox.com/s/vhhbyicluw8mx3w/InformesPrueba.xls

Nota para abrir el archivo InformesPrueba.xls:

USUARIO: Usuario 1

CONNTRASEÑA: Clave 1

Para abrir editor Visual Basic

Contraseña: 123

Archivado

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

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      29

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    2    1

  • Crear macros Excel

  • Mensajes

    • Que tal nuevamente,  adjunto una solución alternativa: =MAX(A:.A)-BYROW(F4:.AK20,LAMBDA(r,BUSCAR(2,1/(r=0),F3:.AK3))) Cabe mencionar que esta solución requiere funciones nuevas como RECORTAR.RANGO. CONTADOR FINAL (Solucion).xlsb
    • Buenos días,  espero se encuentren bien de salud compañeros, Favor me podrían ayuda con lo siguientes como se podría hacer cuando tengo una tabla dinámica que  amedida que se aumente las columnas fechas con data un formula que se coloco al final busque o analice siempre la ultima fila y columna de la fecha. Coloco un ejemplo
    • @JSDJSD Excelentes, GRACIAS POR TU SOPORTE , me ayudo demasiado es exactamente lo que quería. 5 ESTRELLAS
    • 'Opción 1 Sub FiltrarSKUPorFecha(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim diccionarioSKU As Object Dim listaEliminar As Object Dim fechaActual As String, fechaSiguiente As String Dim f As Variant With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Crear diccionarios para comparar SKU y almacenar filas a eliminar Set diccionarioSKU = CreateObject("Scripting.Dictionary") Set listaEliminar = CreateObject("Scripting.Dictionary") ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then diccionarioSKU.RemoveAll ' Limpiar el diccionario antes de llenarlo ' Guardar los SKU de la fecha siguiente (solo de la siguiente) For f = fila + 1 To ultimaFila If .Cells(f, 1).Value <> fechaSiguiente Then Exit For diccionarioSKU(.Cells(f, 2).Value) = 1 Next f ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Solo eliminar si el SKU no está en la fecha siguiente If Not diccionarioSKU.exists(.Cells(f, 2).Value) Then listaEliminar(f) = 1 ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar.keys .Rows(f).Delete Next End With MsgBox "Completado correctamente.", vbInformation End Sub 'Opción 2 Sub FiltrarSKUPorFecha1(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim listaEliminar As Collection Dim fechaActual As String, fechaSiguiente As String Dim f As Variant, i As Long Dim SKUExiste As Boolean With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Inicializar la colección para marcar las filas a eliminar Set listaEliminar = New Collection ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Comprobar si el SKU está en la fecha siguiente SKUExiste = False For i = fila + 1 To ultimaFila If .Cells(i, 1).Value <> fechaSiguiente Then Exit For If .Cells(i, 2).Value = .Cells(f, 2).Value Then SKUExiste = True Exit For End If Next i ' Si el SKU no se encuentra en la fecha siguiente, marcar para eliminar If Not SKUExiste Then listaEliminar.Add f ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar .Rows(f).Delete Next f End With MsgBox "Completado correctamente.", vbInformation End Sub   TABLA ELIMINAR.xlsm
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • 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.