Problème de gestion d'erreur

Le
ThierryP
Bonjour à tou(te)s,

Je patauge dans un problème de gestion d'erreur.En gros, je cherche
à faire ceci :
Debut et Fin sont dimensionnés en Date
Private Sub Periode_Click()
Recommence:
Debut = 0: Fin = 0
On Error GoTo Erreur --> Si la date est invalide (35/01/2011 par
ex) je saute à l'étiquette Erreur, qui renvoie au départ
Debut = Application.InputBox("Date of Beginning (dd/mm/
yyyy)", , , , , , , 2)
On Error GoTo 0 > je croyais invalider le gestionnaire
d'erreur .
If Debut = 0 Then Periode = False: Exit Sub
On Error GoTo suite > Si la 2eme date est invalide je
saute à l'étiquette Suite
Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf &
"Click OK for same day", , , , , , , 2)
On Error GoTo 0
suite:
If Fin = 0 Then Fin = Debut Else GoTo Erreur --> Si la variable
Fin est vide, j' affecte la valeur de Debut (jour unique)
--Traitement des données --
et je continue le traitement sinon je vais à Erreur
Debut = 0: Fin = 0
Exit Sub
Erreur:
MsgBox "Typing mistake": GoTo Recommence
End Sub

J'ai plusieurs soucis :
- si je donne la valeur 35/01/2011 à Debut, je rentre bien dans mon
gestionnaire. Par contre, si je tape 15/13/2011, je rentre en mode
débogage. Pourquoi ????
- si je fais entrée pour la variable Fin, je ne vais pas à Suite, mais
en débogage. Cela fonctionnait avant que je mette le premier
gestionnaire d'erreur sur Debut.

A force de patauger, je vais me noyer !! Si une bonne âme pouvait me
lancer une bouée..

Merci d'avance

ThierryP
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michel__D
Le #23236531
Bonjour,

ThierryP a écrit :
Bonjour à tou(te)s,

Je patauge dans un problème de gestion d'erreur....En gros, je cherche
à faire ceci :
Debut et Fin sont dimensionnés en Date
Private Sub Periode_Click()
Recommence:
Debut = 0: Fin = 0
On Error GoTo Erreur -----> Si la date est invalide (35/01/2011 par
ex) je saute à l'étiquette Erreur, qui renvoie au départ
Debut = Application.InputBox("Date of Beginning (dd/mm/
yyyy)", , , , , , , 2)
On Error GoTo 0 ------------> je croyais invalider le gestionnaire
d'erreur .......
If Debut = 0 Then Periode = False: Exit Sub
On Error GoTo suite ------------> Si la 2eme date est invalide je
saute à l'étiquette Suite
Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf &
"Click OK for same day", , , , , , , 2)
On Error GoTo 0
suite:
If Fin = 0 Then Fin = Debut Else GoTo Erreur --------> Si la variable
Fin est vide, j' affecte la valeur de Debut (jour unique)
--Traitement des données --
et je continue le traitement sinon je vais à Erreur
Debut = 0: Fin = 0
Exit Sub
Erreur:
MsgBox "Typing mistake": GoTo Recommence
End Sub

J'ai plusieurs soucis :
- si je donne la valeur 35/01/2011 à Debut, je rentre bien dans mon
gestionnaire. Par contre, si je tape 15/13/2011, je rentre en mode
débogage. Pourquoi ????
- si je fais entrée pour la variable Fin, je ne vais pas à Suite, mais
en débogage. Cela fonctionnait avant que je mette le premier
gestionnaire d'erreur sur Debut.

A force de patauger, je vais me noyer !! Si une bonne âme pouvait me
lancer une bouée........

Merci d'avance

ThierryP



Il y a différente manière d'aborder ce problème, voici ma vision de la chose :

Private Sub Periode_Click()
Dim DateTmp As String

Do
DateTmp = InputBox("Date of Beginning (dd/mm/yyyy")
Loop Until IsDate(DateTmp)
Debut = CDate(DateTmp)
DateTmp = ""
Do
DateTmp = InputBox("Date of End (dd/mm/yyyy" & _
VbCrLf & "Click OK for same day")
If Len(Trim(DateTmp=)) = 0 Then Exit Do
Loop Until IsDate(DateTmp)
If Len(Trim(DateTmp=))=0 Then
Fin = Debut
Else
Fin = CDate(DateFin)
End If

End Sub
Péhemme
Le #23236511
Bonjour ThierryP,

Même si je n'ai pas très bien compris ton problème, je m'y attèle.
Je n'ai pas compris :
Debut et Fin sont dimensionnés en Date


sachant que ce qui sort d'une inputbox en type 2 est du string.
Je te propose donc le jeu de contrôle suivant :
Sub Période()
Dim Début As String, Fin As String
'Dim Période As Boolean

Recommence:
'>>>>>>>>>>>>>> Saisie et Contrôle Début <<<<<<<<<<<<<<
Début = Application.InputBox("Date of Beginning (dd/mm/yyyy)", , , , , ,
, 2)
Select Case Début
Case Is = False
MsgBox "Vous avez annulé la saisie"
Exit Sub
Case Is = ""
MsgBox "Il faut saisir une date"
Exit Sub
End Select
If Not IsDate(Début) Then
MsgBox "Il faut saisir une date valide"
GoTo Recommence
End If
'>>>>>>>>>>>>>> Saisie et Contrôle Fin <<<<<<<<<<<<<<
RecommenceFin:
Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf & _
"Click OK for same day", , , , , , , 2)
Select Case Fin
Case Is = False
MsgBox "Vous avez annulé la saisie"
GoTo RecommenceFin
Case Is = ""
Fin = Début
End Select
If Not IsDate(Fin) Or Fin < Début Then
MsgBox "Il faut saisir une date valide" & vbNewLine & _
"Ou :" & vbNewLine & _
"La date de Fin doit être postérieure OU égale à Début"
GoTo RecommenceFin 'Exit Sub
End If
'>>>>>>>>>>> Traitement de la macro <<<<<<<<<<<<<<<<
With Sheets(1)
.Cells(5, 2) = CDate(Format(Début, "dd/mm/yyyy"))
.Cells(5, 3) = CDate(Format(Fin, "dd/mm/yyyy"))
End With

End Sub

Michel (le seul qui s'accroche)


"ThierryP" news:
Bonjour à tou(te)s,

Je patauge dans un problème de gestion d'erreur....En gros, je cherche
à faire ceci :
Debut et Fin sont dimensionnés en Date
Private Sub Periode_Click()
Recommence:
Debut = 0: Fin = 0
On Error GoTo Erreur -----> Si la date est invalide (35/01/2011 par
ex) je saute à l'étiquette Erreur, qui renvoie au départ
Debut = Application.InputBox("Date of Beginning (dd/mm/
yyyy)", , , , , , , 2)
On Error GoTo 0 ------------> je croyais invalider le gestionnaire
d'erreur .......
If Debut = 0 Then Periode = False: Exit Sub
On Error GoTo suite ------------> Si la 2eme date est invalide je
saute à l'étiquette Suite
Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf &
"Click OK for same day", , , , , , , 2)
On Error GoTo 0
suite:
If Fin = 0 Then Fin = Debut Else GoTo Erreur --------> Si la variable
Fin est vide, j' affecte la valeur de Debut (jour unique)
--Traitement des données --
et je continue le traitement sinon je vais à Erreur
Debut = 0: Fin = 0
Exit Sub
Erreur:
MsgBox "Typing mistake": GoTo Recommence
End Sub

J'ai plusieurs soucis :
- si je donne la valeur 35/01/2011 à Debut, je rentre bien dans mon
gestionnaire. Par contre, si je tape 15/13/2011, je rentre en mode
débogage. Pourquoi ????
- si je fais entrée pour la variable Fin, je ne vais pas à Suite, mais
en débogage. Cela fonctionnait avant que je mette le premier
gestionnaire d'erreur sur Debut.

A force de patauger, je vais me noyer !! Si une bonne âme pouvait me
lancer une bouée........

Merci d'avance

ThierryP
ThierryP
Le #23236601
Bonjour,

Eh ben, dimanche pluvieux ou bien ?? :-)))
Merci de me mâcher le travail !! Je vais tester en ajoutant juste le
petit test de Péhemme (Fin < Debut ) et tout devrait rouler !

ThierryP

On 27 mar, 14:22, Michel__D wrote:
Bonjour,

ThierryP a crit :



> Bonjour tou(te)s,

> Je patauge dans un probl me de gestion d'erreur....En gros, je cherche
> faire ceci :
> Debut et Fin sont dimensionn s en Date
> Private Sub Periode_Click()
> Recommence:
> Debut = 0: Fin = 0
> On Error GoTo Erreur -----> Si la date est invalide (35/01/2011 par
> ex) je saute l' tiquette Erreur, qui renvoie au d part
> Debut = Application.InputBox("Date of Beginning (dd/mm/
> yyyy)", , , , , , , 2)
> On Error GoTo 0 ------------> je croyais invalider le gestionnaire
> d'erreur .......
> If Debut = 0 Then Periode = False: Exit Sub
> On Error GoTo suite ------------> Si la 2eme date est invalide je
> saute l' tiquette Suite
> Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf &
> "Click OK for same day", , , , , , , 2)
> On Error GoTo 0
> suite:
> If Fin = 0 Then Fin = Debut Else GoTo Erreur --------> Si la variab le
> Fin est vide, j' affecte la valeur de Debut  (jour unique)
> --Traitement des donn es --
> et je continue le traitement sinon je vais Erreur
> Debut = 0: Fin = 0
> Exit Sub
> Erreur:
> MsgBox "Typing mistake": GoTo Recommence
> End Sub

> J'ai plusieurs soucis :
> - si je donne la valeur 35/01/2011 Debut, je rentre bien dans mon
> gestionnaire. Par contre, si je tape 15/13/2011, je rentre en mode
> d bogage. Pourquoi ????
> - si je fais entr e pour la variable Fin, je ne vais pas Suite, mais
> en d bogage. Cela fonctionnait avant que je mette le premier
> gestionnaire d'erreur sur Debut.

> A force de patauger, je vais me noyer !! Si une bonne me pouvait me
> lancer une bou e........

> Merci d'avance

> ThierryP

Il y a diff rente mani re d'aborder ce probl me, voici ma vision de la ch ose :

Private Sub Periode_Click()
Dim DateTmp As String

Do
   DateTmp = InputBox("Date of Beginning (dd/mm/yyyy")
Loop Until IsDate(DateTmp)
Debut = CDate(DateTmp)
DateTmp = ""
Do
   DateTmp = InputBox("Date of End (dd/mm/yyyy" & _
     VbCrLf & "Click OK for same day")
   If Len(Trim(DateTmp=)) = 0 Then Exit Do
Loop Until IsDate(DateTmp)
If Len(Trim(DateTmp=))=0 Then
   Fin = Debut
Else
   Fin = CDate(DateFin)
End If

End Sub
ThierryP
Le #23236591
Non, non tu n'es pas le seul à t'accrocher !! Moins de monde qu'au bon
vieux temps,
mais on retrouve quand même des anciens :-))))))

Je vais faire un mix de ta solution et de celle de Michel__D et ça va
le faire !

Néanmoins, il y des trucs que je ne comprends pas dans les
gestionnaires d'erreur :-(

Merci !

ThierryP

On 27 mar, 14:29, Péhemme
Bonjour ThierryP,

M me si je n'ai pas tr s bien compris ton probl me, je m'y att le.
Je n'ai pas compris :>Debut et Fin sont dimensionn s en Date

sachant que ce qui sort d'une inputbox en type 2 est du string.
Je te propose donc le jeu de contr le suivant :
Sub P riode()
Dim D but As String, Fin As String
'Dim P riode As Boolean

Recommence:
'>>>>>>>>>>>>>>  Saisie et Contr le D but <<<<<<<<<<<<<<
    D but = Application.InputBox("Date of Beginning (dd/mm/yyyy)", , , , , ,
, 2)
    Select Case D but
        Case Is = False
             MsgBox "Vous avez annul la saisie"
             Exit Sub
        Case Is = ""
            MsgBox "Il faut saisir une date"
            Exit Sub
    End Select
    If Not IsDate(D but) Then
        MsgBox "Il faut saisir une date valide"
        GoTo Recommence
    End If
'>>>>>>>>>>>>>>  Saisie et Contr le Fin <<<<<<<<<<<<<<
RecommenceFin:
    Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf & _
            "Click OK for same day", , , , , , , 2)
    Select Case Fin
        Case Is = False
             MsgBox "Vous avez annul la saisie"
             GoTo RecommenceFin
        Case Is = ""
            Fin = D but
    End Select
    If Not IsDate(Fin) Or Fin < D but Then
        MsgBox "Il faut saisir une date valide" & vbNewLine & _
            "Ou :" & vbNewLine & _
            "La date de Fin doit tre post rieure OU gale D bu t"
        GoTo RecommenceFin 'Exit Sub
    End If
'>>>>>>>>>>>  Traitement de la macro  <<<<<<<<<<<<<<<<
    With Sheets(1)
        .Cells(5, 2) = CDate(Format(D but, "dd/mm/yyyy"))
        .Cells(5, 3) = CDate(Format(Fin, "dd/mm/yyyy"))
    End With

End Sub

Michel (le seul qui s'accroche)

"ThierryP" Bonjour tou(te)s,

Je patauge dans un probl me de gestion d'erreur....En gros, je cherche
faire ceci :
Debut et Fin sont dimensionn s en Date
Private Sub Periode_Click()
Recommence:
Debut = 0: Fin = 0
On Error GoTo Erreur -----> Si la date est invalide (35/01/2011 par
ex) je saute l' tiquette Erreur, qui renvoie au d part
Debut = Application.InputBox("Date of Beginning (dd/mm/
yyyy)", , , , , , , 2)
On Error GoTo 0 ------------> je croyais invalider le gestionnaire
d'erreur .......
If Debut = 0 Then Periode = False: Exit Sub
On Error GoTo suite ------------> Si la 2eme date est invalide je
saute l' tiquette Suite
Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf &
"Click OK for same day", , , , , , , 2)
On Error GoTo 0
suite:
If Fin = 0 Then Fin = Debut Else GoTo Erreur --------> Si la variable
Fin est vide, j' affecte la valeur de Debut  (jour unique)
--Traitement des donn es --
et je continue le traitement sinon je vais Erreur
Debut = 0: Fin = 0
Exit Sub
Erreur:
MsgBox "Typing mistake": GoTo Recommence
End Sub

J'ai plusieurs soucis :
- si je donne la valeur 35/01/2011 Debut, je rentre bien dans mon
gestionnaire. Par contre, si je tape 15/13/2011, je rentre en mode
d bogage. Pourquoi ????
- si je fais entr e pour la variable Fin, je ne vais pas Suite, mais
en d bogage. Cela fonctionnait avant que je mette le premier
gestionnaire d'erreur sur Debut.

A force de patauger, je vais me noyer !! Si une bonne me pouvait me
lancer une bou e........

Merci d'avance

ThierryP
MichD
Le #23239611
Bonjour,

J'attire ton attention sur ceci :

Si dans la boîte de dialogue de l'inputbox l'usager entre "01/14/2011"
que voudrais-tu obtenir ? Cette date est impossible...observe comment
cette date est traitée par la procédure...

MichD
--------------------------------------------
Péhemme
Le #23236841
Est-ce que cet exemple peut t'aider à y voir un peu plus clair ?

Sub PériodeAvecGestionErreur()
Dim Début As String, Fin As String
Recommence:
'>>>>>>>>>>>>>> Saisie et Contrôle Début <<<<<<<<<<<<<<
Début = Application.InputBox("Date of Beginning (dd/mm/yyyy)", , , , , ,
, 2)
Select Case Début
Case Is = False
GoTo Erreur_1
Case Is = ""
GoTo Erreur_2
End Select
If Not IsDate(Début) Then
GoTo Erreur_3
End If
'>>>>>>>>>>>>>> Saisie et Contrôle Fin <<<<<<<<<<<<<<
RecommenceFin:
Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf & _
"Click OK for same day", , , , , , , 2)
Select Case Fin
Case Is = False
GoTo Erreur_4
Case Is = ""
Fin = Début
End Select
If Not IsDate(Fin) Or Fin < Début Then
MsgBox "Il faut saisir une date valide" & vbNewLine & _
"Ou :" & vbNewLine & _
"La date de Fin doit être postérieure OU égale à Début"
GoTo RecommenceFin
End If
'>>>>>>>>>>> Traitement de la macro <<<<<<<<<<<<<<<<
With Sheets(1)
.Cells(5, 2) = CDate(Format(Début, "dd/mm/yyyy"))
.Cells(5, 3) = CDate(Format(Fin, "dd/mm/yyyy"))
End With
Exit Sub
'>>>>>>>>>>> Étiquettes d'Erreur <<<<<<<<<<<<<<<<<<<<<
Erreur_1:
MsgBox "Vous avez cliqué sur Annuler" & vbNewLine & _
"=> On sort de la Procédure"
Exit Sub
Erreur_2:
MsgBox "Vous N'avez PAS saisi de Date" & vbNewLine & _
"=> On relance la possibilité de saisie"
GoTo Recommence
Erreur_3:
MsgBox "Il faut saisir une date VALIDE" & vbNewLine & _
"=> On relance la possibilité de saisie"
GoTo Recommence
Erreur_4:
MsgBox "Vous avez annulé la saisie" & vbNewLine & _
"=> On sort de la partie Fin de la Procédure" & vbNewLine & _
"mais la partie Début est conservée" & vbNewLine & _
"=> On relance la possibilité de saisie Fin"
GoTo RecommenceFin
End Sub

Michel


"ThierryP" news:
Non, non tu n'es pas le seul à t'accrocher !! Moins de monde qu'au bon
vieux temps,
mais on retrouve quand même des anciens :-))))))

Je vais faire un mix de ta solution et de celle de Michel__D et ça va
le faire !

Néanmoins, il y des trucs que je ne comprends pas dans les
gestionnaires d'erreur :-(

Merci !

ThierryP

On 27 mar, 14:29, Péhemme
Bonjour ThierryP,

M me si je n'ai pas tr s bien compris ton probl me, je m'y att le.
Je n'ai pas compris :>Debut et Fin sont dimensionn s en Date

sachant que ce qui sort d'une inputbox en type 2 est du string.
Je te propose donc le jeu de contr le suivant :
Sub P riode()
Dim D but As String, Fin As String
'Dim P riode As Boolean

Recommence:
'>>>>>>>>>>>>>> Saisie et Contr le D but <<<<<<<<<<<<<<
D but = Application.InputBox("Date of Beginning (dd/mm/yyyy)", , , , , ,
, 2)
Select Case D but
Case Is = False
MsgBox "Vous avez annul la saisie"
Exit Sub
Case Is = ""
MsgBox "Il faut saisir une date"
Exit Sub
End Select
If Not IsDate(D but) Then
MsgBox "Il faut saisir une date valide"
GoTo Recommence
End If
'>>>>>>>>>>>>>> Saisie et Contr le Fin <<<<<<<<<<<<<<
RecommenceFin:
Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf & _
"Click OK for same day", , , , , , , 2)
Select Case Fin
Case Is = False
MsgBox "Vous avez annul la saisie"
GoTo RecommenceFin
Case Is = ""
Fin = D but
End Select
If Not IsDate(Fin) Or Fin < D but Then
MsgBox "Il faut saisir une date valide" & vbNewLine & _
"Ou :" & vbNewLine & _
"La date de Fin doit tre post rieure OU gale D but"
GoTo RecommenceFin 'Exit Sub
End If
'>>>>>>>>>>> Traitement de la macro <<<<<<<<<<<<<<<<
With Sheets(1)
.Cells(5, 2) = CDate(Format(D but, "dd/mm/yyyy"))
.Cells(5, 3) = CDate(Format(Fin, "dd/mm/yyyy"))
End With

End Sub

Michel (le seul qui s'accroche)

"ThierryP" denews:
Bonjour tou(te)s,

Je patauge dans un probl me de gestion d'erreur....En gros, je cherche
faire ceci :
Debut et Fin sont dimensionn s en Date
Private Sub Periode_Click()
Recommence:
Debut = 0: Fin = 0
On Error GoTo Erreur -----> Si la date est invalide (35/01/2011 par
ex) je saute l' tiquette Erreur, qui renvoie au d part
Debut = Application.InputBox("Date of Beginning (dd/mm/
yyyy)", , , , , , , 2)
On Error GoTo 0 ------------> je croyais invalider le gestionnaire
d'erreur .......
If Debut = 0 Then Periode = False: Exit Sub
On Error GoTo suite ------------> Si la 2eme date est invalide je
saute l' tiquette Suite
Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf &
"Click OK for same day", , , , , , , 2)
On Error GoTo 0
suite:
If Fin = 0 Then Fin = Debut Else GoTo Erreur --------> Si la variable
Fin est vide, j' affecte la valeur de Debut (jour unique)
--Traitement des donn es --
et je continue le traitement sinon je vais Erreur
Debut = 0: Fin = 0
Exit Sub
Erreur:
MsgBox "Typing mistake": GoTo Recommence
End Sub

J'ai plusieurs soucis :
- si je donne la valeur 35/01/2011 Debut, je rentre bien dans mon
gestionnaire. Par contre, si je tape 15/13/2011, je rentre en mode
d bogage. Pourquoi ????
- si je fais entr e pour la variable Fin, je ne vais pas Suite, mais
en d bogage. Cela fonctionnait avant que je mette le premier
gestionnaire d'erreur sur Debut.

A force de patauger, je vais me noyer !! Si une bonne me pouvait me
lancer une bou e........

Merci d'avance

ThierryP
ThierryP
Le #23236971
Merci pour le cours ;-))))))

En fait, ceci ne me pose pas de problème. Je voulais parler de "On
error goto xxx".
Je pensais que l'on pouvait réinitialiser le gestionnaire d'erreur
dans une proc avec "on error goto 0" et en créer un autre dans
la même proc avec "on error goto yyy", etc... Mais apparemment non, en
tous cas pas sur mon PC !!!

L'essentiel est d'avoir une solution fonctionnelle !

Merci

On 27 mar, 17:31, Péhemme
Est-ce que cet exemple peut t'aider y voir un peu plus clair ?

Sub P riodeAvecGestionErreur()
Dim D but As String, Fin As String
Recommence:
'>>>>>>>>>>>>>>  Saisie et Contr le D but <<<<<<<<<<<<<<
    D but = Application.InputBox("Date of Beginning (dd/mm/yyyy)", , , , , ,
, 2)
    Select Case D but
        Case Is = False
            GoTo Erreur_1
        Case Is = ""
            GoTo Erreur_2
    End Select
    If Not IsDate(D but) Then
        GoTo Erreur_3
    End If
'>>>>>>>>>>>>>>  Saisie et Contr le Fin <<<<<<<<<<<<<<
RecommenceFin:
    Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf & _
            "Click OK for same day", , , , , , , 2)
    Select Case Fin
        Case Is = False
             GoTo Erreur_4
        Case Is = ""
            Fin = D but
    End Select
    If Not IsDate(Fin) Or Fin < D but Then
        MsgBox "Il faut saisir une date valide" & vbNewLine & _
            "Ou :" & vbNewLine & _
            "La date de Fin doit tre post rieure OU gale D bu t"
        GoTo RecommenceFin
    End If
'>>>>>>>>>>>  Traitement de la macro  <<<<<<<<<<<<<<<<
    With Sheets(1)
        .Cells(5, 2) = CDate(Format(D but, "dd/mm/yyyy"))
        .Cells(5, 3) = CDate(Format(Fin, "dd/mm/yyyy"))
    End With
    Exit Sub
'>>>>>>>>>>> tiquettes d'Erreur  <<<<<<<<<<<<<<<<<<<<<
Erreur_1:
    MsgBox "Vous avez cliqu sur Annuler" & vbNewLine & _
        "=> On sort de la Proc dure"
    Exit Sub
Erreur_2:
    MsgBox "Vous N'avez PAS saisi de Date" & vbNewLine & _
        "=> On relance la possibilit de saisie"
    GoTo Recommence
Erreur_3:
    MsgBox "Il faut saisir une date VALIDE" & vbNewLine & _
        "=> On relance la possibilit de saisie"
    GoTo Recommence
Erreur_4:
    MsgBox "Vous avez annul la saisie" & vbNewLine & _
        "=> On sort de la partie Fin de la Proc dure" & vbNewLi ne & _
        "mais la partie D but est conserv e" & vbNewLine & _
        "=> On relance la possibilit de saisie Fin"
    GoTo RecommenceFin
End Sub

Michel

"ThierryP" Non, non tu n'es pas le seul t'accrocher !! Moins de monde qu'au bon
vieux temps,
mais on retrouve quand m me des anciens :-))))))

Je vais faire un mix de ta solution et de celle de Michel__D et a va
le faire !

N anmoins, il y des trucs que je ne comprends pas dans les
gestionnaires d'erreur :-(

Merci !

ThierryP

On 27 mar, 14:29, P hemme
> Bonjour ThierryP,

> M me si je n'ai pas tr s bien compris ton probl me, je m'y att le.
> Je n'ai pas compris :>Debut et Fin sont dimensionn s en Date

> sachant que ce qui sort d'une inputbox en type 2 est du string.
> Je te propose donc le jeu de contr le suivant :
> Sub P riode()
> Dim D but As String, Fin As String
> 'Dim P riode As Boolean

> Recommence:
> '>>>>>>>>>>>>>> Saisie et Contr le D but <<<<<<<<<<<<<<
> D but = Application.InputBox("Date of Beginning (dd/mm/yyyy)", , , , , ,
> , 2)
> Select Case D but
> Case Is = False
> MsgBox "Vous avez annul la saisie"
> Exit Sub
> Case Is = ""
> MsgBox "Il faut saisir une date"
> Exit Sub
> End Select
> If Not IsDate(D but) Then
> MsgBox "Il faut saisir une date valide"
> GoTo Recommence
> End If
> '>>>>>>>>>>>>>> Saisie et Contr le Fin <<<<<<<<<<<<<<
> RecommenceFin:
> Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf & _
> "Click OK for same day", , , , , , , 2)
> Select Case Fin
> Case Is = False
> MsgBox "Vous avez annul la saisie"
> GoTo RecommenceFin
> Case Is = ""
> Fin = D but
> End Select
> If Not IsDate(Fin) Or Fin < D but Then
> MsgBox "Il faut saisir une date valide" & vbNewLine & _
> "Ou :" & vbNewLine & _
> "La date de Fin doit tre post rieure OU gale D but"
> GoTo RecommenceFin 'Exit Sub
> End If
> '>>>>>>>>>>> Traitement de la macro <<<<<<<<<<<<<<<<
> With Sheets(1)
> .Cells(5, 2) = CDate(Format(D but, "dd/mm/yyyy"))
> .Cells(5, 3) = CDate(Format(Fin, "dd/mm/yyyy"))
> End With

> End Sub

> Michel (le seul qui s'accroche)

> "ThierryP" > denews: m...
> Bonjour tou(te)s,

> Je patauge dans un probl me de gestion d'erreur....En gros, je cherche
> faire ceci :
> Debut et Fin sont dimensionn s en Date
> Private Sub Periode_Click()
> Recommence:
> Debut = 0: Fin = 0
> On Error GoTo Erreur -----> Si la date est invalide (35/01/2011 par
> ex) je saute l' tiquette Erreur, qui renvoie au d part
> Debut = Application.InputBox("Date of Beginning (dd/mm/
> yyyy)", , , , , , , 2)
> On Error GoTo 0 ------------> je croyais invalider le gestionnaire
> d'erreur .......
> If Debut = 0 Then Periode = False: Exit Sub
> On Error GoTo suite ------------> Si la 2eme date est invalide je
> saute l' tiquette Suite
> Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf &
> "Click OK for same day", , , , , , , 2)
> On Error GoTo 0
> suite:
> If Fin = 0 Then Fin = Debut Else GoTo Erreur --------> Si la variab le
> Fin est vide, j' affecte la valeur de Debut (jour unique)
> --Traitement des donn es --
> et je continue le traitement sinon je vais Erreur
> Debut = 0: Fin = 0
> Exit Sub
> Erreur:
> MsgBox "Typing mistake": GoTo Recommence
> End Sub

> J'ai plusieurs soucis :
> - si je donne la valeur 35/01/2011 Debut, je rentre bien dans mon
> gestionnaire. Par contre, si je tape 15/13/2011, je rentre en mode
> d bogage. Pourquoi ????
> - si je fais entr e pour la variable Fin, je ne vais pas Suite, mais
> en d bogage. Cela fonctionnait avant que je mette le premier
> gestionnaire d'erreur sur Debut.

> A force de patauger, je vais me noyer !! Si une bonne me pouvait me
> lancer une bou e........

> Merci d'avance

> ThierryP
isabelle
Le #23237021
bonjour Thierry,

tu pourrais utiliser
Err.Clear

isabelle
------------------------------------------------------------------

Le 2011-03-27 10:48, ThierryP a écrit :
Merci pour le cours ;-))))))

En fait, ceci ne me pose pas de problème. Je voulais parler de "On
error goto xxx".
Je pensais que l'on pouvait réinitialiser le gestionnaire d'erreur
dans une proc avec "on error goto 0" et en créer un autre dans
la même proc avec "on error goto yyy", etc... Mais apparemment non, en
tous cas pas sur mon PC !!!

L'essentiel est d'avoir une solution fonctionnelle !

Merci


ThierryP
Le #23237011
Bonsoir Isabelle,

Il va falloir que je me penche sérieusement là-dessus....Jusqu'à
présent, je m'en tirais avec des trucs simples, mais là j'ai des
machines avec XP en allemand et Office 2007 en anglais, windows 7 en
anglais + office 2010 anglais, vista + office xp en anglais, et moi
j'ai office xp en français avec évidemment des heures et des dates à
gérer !!

Merci

ThierryP

On 27 mar, 18:56, isabelle
bonjour Thierry,

tu pourrais utiliser
Err.Clear

isabelle
------------------------------------------------------------------

Le 2011-03-27 10:48, ThierryP a écrit :

> Merci pour le cours ;-))))))

> En fait, ceci ne me pose pas de problème. Je voulais parler de "On
> error goto xxx".
> Je pensais que l'on pouvait réinitialiser le gestionnaire d'erreur
> dans une proc avec "on error goto 0" et en créer un autre dans
> la même proc avec "on error goto yyy", etc... Mais apparemment non, e n
> tous cas pas sur mon PC !!!

> L'essentiel est d'avoir une solution fonctionnelle !

> Merci
h2so4
Le #23237231
Thierry,

Erreur:
MsgBox "Typing mistake": GoTo Recommence
End Sub







je n'ai pas testé, mais je pense que à la place du "goto recommence",
tu dois faire un resume recommence. ceci termine ton traitement
d'erreur.






ThierryP formulated the question :




Merci pour le cours ;-))))))

En fait, ceci ne me pose pas de problème. Je voulais parler de "On
error goto xxx".
Je pensais que l'on pouvait réinitialiser le gestionnaire d'erreur
dans une proc avec "on error goto 0" et en créer un autre dans
la même proc avec "on error goto yyy", etc... Mais apparemment non, en
tous cas pas sur mon PC !!!

L'essentiel est d'avoir une solution fonctionnelle !

Merci

On 27 mar, 17:31, Péhemme
Est-ce que cet exemple peut t'aider y voir un peu plus clair ?

Sub P riodeAvecGestionErreur()
Dim D but As String, Fin As String
Recommence:
'>>>>>>>>>>>>>>  Saisie et Contr le D but <<<<<<<<<<<<<<
    D but = Application.InputBox("Date of Beginning (dd/mm/yyyy)", , , , , ,
, 2)
    Select Case D but
        Case Is = False
            GoTo Erreur_1
        Case Is = ""
            GoTo Erreur_2
    End Select
    If Not IsDate(D but) Then
        GoTo Erreur_3
    End If
'>>>>>>>>>>>>>>  Saisie et Contr le Fin <<<<<<<<<<<<<<
RecommenceFin:
    Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf & _
            "Click OK for same day", , , , , , , 2)
    Select Case Fin
        Case Is = False
             GoTo Erreur_4
        Case Is = ""
            Fin = D but
    End Select
    If Not IsDate(Fin) Or Fin < D but Then
        MsgBox "Il faut saisir une date valide" & vbNewLine & _
            "Ou :" & vbNewLine & _
            "La date de Fin doit tre post rieure OU gale D but"
        GoTo RecommenceFin
    End If
'>>>>>>>>>>>  Traitement de la macro  <<<<<<<<<<<<<<<<
    With Sheets(1)
        .Cells(5, 2) = CDate(Format(D but, "dd/mm/yyyy"))
        .Cells(5, 3) = CDate(Format(Fin, "dd/mm/yyyy"))
    End With
    Exit Sub
'>>>>>>>>>>> tiquettes d'Erreur  <<<<<<<<<<<<<<<<<<<<<
Erreur_1:
    MsgBox "Vous avez cliqu sur Annuler" & vbNewLine & _
        "=> On sort de la Proc dure"
    Exit Sub
Erreur_2:
    MsgBox "Vous N'avez PAS saisi de Date" & vbNewLine & _
        "=> On relance la possibilit de saisie"
    GoTo Recommence
Erreur_3:
    MsgBox "Il faut saisir une date VALIDE" & vbNewLine & _
        "=> On relance la possibilit de saisie"
    GoTo Recommence
Erreur_4:
    MsgBox "Vous avez annul la saisie" & vbNewLine & _
        "=> On sort de la partie Fin de la Proc dure" & vbNewLine & _
        "mais la partie D but est conserv e" & vbNewLine & _
        "=> On relance la possibilit de saisie Fin"
    GoTo RecommenceFin
End Sub

Michel

"ThierryP" denews:
Non, non tu n'es pas le seul t'accrocher !! Moins de monde qu'au bon vieux
temps, mais on retrouve quand m me des anciens :-))))))

Je vais faire un mix de ta solution et de celle de Michel__D et a va
le faire !

N anmoins, il y des trucs que je ne comprends pas dans les
gestionnaires d'erreur :-(

Merci !

ThierryP

On 27 mar, 14:29, P hemme
Bonjour ThierryP,



M me si je n'ai pas tr s bien compris ton probl me, je m'y att le.
Je n'ai pas compris :>Debut et Fin sont dimensionn s en Date
sachant que ce qui sort d'une inputbox en type 2 est du string.
Je te propose donc le jeu de contr le suivant :
Sub P riode()
Dim D but As String, Fin As String
'Dim P riode As Boolean



Recommence:
'>>>>>>>>>>>>>> Saisie et Contr le D but <<<<<<<<<<<<<<
D but = Application.InputBox("Date of Beginning (dd/mm/yyyy)", , , , , ,
, 2)
Select Case D but
Case Is = False
MsgBox "Vous avez annul la saisie"
Exit Sub
Case Is = ""
MsgBox "Il faut saisir une date"
Exit Sub
End Select
If Not IsDate(D but) Then
MsgBox "Il faut saisir une date valide"
GoTo Recommence
End If
'>>>>>>>>>>>>>> Saisie et Contr le Fin <<<<<<<<<<<<<<
RecommenceFin:
Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf & _
"Click OK for same day", , , , , , , 2)
Select Case Fin
Case Is = False
MsgBox "Vous avez annul la saisie"
GoTo RecommenceFin
Case Is = ""
Fin = D but
End Select
If Not IsDate(Fin) Or Fin < D but Then
MsgBox "Il faut saisir une date valide" & vbNewLine & _
"Ou :" & vbNewLine & _
"La date de Fin doit tre post rieure OU gale D but"
GoTo RecommenceFin 'Exit Sub
End If
'>>>>>>>>>>> Traitement de la macro <<<<<<<<<<<<<<<<
With Sheets(1)
.Cells(5, 2) = CDate(Format(D but, "dd/mm/yyyy"))
.Cells(5, 3) = CDate(Format(Fin, "dd/mm/yyyy"))
End With



End Sub



Michel (le seul qui s'accroche)



"ThierryP" denews:
Bonjour tou(te)s,



Je patauge dans un probl me de gestion d'erreur....En gros, je cherche
faire ceci :
Debut et Fin sont dimensionn s en Date
Private Sub Periode_Click()
Recommence:
Debut = 0: Fin = 0
On Error GoTo Erreur -----> Si la date est invalide (35/01/2011 par
ex) je saute l' tiquette Erreur, qui renvoie au d part
Debut = Application.InputBox("Date of Beginning (dd/mm/
yyyy)", , , , , , , 2)
On Error GoTo 0 ------------> je croyais invalider le gestionnaire
d'erreur .......
If Debut = 0 Then Periode = False: Exit Sub
On Error GoTo suite ------------> Si la 2eme date est invalide je
saute l' tiquette Suite
Fin = Application.InputBox("Date of End (dd/mm/yyyy)" & vbCrLf &
"Click OK for same day", , , , , , , 2)
On Error GoTo 0
suite:
If Fin = 0 Then Fin = Debut Else GoTo Erreur --------> Si la variable
Fin est vide, j' affecte la valeur de Debut (jour unique)
--Traitement des donn es --
et je continue le traitement sinon je vais Erreur
Debut = 0: Fin = 0
Exit Sub
Erreur:
MsgBox "Typing mistake": GoTo Recommence
End Sub



J'ai plusieurs soucis :
- si je donne la valeur 35/01/2011 Debut, je rentre bien dans mon
gestionnaire. Par contre, si je tape 15/13/2011, je rentre en mode
d bogage. Pourquoi ????
- si je fais entr e pour la variable Fin, je ne vais pas Suite, mais
en d bogage. Cela fonctionnait avant que je mette le premier
gestionnaire d'erreur sur Debut.



A force de patauger, je vais me noyer !! Si une bonne me pouvait me
lancer une bou e........



Merci d'avance



ThierryP







--
h2so4
ca PAN
pique DORA
.
Publicité
Poster une réponse
Anonyme