merci à vous deux pour vos réponses. j'ai mis le code comme indiqué.
dans le userfom :
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Sortie = True
End Sub
Private Sub Tbx_UsersModification_NewTel_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Sortie = False And ControlerFormatTelephone(Tbx_UsersModification_NewTel.Value) Then
MsgBox "Erreur dans le numéro de téléphone, recommencez !"
Tbx_UsersModification_NewTel.Value = ""
Cancel = True
End If
End Sub
dans un module standard (j'ai prévu d'ajouter ce contrôle à d'autres endroits du projet, notamment dans la gestion des tiers, il faut que je puisse réutiliser le contrôle)
Function ControlerFormatTelephone(ByVal telephone As String) As Boolean
Dim telNettoye As String
ControlerFormatTelephone = False
' Suppression des espaces et caractères non numériques
telNettoye = Replace(Replace(Replace(telephone, " ", ""), ".", ""), "-", "")
' Vérifier que le téléphone contient bien 10 chiffres après nettoyage
If Len(telNettoye) <> 10 Or Not IsNumeric(telNettoye) Then ControlerFormatTelephone = True
End Function
en premier : je ne comprends pas ce que fait query_close, pouvez vous m'expliquer cette commande? je suis allé voir dans l'aide excel qui me dit "force l'utilisateur à cliquer sur la zone cliente UserForm pour la fermer", donc à utiliser la croix pour fermer le userform?
ensuite j'ai testé. Tbx_UsersModification_NewTel.Value est bien vide mais je ne vois toujours pas le focus. il faut que je clique dans le champ pour qu'il apparaisse. j'ai ajouté MsgBox ActiveControl.Name juste avant le end sub de Tbx_UsersModification_NewTel_Exit. j'ai bien en retour le nom du textbox. je m'arrache mes derniers cheveux.
Précision mon userform est en mode non modal
Merci d'avance