GestionErreurs

Résolu
lomatic Messages postés 37 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 9 octobre 2009 - 4 nov. 2007 à 19:28
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 - 20 nov. 2007 à 22:34
Bonsoir à tous,

Je n'arrive pas à coder ce qu'il faut dans : Private Sub txtDate_LostFocus(Index As Integer) , à partir de GestionErreurs.

Voici le code de la forme :

Option Explicit

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Test évènements et méthodes couche présentation :
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''



' Indexes du groupe de controle hsbDate.
Private Enum enuCtlScrollBar
    Jour
    Mois
    Annee
End Enum



' Indexes du groupe de controle txtDate.
Private Enum enuCtlTxt
    Jour
    Mois
    Annee
End Enum


' Constantes pour HScrollBar.
Private Const JOUR_MIN As Integer = 1
Private Const JOUR_MAX As Integer = 31  ' 31 jours en Janvier.
Private Const MOIS_MIN As Integer = 1   ' Janvier.
Private Const MOIS_MAX As Integer = 12
Private Const ANNEE_MIN As Integer = 1000
Private Const ANNEE_MAX As Integer = 3000





' Evenement : Form_Load
' INPUT : NU.
' OUTPUT : NU.
' FONCTION : Au chargement de la FORM, on initialise les contrôles HScrollBar.
' Cette initialisation déclenche l'événement hsbDate_Change de chaque contrôle HScrollBar,
' ce qui initialise donc l'ensemble des contrôles.



Private Sub Form_Load()
'Initialise les contrôles HScrollBar
hsbDate(0) = JOUR_MIN
hsbDate(1) = MOIS_MIN
hsbDate(2) = ANNEE_MIN
End Sub' Form_Load



' Evenement : hsbDate_Change
' INPUT : NU.
' OUTPUT : NU.
' FONCTION : Quand 1 controle HScrollBar change, on rafraichi l'ensemble des controles.
' HScrollBar change suite a :
'   - une action utilisateur,
'   - une modification par programme par txtDate_LostFocus(),
'   _ une modification de sa valeur MAX par Form_Load().


Private Sub hsbDate_Change(Index As Integer)


txtDate(Index) = hsbDate(Index)


lblSigneTexte = TrouverNomSigne(hsbDate(0), hsbDate(1))
lblJourNaissance = CalculerJourNaissance(hsbDate(0), hsbDate(1), hsbDate(2))
lblPlageDateSigne = TrouverPlageDate(lblSigneTexte)
imgSigneImage = TrouverImageSigneZodiaque(lblSigneTexte)



End Sub



' Evenement : txtDate_LostFocus
' INPUT : NU.
' OUTPUT : NU.
' FONCTION : Cet evenement est declenche quand l'utilisateur a modifie
'   une des 3 TextBox et que le focus sur ce controle est perdu.
'   On verifie la saisie,
'   - si elle est correcte on ajuste la HScroolBar de meme type jour(0), mois(1) ou annee(2),
'       Ce qui declenchera l'evenement hsbDate_Change et donc rafraichira l'ensemble
'       des controles.


Private Sub txtDate_LostFocus(Index As Integer)
    If VerifierSaisie(txtDate(Index), hsbDate(Index).Min, hsbDate(Index).Max) = 1 Then
    hsbDate(Index) = txtDate(Index)
    Else
    GestionErreurs '  ===> Je ne sais pas quoi définir dans GestionErreurs afin que cela fonctionne
    End If
End Sub



' Rafraichir_Controles
' INPUT : NU.
' OUTPUT : NU.
' FONCTION : Rafraichi l'ensemble des controles.
'   Le rafraichissement des controles lblPlageDateSigne et imgSigneImage
'   doit etre fait apres le rafraichissement du controle lblSigneTexte, dans la
'   mesure ou on utilise la valeur de ce dernier pour rafraichir les 2 precedents.

Private Sub Rafraichir_Controles()


lblSigneTexte = TrouverNomSigne(hsbDate(0), hsbDate(1))
lblJourNaissance = CalculerJourNaissance(hsbDate(0), hsbDate(1), hsbDate(2))
lblPlageDateSigne = TrouverPlageDate(lblSigneTexte)
imgSigneImage = TrouverImageSigneZodiaque(lblSigneTexte)



End Sub ' Rafraichir_Controles



' VerifierSaisie
' INPUT : Valeur Controle, ValMin et ValMax admissible.
' OUTPUT : Retourne le code erreur ou SANS_ERREUR.
' FONCTION : Verifie si la saisie utilisateur est correcte.


Private Function VerifierSaisie(p_strValeur As String, p_intMin As Integer, p_intMax As Integer) As enuTypeErreur


    ' Verifier que la valeur saisie est numerique afin que CInt ne genere une erreur.
    If IsNumeric(p_strValeur) Then
        If (CInt(p_strValeur) >= p_intMin) And (CInt(p_strValeur) <= p_intMax) Then
            VerifierSaisie = enuTypeErreur.SANS_ERREUR
        Else
            VerifierSaisie = enuTypeErreur.DEPASSEMENT_CAPACITE
        End If
    Else
        VerifierSaisie = enuTypeErreur.NON_NUMERIQUE
    End If



End Function
' VerifierSaisie



' GestionErreurs
' INPUT : Controle a l'origine de l'erreur et Type d'erreur.
' OUTPUT : NA.
' FONCTION : Affiche une MsgBox signalant le type d'erreur de saisie,
'   et redonne le focus a la TextBox incriminee en selectionnant son contenu.
Private Sub GestionErreurs(p_intOrigineErreur As Integer, p_intTypeErreur As Integer)
    Dim strPrompt As String
   
    Select Case p_intTypeErreur
        Case enuTypeErreur.NON_NUMERIQUE
            Select Case p_intOrigineErreur
                Case enuCtlTxt.Jour
                    strPrompt = EM.ERREUR_JOUR
               Case enuCtlTxt.Mois
                    strPrompt = EM.ERREUR_MOIS
                Case enuCtlTxt.Annee
                    strPrompt = EM.ERREUR_ANNEE
                Case Else
                    strPrompt = EM.ERREUR_INCONNUE
            End Select' p_intOrigineErreur
        Case enuTypeErreur.DEPASSEMENT_CAPACITE
            strPrompt = EM.ERREUR_DEPASSEMENT_CAPACITE
        Case Else
            strPrompt = EM.ERREUR_INCONNUE
    End Select' p_intTypeErreur
   
    txtDate.Item(p_intOrigineErreur).SetFocus
    txtDate.Item(p_intOrigineErreur).SelStart = 0
    txtDate.Item(p_intOrigineErreur).SelLength = Len(txtDate.Item(p_intOrigineErreur).Text)


    MsgBox strPrompt, vbInformation, EM.ERREUR_SAISIE
   
End Sub' GestionErreurs

En espérant que vous puissiez m'aider ... Bonne soirée.




 

22 réponses

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
5 nov. 2007 à 11:49
Et moi qui attendait l' alerte  c' était donc pour ça !
j' y vais de ce pas.
Merci ..

<hr />I LIKE TO BE HERE WHEN I CAN
<hr />
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
20 nov. 2007 à 22:34
Salut,
Tant mieux..
sauf qu' au départ la déclaration de VerifierSaisie est tout autre !
Rappel :
Private Function VerifierSaisie(p_strValeur As String, p_intMin As Integer, p_intMax As Integer) As enuTypeErreur

Ce qui t' obligeait à :
Dim intTypeErreur As enuTypeErreur

A moins que tu l' ais changé.

Bonne continuation.

<hr />I LIKE TO BE HERE WHEN I CAN
<hr />
0
Rejoignez-nous