Erreur zéro ligne zéro

Messages postés
609
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
17 janvier 2020
- - Dernière réponse : vb95
Messages postés
2023
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 janvier 2020
- 17 janv. 2020 à 15:53
Bonjour,
Dans un programme qui fonctionne la plupart du temps correctement j'ai très rarement une erreur interceptée par "on error goto" mais qui donne Err.Number = 0 et Erl = 0.
Comment est-ce possible ?
Afficher la suite 

9 réponses

Messages postés
2023
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 janvier 2020
80
Commenter la réponse de vb95
Messages postés
609
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
17 janvier 2020
2
0
Merci
Merci pour ta réponse mais je n'y trouve pas la solution,
je répète que 999 fois sur 1000 ça fonctionne
voici le début et la fin de la procédure en question
Private Sub AskPin_Click()
3740     On Error GoTo AskPin_Click_Error

3750  If Len(Userid) < 6 Then
3760      MsgBox ("Le nom d'utilisateur doit comporter au moins 6 caractères"), vbExclamation
3770      Exit Sub
3780  End If
...
4910  Instr1.Visible = True
4920  Instr3.Visible = False
4930  End If
4940  On Error GoTo 0
4950  Exit Sub
AskPin_Click_Error:
4960      ErrHdl ("AskPin_Click dans Connexion")
End Sub
vb95
Messages postés
2023
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 janvier 2020
80 -
Bonjour !
Tu peux supprimer le
On Error Goto 0
car le gestionnaire d'erreurs est automatiquement désactivé en sortant de la Sub
Sinon je ne vois pas la raison : le On Error Goto est bien la première ligne de la Sub pour gérer l'erreur ce qui est tout à fait correct
Commenter la réponse de Herve_be
Messages postés
609
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
17 janvier 2020
2
0
Merci
Pour ajouter une gestion d'erreur à une procédure j'utilise MZ-Tools.
Il insère d'office toutes les lignes ci-dessous (sauf Private Sub et End Sub).

Je pense qu'il n'y a pas d'erreur 0 dans ce module, peut-être une erreur dans une autre procédure ou une autre fonction appelée et qui n'a pas de gestion d'erreur ?

Private Sub Help_Click()
On Error GoTo Help_Click_Error
...
On Error GoTo 0
Exit Sub

Help_Click_Error:
    ErrHdl ("Help_Click dans Angles")
End Sub
Commenter la réponse de Herve_be
Messages postés
609
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
17 janvier 2020
2
0
Merci
J'ai trouvé un cas où j'ai une erreur zéro
Private Sub Drawgraph()
30170    On Error GoTo Drawgraph_Error
...
30990 Graph.Line (Val(KH) + GardeX, Graph.ScaleHeight - GardeY)-(Val(KH) + GardeX, GardeY), vbYellow
KH = "-1000000000" : pourquoi erreur 0 et pas overflow ?
vb95
Messages postés
2023
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 janvier 2020
80 -
Bonsoir !
Sans certitude je pense ceci .
La fonction Val ne sait pas quel type de valeur elle doit retourner si elle est utilisée sans variable .
Exemples
Dim A as Integer = Val("120") ' retourne un Integer
Dim B as Long = Val("120") ' retourne la même valeur mais de type Long


Dans ton code il y a juste
 Val(KH)

Or cette valeur elle est convertie en quelle type ? en aucun type de base et ceci explique l'erreur 0
Au lieu d'utiliser Val il est préférable d'utiliser Cint ou Clng pour des valeurs entières . Là le type de retour pour la valeur est bien définie

De plus KH valant "-1000000000" soit - 1 milliard ? cela rentre forcément dans le type Long ( de - 2147483648 à + 2147483647 ) si on prend sa valeur numérique

De plus pour le fonction Line les paramètres concernant les points sont de quel type ?
de souvenir ce serait Single mais sans certitude .
Commenter la réponse de Herve_be
Messages postés
609
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
17 janvier 2020
2
0
Merci
Merci pour ta réponse, c'est probablement ça.
Syntaxe de la méthode .line : object.Line [Step] (x1, y1) [Step] - (x2,y2), [color], [B][F]
x1, y1, x2 et y2 doivent être des Single.
L'erreur vient du fait que KH ne devrait pas contenir cette valeur, c'est ça que je dois corriger,
J'ai parfois erreur 0 avec un n° de ligne : je peux donc chercher dans cette direction puisque je connais l'instruction fautive.

Cependant le sujet initial est "Erreur zéro ligne zéro" : je ne comprends pas pourquoi j'ai parfois aussi ligne zéro et je ne sais pas où chercher puisque je ne sais pas quelle instruction provoque l'erreur.
Commenter la réponse de Herve_be
Messages postés
609
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
17 janvier 2020
2
0
Merci
Bonjour,
Je pense que j'ai trouvé : dans le module en question j'ai ceci
Private Sub AskPin_Click()
3740     On Error GoTo AskPin_Click_Error
...
4610    On Error Resume Next
4620    ObjSendMail.Send
...
4940  On Error GoTo 0
4950  Exit Sub
AskPin_Click_Error:
4960      ErrHdl ("AskPin_Click dans Connexion")
End Sub

Je souhaite éviter qu'un problème lors de l'envoi du mail plante l'application.
Est-il possible qu'on ait une erreur 0 ligne 0 si une erreur se produit après "On error resume next" ?
Pour l'éviter suffit-il d'ajouter "On Error GoTo AskPin_Click_Error" après "ObjSendMail.Send" ?
vb95
Messages postés
2023
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 janvier 2020
80 -
Bonjour !
Moi je ferais ceci en supprimant le
On Error Goto 0

Private Sub AskPin_Click()
3740    On Error GoTo AskPin_Click_Error
...
4620    SendMail() ' sub pour envoi mail
...
4950    Exit Sub
AskPin_Click_Error:
4960      ErrHdl ("AskPin_Click dans Connexion")
End Sub

Private Sub SendMail() 
    
    On Error ResumeNext
    ObjSendMail.Send



il faut que ObjSendMail soit en Private pour toute la Form ou tout le Module
Commenter la réponse de Herve_be
Messages postés
609
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
17 janvier 2020
2
0
Merci
Merci pour ta réponse,
Dim ObjSendMail se trouve dans (General) de la Form.

Je comprends ce que tu proposes mais je ne comprends pas pourquoi.
Quel est l'avantage par rapport à mettre "on error resume next" avant et "on error goto" après ObjSendMail.send ?
vb95
Messages postés
2023
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 janvier 2020
80 -
bonsoir
Ainsi le "On Resume Next" ne gère que l'envoi de mail
Et cela rend plus clair le code avec un seul "On Error Goto AskPin_Click_Error"

J'ai oublié le "End Sub" dans la sub SendMail()
Commenter la réponse de Herve_be
Messages postés
609
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
17 janvier 2020
2
0
Merci
OK, je vais faire comme ça.
Peux-tu me confirmer que l'oubli de "on error goto" après le "on error resume next" peut être la cause de Erreur zéro ligne zéro ?
Merci
vb95
Messages postés
2023
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 janvier 2020
80 -
bonjour !
Je ne peux te le confirmer ( VB6 est loin pour moi : 10 ans que je suis passé à VB Net et C# )
Cependant une remarque : le "On Error Goto" ne doit pas être utilisé à tout bout de champ : il est là pour gérer les erreurs imprévues ( perte de connexion Internet par exemple et là tu n'y peux rien et tu ne sais pas où elle se produira dans ton code )
Dans ce cas le "On Error Goto" se justifie dans le code gérant le téléchargement d'un fichier par exemple .
Commenter la réponse de Herve_be
Messages postés
609
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
17 janvier 2020
2
0
Merci
J'ai toujours des erreurs zéro, je ne sais pas pourquoi.
Exemples d'instructions qui donnent parfois (rarement) une erreur zéro
Tank.ListIndex = 0 ' Tank est une listbox
Page.Text = Clipboard.GetText ' Page est une textbox
i = 0 ' i est un integer
Herve_be
Messages postés
609
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
17 janvier 2020
2 -
"Avant" je n'avais jamais d'erreur zéro.
J'ai peut-être fait une modification qui provoque cela mais je ne vois pas ce que ça peut être.
Si quelqu'un a une idée ...
vb95
Messages postés
2023
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 janvier 2020
80 -
Bonjour !
L'idée que j'ai est simple : enlever tous les "On Error Goto" et "On Error Resume Next" et empêcher l'erreur de se produire au cas par cas avec des If ....... End If.
C'est ce que je ferais . Regarde ma remarque à mon précédent message

Exemple basique
if Fichier = "" then ' gère erreur nom de fichier inexistant
      ' Message d'erreur
      Exit sub
End if
' on lit le fichier ici

Commenter la réponse de Herve_be