No permitir valores duplicados en 2 columnas

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim ws As Worksheet, EvalRange As Range
    Set EvalRange = Range("F1:G999")
    If Intersect(Target, EvalRange) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
    If IsEmpty(Target) Then Exit Sub
    If WorksheetFunction.CountIf(EvalRange, Target.Value) > 1 Then
        MsgBox Target.Value & " already exists on this sheet."
        Application.EnableEvents = False
        Application.Undo
        Application.EnableEvents = True
    End If
    For Each ws In Worksheets
        With ws
            If .Name <> Target.Parent.Name Then
                If WorksheetFunction.CountIf(Sheets(.Name).Range("F1:G999"), Target.Value) > 0 Then
                    MsgBox Target.Value & " already exists on the sheet named " & .Name & ".", _
                    16, "No duplicates allowed in " & EvalRange.Address(0, 0) & "."
                    Application.EnableEvents = False
                    Application.Undo
                    Application.EnableEvents = True
                    Exit For
                End If
            End If
        End With
    Next ws
End Sub

Buena tarde estimados todos, solicito de su amable apoyo para terminar con la siguiente macro.

No permitir ingresar 2 números de parte idénticos en la misma orden de servicio anexo ejemplo

no he podido hacer que me funcione el código anexado.

sin mas por el momento quedo a sus ordenes.

2 respuestas

Respuesta
2

Te anexo la macro para los eventos de Thisworkbook, por lo que revisé en tu macro, se debe revisar en todas las hojas.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'Por.Dante Amor
    If Not Intersect(Target, Range("F:G")) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        If Target.Value = "" Then Exit Sub
        If Sh.Cells(Target.Row, "F") = "" Or Sh.Cells(Target.Row, "G") = "" Then Exit Sub
        '
        For Each h In Sheets
            cuenta = WorksheetFunction.CountIfs(h.Range("F:F"), Sh.Cells(Target.Row, "F"), _
                                                h.Range("G:G"), Sh.Cells(Target.Row, "G"))
            If h.Name = Sh.Name Then
                If cuenta > 1 Then Call Deshacer(Cells(Target.Row, "F"), Cells(Target.Row, "G"), "esta hoja")
            Else
                If cuenta > 0 Then Call Deshacer(Cells(Target.Row, "F"), Cells(Target.Row, "G"), "la hoja " & h.Name)
            End If
        Next
    End If
End Sub
'
Sub Deshacer(parte, orden, hoja)
    MsgBox "Número de parte : " & parte & " y orden : " & orden & " ya existen en " & hoja
    Application.EnableEvents = False
    Application.Undo
    Application.EnableEvents = True
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Muchas ¡Gracias! Dante amor.

De verdad aprecio mucho tu ayuda, ya estaba volviéndome loco con el código y lo resolviste simplificando el código.

Excelente apoyo.

Respuesta
1

Entiendo que el nº de parte es único y no puede haber el mismo nº de parte para diferentes nº de orden.

En ese caso, lo mejor para ti es aplicar un formato condicional como el que te adjunto

Buen dia mi estimado, gracias por tu amable respuesta sin embargo tal vez no me explique bien, lo que estamos buscando es que un numero de parte no se repita en la misma orden, pero ese numero de parte si puede existir en otra orden de la misma lista. estoy probando con código vba para que no permita pegar la información en la hoja de excel si ya existe.

gracias por tus atenciones.

Entonces, siguiendo con el formato condicional, utiliza una columna auxiliar en la cual concatenas F&G

La fórmula para el formato condicional entonces será en la columna F y con columna auxiliar H

=CONTAR.SI($H$1:$H$9000;H1)>1

Suponiendo 9000 filas de datos y copias-pegas formato a toda la columna F

Hola ya  hice lo que me indicaste, pero no valida nada si me deja ingresar el mismo numero de parte en la misma orden.

EL formato condicional no prohíbe que pongas el mismo número, pero si lo duplicas lo que hace es ponerlo en color rojo.

¿Has puesto en la regla del formato condicional que la fuente sea en rojo como se ve en la vista previa de la imagen?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas