En cherchant une réponse à ma question : Ce lien n'existe plus, je suis 'tombé' sur une explication de _Thierry(Lien supprimé), que j'essaye d'adapter à ma situation. :unsure: Mais, j'ai un problème concernant la gestion du retour au control TextBox, qui génère l'erreur. :angry:
On commence avec le changement de Format de la TextBox :
Code:
Private Sub CARestauMidiBox_AfterUpdate()
CARestauMidiBox = MAJForm(CARestauMidiBox)
End Sub
Et ensuite on trouve la fonction qui gère le changement de format. Le control ayant la valeur par défaut '0,00', si l'utilisateur n'efface le contenu avant la saisie, le nombre saisie créera une erreur type ('13') : ex : '0,001235,27' => Erreur Type incompatible.
Code:
Public Function MAJForm1(T As String) As String
On Error GoTo ErreurType
MAJForm = Format(CDbl(T), '# ##0.00')
Exit Function
ErreurType:
'si l'erreur est bien le Type incompatible (erreur 13)
If Err = 13 Then
MsgBox 'Attention ! ' & T & ' n'est pas valide. ' & vbCr & 'Veuillez effacer la saisie et recommencer ! ' _
, vbOKOnly, Err.Description
'on remet le Focus en sélectionnant le text dans la TextBox
Else
'si c'est une autre erreur...
MsgBox 'Une erreur non gérée c'est produite : n°' & Err.Number & vbCr & _
'la source : ' & Err.Source & ', ' & Err.Description
End If
With T
.SetFocus
.SelStart = 0
.SelLength = Len(T)
End With
End Function
Le problème, c'est que le Focus ne revient pas sur le control de départ.
J'oubliais !
J'utilise une fonction, parce que j'ai 6 TextBox qui utilise cette Function MAJFORM
Le Hic, c'est que T est String et qu'il représente la valeur de la TextBox, et non la TextBox elle-même.
Or, pour retrouver le Focus de la dernière TextBox utilisée (celle qui génère l'erreur), je coince.
Une façon simple de contourner le problème peut-être, en utilisant l'évènement Exit() et son argument Cancel en lieu et place de l'évènement AfterUpdate() :
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = Not MAJForm1(TextBox1) End Sub '__________________________________________________________
Public Function MAJForm1(ByRef T As Control) As Boolean
Dim Chaine As String On Error GoTo ErreurType With T
Chaine = Format(CDbl(.Text), '# ##0.00')
.Text = Chaine End With
MAJForm1 = True On Error GoTo 0 Exit Function
ErreurType: With T
.SelStart = 0
.SelLength = Len(.Text) End With 'si l'erreur est bien le Type incompatible (erreur 13) If Err = 13 Then
MsgBox 'Attention ! ' & T & ' n'est pas valide. ' & vbCr & 'Veuillez effacer la saisie et recommencer ! ' _
, vbOKOnly, Err.Description 'on remet le Focus en sélectionnant le text dans la TextBox Else 'si c'est une autre erreur...
MsgBox 'Une erreur non gérée c'est produite : n°' & Err.Number & vbCr & _
'la source : ' & Err.Source & ', ' & Err.Description End If
End Function