Bonjour,
Quoique tu fasses, l'évènement _Exit() de la TextBox sera déclenché (et traité pas ton Sub) en priorité.
Tu ne peux absolument pas en sortir si Cancel = True.
Il faut prévoir par exemple d'accepter une valeur vide (Cancel = False) pour laisser passer quitte à faire une vérification des zones vides non valides sur un "Valider" ultérieur.
Une technique plus complexe à mettre en œuvre est de ne pas utiliser le Cancel et de déclencher le contrôle sur la TextBox de manière asynchrone (Application.OnTime Now, "FonctionDeContrôleTextBox") et si le contrôle détecte une erreur d'y faire un TextBox.SetFocus (qui est hélas sans effet dans l'_Exit() de la TextBox concernée).
Edit:
Ou alors, encore mieux, limiter le rôle de la fonction asynchrone au TextBox.SetFocus. en cas d'erreur détectée par les instructions de contrôle de validité de l'_Exit().