Option Explicit
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Colonne As Integer
Dim Adresse As String
Dim Cel As Range, d As Integer
'On sort si plus d'une cellule a été modifiée
If Target.Count > 1 Then Exit Sub
'On sort si la colonne de la cellule modifiée est > 2
If Target.Column > 3 Then Exit Sub Else Colonne = Target.Column
'Détermine le décalage de colonne par rapport à la cellule modifiée
d = IIf(Colonne = 1, 3, -2)
'On sort si la cellule modifiée est vide
If Target.Value = "" Or Target.Offset(0, d) = "" Then Exit Sub
'Recherche dans les colonnes 1 et 2
For Each Cel In Columns(Target.Column).SpecialCells(xlCellTypeConstants)
If Not Cel.Row = Target.Row Then
If Cel = Target And Cel.Offset(0, d) = Target.Offset(0, d) Then
Adresse = IIf(Colonne = 1, Cel.Address, Cel.Offset(0, d).Address)
MsgBox Target.Offset(0, d) & " existe déjà dans la cellule " & Adresse
'Suppression de la donnée
Target.Value = "": Target.Offset(0, d) = ""
Target.Select
Exit For
End If
End If
Next
End Sub