Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, c As Range, txt$, i%, x$
Set P = Intersect(Target, [A:A], UsedRange) 'colonne à adapter
If P Is Nothing Then Exit Sub
If Application.CountA(P) = 0 Then Exit Sub
For Each c In P 'si entrées multiples (copier-coller)
If c.Row > 1 Then 'en-têtes en ligne 1
txt = CStr(c)
If txt <> "" Then
If Len(txt) = 1 Or Len(txt) > 8 Then P = "": Exit Sub 'si nombre de caractères =1 ou > 8
If Asc(txt) < 65 Or Asc(txt) > 90 Then P = "": Exit Sub 'si autre qu'une lettre majuscule
For i = 2 To Len(txt)
x = Mid(txt, i, 1)
If Asc(x) < 48 Or Asc(x) > 57 Then P = "": Exit Sub 'si autre qu'un chiffre
If Len(txt) - Len(Replace(txt, x, "")) > 1 Then P = "": Exit Sub 'si doublon
Next i
End If
End If
Next c
End Sub