Option Explicit
Private Sub TextBox1_Change()
Dim TargetCible As Object
Application.ScreenUpdating = False
'Détermine la Targetlule de saisie
Set TargetCible = Worksheets('Test'Â'Â').TextBox1
With TargetCible
If .Value = '' Then Exit Sub
Select Case Len(.Value) 'Passe en revue ce qui peu etre numérique et ce qui peux être des lettres
Case 1, 3, 6
If IsNumeric(Right(.Value, 1)) Then
.Value = Mid(.Value, 1, Len(.Value) - 1)
MsgBox ' Le prochain caractère doit être une lettre'
End If
Case 2, 5, 7
If Not IsNumeric(Right(.Value, 1)) Then
.Value = Mid(.Value, 1, Len(.Value) - 1)
MsgBox ' Le prochain caractère doit être un chiffre'
End If
End Select
Select Case UCase(Right(.Value, 1)) ' Vérifie ce qui est acceptable comme caractère
Case Empty, 'A', 'B', 'C', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
' Ça semble niais comme ça, mais c'est plus facile de lister ce que l'on accepte dans ce cas ci, que de lister ce que l'on accepte pas.
TargetCible = UCase(TargetCible)
Len(TargetCible) - 1) & UCase(Right(.Value, 1))
If Len(.Value) = 3 Then TargetCible = TargetCible & '-'
If Len(.Value) = 7 Then Cells(1, 1).Select
Case Else
If Len(.Value) <> 4 Then
MsgBox ' Le caractère ' & UCase(Right(.Value, 1)) & ' est exclus du code postal'
.Value = Mid(.Value, 1, Len(.Value) - 1)
End If
End Select
End With
Application.ScreenUpdating = True
End Sub
Private Sub TextBox1_LostFocus()
If Len(Worksheets('Test'Â'Â').TextBox1.Value) < 7 Then
MsgBox ' Vous tenter de valider un code postal avec seulement' & Chr(10) & Len(Worksheets('Test'Â'Â').TextBox1.Value) & ' caractères!!!' & Chr(10) & 'Vous devez avoir absolument 7 caractères incluant le - '
Worksheets('Test'Â'Â').TextBox1.Value = '' 'peut être un peu sauvage, peut être travailler a souhait
End If
End Sub