Saltar al contenido

Alerta por dato duplicado

publicado

Buenos días,

Para que el sistema me lance una ventana con un mensaje de error informando que ya existe el mismo valor en la columna B, selecciono primero un rango desde la celda 2 hasta la celda 200 y luego me voy a la pestaña Datos, y en Validación de datos, pongo lo siguiente: 

=CONTAR.SI($B$2:$B$200;B2)=1

¿Habría alguna manera de no tener que indicar un rango, para que no tenga porque ser hasta la celda 200? 

Luego, querría repetir lo mismo para las columnas E y H.

 

 

duplicidad.jpg

Featured Replies

publicado
  • Autor
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
  • Autor

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
  • Autor

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.