Pour un numéro saisi avec le plus :
If nvval Like "*#*#*#*#*#*" Then
on change la condition.
D'ailleurs, cette condition est assez approximative et suppose que l'utilisateur ne saisira pas n'importe quoi. Mais, en l'état, il est difficile de restreindre plus sans alourdir le code et sans examiner les extrêmes possibilités en fonction des pays...
Pour le test sur les 11 chiffres :
Private Sub worksheet_change(ByVal target As Range)
Set wf = WorksheetFunction
Set r = Intersect(target, Range("D:D"))
tmodif = Array(".", "-", " ", "_", "/")
If Not r Is Nothing Then
Application.EnableEvents = False
For Each cell In r
pays = IIf(cell.Offset(0, -1).Value <> "", cell.Offset(0, -1).Value, "France")
prefixe = wf.Index(Sheets("Listes").Range("Liste[Indicatifs]"), wf.Match(pays, Sheets("Listes").Range("Liste[Pays]"), 0))
nvval = cell.Value
If nvval Like "*#*#*#*#*#*" Then
For i = LBound(tmodif) To UBound(tmodif)
nvval = Replace(nvval, tmodif(i), "")
Next i
cell.Value = prefixe & nvval * 1
if pays = "France" and len(cell.value) <> 11 then cell.interior.color = 255
End If
Next cell
Application.EnableEvents = True
End If
End Sub
Pas de message (ce code est censé fonctionner pour plusieurs cellules et non une seule donc la boucle avec un message à chaque fois, pas top) mais la cellule coloriée en rouge.