begin process at 2012 02 13 08:22:00
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Divers

 > 

Débutants

 > 

GestionErreurs


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

GestionErreurs

dimanche 4 novembre 2007 à 19:28:01 | GestionErreurs

lomatic

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.

 

dimanche 4 novembre 2007 à 19:31:04 | Re : GestionErreurs

lomatic

Le but recherché est :

Lorsque l'on change txtDate(Index), si la valeur est correcte, on met hsbDate(Index) à cette même valeur, sinon on indique qu'il y a une erreure.

Algorythme :

Si VerifierSaisie(txtDate(Index),Max de hsbDate(Index),Max de hsbDate(Index)) VRAI

Alors

hsbDate(Index) ç txtDate(Index)

Sinon

GestionErreurs

FinSi

dimanche 4 novembre 2007 à 20:11:19 | Re : GestionErreurs

chaibat05

Bonsoir,
Pourquoi ne pas utiliser Validate plutôt que LostFocus ?
Ainsi le control garde le Focus jusqu' à ce qu' une valeur Valide soit entrée.

Private Sub
txtDate_LostFocus(Index As Integer,Cancel As Boolean)
    If VerifierSaisie(txtDate(Index), hsbDate(Index).Min, hsbDate(Index).Max) = 1 Then
    hsbDate(Index) = txtDate(Index)
    Else
      hsbDate(Index)=ValeurParDefaut
       GestionErreurs
' ===>Message personnalisé
       Cancel=True

     
   End If
End Sub



I LIKE TO BE HERE WHEN I CAN

dimanche 4 novembre 2007 à 20:13:09 | Re : GestionErreurs

chaibat05

Pardon !
Private Sub txtDate_Validate(Index As Integer,Cancel As Boolean)



I LIKE TO BE HERE WHEN I CAN

dimanche 4 novembre 2007 à 21:14:22 | Re : GestionErreurs

lomatic

Bonsoir chaibat05,

Ton idée m'interesse ;)

Private Sub txtDate_Validate(Index As Integer, Cancel As Boolean)
    If VerifierSaisie(txtDate(Index), hsbDate(Index).Min, hsbDate(Index).Max) = 1Then
    hsbDate(Index) = txtDate(Index)
    Else
      hsbDate(Index) = hsbDate(Index).Min 'Je pense que je peux mettre ca étant donné qu'elles sont déclarées et par défaut au min
       GestionErreurs ' ===>Message personnalisé
       Cancel = True
End Sub

Pourrais-tu répondre à quelques questions (je suis débutant en VB). Je ne comprends toujours pas ce que je dois définir à GestionErreurs ...
Cela ne renvoi pas à Private Sub GestionErreurs(p_intOrigineErreur As Integer, p_intTypeErreur As Integer) ??

Ce que j'ai mis en rouge est-il toujours correct étant donné que nous avons changé l'évènement ?

Même si la valeur rentrée est correcte, cela renvoi :

dimanche 4 novembre 2007 à 21:35:56 | Re : GestionErreurs

lomatic

On peut remplacer : 
If VerifierSaisie(txtDate(Index), hsbDate(Index).Min, hsbDate(Index).Max) = 1 Then
par
 If VerifierSaisie(txtDate(Index), hsbDate(Index).Min, hsbDate(Index).Max) =  SANS_ERREUR 
Then

Pour GestionErreurs des idées ? Perso je comprends pas ^^ ou bien je fais quelque chose du genre :

Dim GestionErreurs
GestionErreurs = MsgBox("hsbDate a été réinitialisé, veuillez rentrer une valeur correcte", vbCritical, "Incorrect Value")

dimanche 4 novembre 2007 à 21:36:54 | Re : GestionErreurs

chaibat05

Il y' a plusieures façon de gérer les erreurs.
ça dépend de l' ensemble du code que tu as dans
un seul traitement.

1° Si tu n' as qu' un seul traitement style :
If ...Then
   ...
Else
  ...
End If
Pas la peine de renvoyer vers une etiquete gestion d' erreur.
Tu la traites sur la même ligne.
Si tu comptes le faire en exécutant une Sub qui analyse le type d' erreur,
comme dans l' exemple, tu fais ceci :

Private Sub ...

   If ...Then
     <correct>...
   Else
      <erreur> ...
      Goto Err_T
   End If

Exit Sub
  Err_T/
     Call GestionErreurs (Err.Number,Err.Description)

End Sub

NB:
Err.Number ==> numéro de l' erreur (Numérique)
Err.Description==>Descriptif de l' erreur (Texte)


I LIKE TO BE HERE WHEN I CAN

dimanche 4 novembre 2007 à 21:47:45 | Re : GestionErreurs

chaibat05

n' oublies pas que le Exit Sub es primordial si tu as
une etiquete Erreur.



I LIKE TO BE HERE WHEN I CAN

dimanche 4 novembre 2007 à 22:12:51 | Re : GestionErreurs

lomatic

A quoi correspond :

Err_T/ ?

Par rapport à Err.Number, c'est le cas rencontré dans l'évènement GestionErreurs ?
dimanche 4 novembre 2007 à 22:41:53 | Re : GestionErreurs

chaibat05

Erreur de ma part .
Err_T: et non pas Err_T/

Err_T est le nom que tu donnes à ton etiquete .Tu peut la nommer
comme tu veux.L' important c' est qu' il y est les deux points après.C' est la règle !

Pour l' erreur indiqué;
il s' agit des paramètres de ta Sub que tu as oublié.
 GestionErreurs  ?    ' ===>Message personnalisé
tu as oublié les deux paramètres origine et type.
Il faut que l' appel correspond au paramètres declarés.
Private Sub GestionErreurs(p_intOrigineErreur As Integer, p_intTypeErreur As Integer)

Dans l' exemple que je t' ai mis le Err.Numer correspond à p_intTypeErreur .
Oublies l' exemple .
Etant donné que p_intOrigineErreur = Index du TextBox ou s' est produite l' erreur
Et etant donn" que pour un débutant il est difficil de faire des Select Case sur des numéro d' erreur
contentes toi de Err.Description.
 Tu changes donc ta declaration de Sub en :
Private Sub GestionErreurs(p_intOrigineErreur As Integer, p_intTypeErreur As String

et tu fais un appel avec
Call GestionErreur(Index,Err.Description)

N' oublies pas de supprimer la ligne
 GestionErreurs  ?    ' ===>Message personnalisé

Et gardes
Exit Sub
Err_T:
Call GestionErreur(Index,Err.Description)

End Sub

tu fais donc un appel avec
Call GestionErreurs(Index,Err.Description)

Si ça devient flou pour toi, n' hésites pas à me le rappeler.
On réecrira le tout depuis le début.


I LIKE TO BE HERE WHEN I CAN


1 2 3

Cette discussion est classée dans : erreur, private, integer, txtdate, hsbdate


Répondre à ce message

Sujets en rapport avec ce message

pb recuperation de l'adresse mac sous winNT [ par andrea ] Bonjour, J'ai un probleme lorsque j'essaie de recuperer l'adresse mac d'un ordinateur qui est sous NT cela me renvoie toujours la valeur suivant 0.0.0 Convertir un WMF en EMF [ par daveCrocket ] Bonjour à tous,j'ai récupérer ce source pour transformer un wmf en emf, mais je ne sais pas comment je dois l'utiliser. Pouvez-vous m'aider ?********* Api qui ne marche plus avec Win2000 [ par pascal25 ] Bonjour à tous,En VB4, qui saurait me dire pourquoi le remplissage d'une forme avec une couleur en utilisant les API suivants marchait bien sous Win98 image du bureau ds une picturebox [ par SupraDolph ] salut a tous je voudrai avoir l'image de mon bureau dans une picturebox ou une image. j'utilise ce code qui fonctionnai sous win98 SE je croi mais g w Pb !!! ERREUR EXECUTION N°5 [ par Spe6men ] Bonjour a tous Je ne cherche pas vraiment a realiser un prog de cryptage mis Je voudrai juste comprendre d ou vien cet erreur Voila la source Module1 Form_LostFocus qui ne marche pas [ par titom59 ] Salut à tousje developpe un petit prog avec les skins (source_19448) et j'essaye de cacher ma fenetre principale lorsque je clique en dehors.je voudra Nouvelle Barre de titre [ par rclsilver02 ] salut, j'ai fait un porg avec une barre de titre apaprence "XP". Donc le border style de ma form = 0. Ma new barre de titre est faite avec des Picture Pourquoi mon ecran de veille marche pas [ par luke44 ] Il y aurait-il qqn qui aurait la gentillesse de me dire pourquoi ma form de screensaver reste noire quand elle part! Merci. (Note, la procedure termin Erreur de chemin ??? [ par JTCorporation ] Bijour Pourriez vous me dire ce ki cloche ds ces lognes de codes ???Private Sub IAide_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As winsock multiutilisateurs [ par ltvian ] bon ben voila le code de mon serveur winsock , mon problème est ke lorske je veux balancer le message par le bouton envoi , il n'y a k'un seul utilisa


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales