Gestion d\'erreur de 6 TextBox

laurent45

XLDnaute Occasionnel
Gestion d'erreur de 6 TextBox

Bonjour le Forum,

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 ! :eek:
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.

Merci

Message édité par: laurent45, à: 15/10/2005 17:36

Message édité par: laurent45, à: 15/10/2005 18:04

Message édité par: laurent45, à: 15/10/2005 18:05
 

myDearFriend!

XLDnaute Barbatruc
Re:Gestion d'erreur de 6 TextBox

Bonsoir laurent45,

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
Cordialement,

Message édité par: myDearFriend!, à: 15/10/2005 21:45
 

Statistiques des forums

Discussions
300 891
Messages
1 988 183
Membres
210 098
dernier inscrit
sidimouh