Private Sub Worksheet_change(ByVal target As Range)
Dim d As Object, tablo, ub&, i&, resu1(), resu2(), x$, y$
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
With [A1].CurrentRegion
tablo = .Resize(, 2) 'matrice, plus rapide
ub = UBound(tablo)
ReDim resu1(1 To ub, 1 To 1)
ReDim resu2(1 To ub, 1 To 1)
For i = 2 To ub
x = tablo(i, 2)
y = x & tablo(i, 1)
If d.exists(x) Then resu1(i, 1) = 1 Else d(x) = ""
If d.exists(y) Then resu2(i, 1) = 1 Else d(y) = ""
Next
'---restitution---
resu1(1, 1) = .Cells(1, 13): resu2(1, 1) = .Cells(1, 3) 'titres
Application.EnableEvents = False 'désactive les évènements
.Cells(1, 13).Resize(ub) = resu1
.Cells(1, 3).Resize(ub) = resu2
Union(.Cells(1, 13).Resize(ub), .Cells(1, 3).Resize(ub)).Borders.Weight = xlThin 'bordures
Application.EnableEvents = True 'réactive les évènements
End With
End Sub