Necesito detectar en una base de datos, duplicados de DNI relacionado con una fecha y no encuentro la solución

Necesito crear un archivo para gestionar la entrega de tickets por día. Por cada DNI se puede entregar solo un ticket al día. He conseguido crear un excel con 3 pestañas para que al introducir en la primera pestaña "buscador" el DNI de la persona. Automáticamente se rellenan sus datos (nombre y apellidos, y cuota) y se copian en la pestaña "registro". Todo esto lo he conseguido. El problema es como detectar duplicados. ¿Existe alguna manera de que salte un error al introducir el DNI en la pestaña "buscador" si en la pestaña "registro" detecta que un mismo día ya se ha entregado un ticket? Si existe alguna opción más sencilla de llevar este control, también acepto sugerencias.

3 Respuestas

Respuesta
1

Respuesta
3

Ho la Angie, bienvenida a todoexpertos.

Veo que en tu hoja "BUSCADOR" tienes un botón, supongo que tienes una macro para pasar los datos hacia la hoja "REGISTRO".

Puedes poner aquí tu macro para agregar las líneas y validar duplicados.

Muchas gracias Dante. Así es. Pensaba subir el excel pero creo que la página no lo permite. ¿Puedes explicarme como hacerlo por favor? Te adjunto la macro que intente hacer..

Sub GUARDADO()
'
' GUARDADO Macro
'
'
    Sheets("REGISTRO").Select
    Range("B3:E3").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Selection.Font.Bold = False
    Sheets("BUSCADOR").Select
    Range("C5,C7,C9,C11").Select
    Range("C11").Activate
    Selection.Copy
    Sheets("REGISTRO").Select
    Range("B3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=True
    Application.CutCopyMode = False
    ActiveWorkbook.Save
    Sheets("BUSCADOR").Select
    Range("C23").Select
    ActiveWorkbook.Save
    ActiveSheet.Shapes.Range(Array("Rounded Rectangle 2")).Select
End Sub

Te propongo la siguiente macro.

Sub Grabar_Datos()
  Dim sh As Worksheet
  Dim a As Variant
  Dim i As Long, lr As Long
  '
  Set sh = Sheets("REGISTRO")
  lr = sh.Range("B" & Rows.Count).End(3).Row
  a = sh.Range("B3:C" & lr).Value2
  '
  'Revisa si ya existe el DNI y fecha
  For i = 1 To UBound(a, 1)
    If a(i, 1) = Range("C5").Value2 And a(i, 2) = Range("C7").Value2 Then
      MsgBox "Ya existe un DNI en la misma fecha", vbCritical
      Range("C7").Select
      Exit Sub
    End If
  Next
  '
  'Guarda el registro
  sh.Range("B" & lr + 1).Resize(, 4).Value = Array([C5], [C7], [C9], [C11])
  ActiveWorkbook.Save
  MsgBox "Registro creado", vbInformation
End Sub

En las siguientes ocasiones, puedes utilizar el icono para insertar código.

Casi lloro de la emoción cuando ha salido. Mil gracias! ¿Existe la posibilidad de añadir algún código en el caso de si detecta el duplicado en la pestaña "registro", no se graben los datos? No sabes lo que te lo agradezco, Dante. Aprendiendo poco a poco.. :)

El código ya detecta el duplicado y no lo graba.

Algo estaré haciendo mal. Intentare hacerlo desde el principio. Gracias por tu ayuda. Un abrazo

En esta parte del código revisa si ya existe la fecha y dni:

 'Revisa si ya existe el DNI y fecha
  For i = 1 To UBound(a, 1)
    If a(i, 1) = Range("C5").Value2 And a(i, 2) = Range("C7").Value2 Then
      MsgBox "Ya existe un DNI en la misma fecha", vbCritical
      Range("C7").Select
      Exit Sub
    End If
  Next
  '

Si ya existe envía el mensaje "Ya existe ..." y entonces termina el código con "Exit Sub", por lo tanto no graba ese registro en la hoja.

Respuesta
1

No sé como tienes registrados tus datos, pero puedes utilizar la función contar. Si. Conjunto, con el DNI y la fecha

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas