Private Sub Worksheet_Change(ByVal Target As Range)
Dim liste As Range, cible As Range, d As Object, c As Range, tablo, ub&, i&, j%, x$, k%
Set liste = [A1:A100] 'à adapter
Set cible = [B2:D65000] 'à adapter
Set Target = Intersect(Target, cible, UsedRange)
If Target Is Nothing Then Exit Sub
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
For Each c In liste
d(c.Value) = ""
Next c
Application.EnableEvents = False
For Each Target In Target.Areas 'si entrées ou effacements multiples
tablo = Target.Resize(, Target.Columns.Count + 1) 'matrice, plus rapide, au moins 2 éléments
ub = UBound(tablo, 2) - 1
For i = 1 To UBound(tablo)
For j = 1 To ub
x = tablo(i, j)
If x <> "" Then
For k = 1 To Len(x)
If d.exists(Left(x, k)) Then GoTo 1
Next k
tablo(i, j) = "Rien"
1 End If
Next j, i
Target = tablo
Next Target
Application.EnableEvents = True
End Sub