Saltar al contenido

Alerta por dato duplicado


Recommended Posts

publicado
En 11/12/2022 at 10:43 , FGV dijo:

Otra opción es utilizar la función DESREF para  incluir en la validación todo el rango de la columna B que contenga datos, de forma que al escribir un dato en cualquier fila de esa columna, el rango dinámico lo asume en la validación:

image.png.fe35485b3478edefc7164f88e45f6ce9.png

En el ejemplo la validación personalizada con esa fórmula llega hasta la fila 1000, puedes reducirla o aumentarla como quieras. Un saludo, Fernando

Hola @FGV

He aplicado tu fórmula en B2 y ya muestra una alerta al introducir el primer dato en esa celda, y sin que hayan más datos en las otras ?

publicado

Hola @Gerson Pineda

Ya funciona perfectamente escribiendo así:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim vr As Integer
 With Target
    If .Column = 2 Or .Column = 5 Or .Column = 8 Then
        vr = Application.CountIf(Range(.EntireColumn.Address), .Value)
        If vr > 1 Then
            VBA.MsgBox "Entrada duplicada " & .Value
            .Value = Empty
            .Select
        End If
    End If
 End With
 If Not Intersect(Target, Range("B:B,E:E,H:H")) Is Nothing And InStr(1, Target.Address, ":") = 0 Then
  If Target <> Empty Then
   Target.Offset(0, 1).Value = Date
  Else
   Target.Offset(0, 1).Value = ""
  End If
 End If
End Sub

Private Sub Worksheet_Deactivate()

End Sub

Gracias por todo ? 

  • 1 month later...
publicado

Hola @Gerson Pineda

Si quisiera crear una nueva hoja dentro del mismo libro, de manera que cada hoja se correspondiera con un mes, ¿tendría que copiar el código de VB de la hoja 1 y pegarlo en la hoja 2, y así cada vez que cree una hoja nueva?

¿Habría alguna manera de retocar el código para que se aplicara en cada hoja nueva?

 

Gracias

 

 

publicado

Puedes utilizar el evento SheetChange del libro

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Dim vr As Integer
 With Target
    If .Column = 2 Or .Column = 5 Or .Column = 8 Then
        vr = Application.CountIf(Range(.EntireColumn.Address), .Value)
        If vr > 1 Then
            VBA.MsgBox "Entrada duplicada " & .Value
            .Value = Empty
            .Select
        End If
    End If
End With
 
End Sub

Pegarlo en THISWORKBOOK

image.png

publicado
hace 3 horas, Mohamad Marrawi Marrawi dijo:

Hola @Gerson Pineda,

Lo que veo es que en la hoja 2, al meter un valor, no me está metiendo la fecha en la celda adyacente (columna C), tal y como sucedía en la hoja 1.  

 

Para que todo te funcione bien, debes trasladar los eventos de hoja a libro, en THISWORKBOOK

 

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.