Herve_be
Messages postés978Date d'inscriptionmercredi 4 août 2010StatutMembreDernière intervention 9 juin 20232 13 déc. 2018 à 15:28
La difficulté est que 99 fois sur 100 ça fonctionne.
J'ai fait le tour de tous les endroits où je modifie "srcnr" :
c'est toujours For srcnr = 1 To n(1) * n(2)
je ne comprends donc pas comment à un moment srcnr peut être supérieur à n(1) * n(2)
l'array Sources(srcnr) est ReDimensionné à n(1) * n(2) aussi.
Une autre bizarerie est que juste avant le code que j'ai donné ci-dessus je fais
ProgressBar.Visible = True
et juste après
ProgressBar.Visible = False
or quand l'erreur se produit la barre de progression n'est pas visible :
comment l'erreur peut-elle se produire sur une instruction qui se situe entre true et false ?
J'ai mis un DoEvents parce que le processus est relativement long, je peux l'interrompre avec Escape : je pense que l'évènement ne serait pas intercepté s'il n'y avait pas un DoEvents dans la boucle.
NHenry
Messages postés15083Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention19 septembre 2023159 Modifié le 13 déc. 2018 à 18:28
Fais un log avant ta boucle pour mettre les valeur contenues dans ton tableau.
De toute façon, ce n'est pas un bug du langage, c'est un bug de ton code.
Ton tableau quelle portée (fonction, module, globale) ?
et concernant srcnr ?
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165 Modifié le 14 déc. 2018 à 01:21
Bonjour !
A mon avis n(1) doit être modifié soit dans la boucle For Next soit dans les évènements appelés lors du DoEvents() ce qui fait que Sources(srcnr) décleche una alerte de dépassement de limites ( Out of Range en anglais )
Quant au fait que l'erreur se produit alors que la barre de progression est devenue invible ( donc après la boucle For Next le "On Error Goto" fait sauter le programme aux lignes gérant l'erreur et le programme se poursuit après la ligne de l'erreur et sort du for Next
Mets un Stop après la ligne 7040 où tu affiches n1), n(2) et scrnr
Herve_be
Messages postés978Date d'inscriptionmercredi 4 août 2010StatutMembreDernière intervention 9 juin 20232 Modifié le 18 déc. 2018 à 11:36
Bonjour,
Je n'ai pas reçu de notification donc je n'avais pas vu vos réponses.
Entretemps pendant la boucle For ... next j'ai mis tous les contrôles en .Disabled
ainsi l'utilisateur peut cliquer compulsivement où il veut si ça dure trop longtemps, ça n'aura aucun effet.
Pour répondre à vos questions
- "Fais un log avant ta boucle pour mettre les valeur contenues dans ton tableau. " : je ne comprends pas ce que tu veux dire par "fais un log".
- "Ton tableau quelle portée (fonction, module, globale) ? et concernant srcnr ?" : module.
- " n(1) doit être modifié ... ce qui fait que Sources(srcnr) décleche una alerte" : comment se fait-il alors que n(1) ait toujours une valeur correcte quand l'erreur se déclenche ?
- "Quant au fait que l'erreur se produit alors que la barre de progression est devenue invible ( donc après la boucle For Next le "On Error Goto" fait sauter le programme aux lignes gérant l'erreur et le programme se poursuit après la ligne de l'erreur et sort du for Next " : pour ça il faudrait un Resume Next ce qui n'est pas le cas.
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165 Modifié le 18 déc. 2018 à 17:46
Bonjour Herve_be
Pardon pour mon erreur : après relecture il faut lire n(2) dans mon message précédent
Regarde donc où n(2) est susceptible d'être modifié
Autre chose : essaie ceci juste avant la boucle For …. Next
Ainsi même si n(2) est modifié nombre n'est pas modifié dans la boucle
Dim nombre as integer = n(1) * n(2) ' code à rajouter
For srcnr = 1 To nombre ' la boucle avec la borne modifiée
If Sources(srcnr).Color = SrcColor Then
'''''''
DoEvents
End If
Graph(0).Refresh
Next srcnr
Herve_be
Messages postés978Date d'inscriptionmercredi 4 août 2010StatutMembreDernière intervention 9 juin 20232 20 déc. 2018 à 10:00
Bonjour,
Je ne reçois toujours pas de notification donc je ne vois pas qu'il y a eu une réponse.
La seule possibilité pour que n(2) soit modifié est qu'une procédure soit activée en dehors de la boucle For ... Next probablement à cause du DoEvents.
Je ne peux pas supprimer le DoEvents car on doit pouvoir interrompre la boucle par Escape.
Faire la modification que tu suggères (remplacer n(2) par une autre variable pour le For ... Next) résoudrait le problème dans cette boucle mais n'empêchera pas n(2) d'être modifié ce qui provoquera certainement une erreur ailleurs.
Ce que j'ai fait : avant la boucle For ... next j'ai mis tous les contrôles en .Disabled
ainsi l'utilisateur peut cliquer compulsivement où il veut si ça dure trop longtemps, ça n'aura aucun effet.
vb95
Messages postés3416Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165 20 déc. 2018 à 15:05
Bonjour
Tu écris : "Faire la modification que tu suggères (remplacer n(2) par une autre variable pour le For ... Next) résoudrait le problème dans cette boucle mais n'empêchera pas n(2) d'être modifié ce qui provoquera certainement une erreur ailleurs. Cette erreur ailleurs te mettrait sur la piste de l'erreur qui arrive à l'origine je pense : trouver où n(2) est modifié et surtout qu'est-ce qui le modifie et pourquoi ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Herve_be
Messages postés978Date d'inscriptionmercredi 4 août 2010StatutMembreDernière intervention 9 juin 20232 Modifié le 21 déc. 2018 à 13:31
Bonjour,
Je pense que je ne reçois pas de notification donc je ne vois pas qu'il y a eu une réponse si tu commentes ma réponse, je viens ici par hasard, tu devrais répondre en bas (Répondre au sujet) ainsi je le verrais et réagirais plus vite.
Il y a plusieurs boucles For ... to n(2) dans le programme.
Si n(2) est modifié il y aura fatalement une erreur ailleurs, ça ne me dira pas qui a modifié n(2).
En fait n(2) ne devrait pas être modifié, le fait de mettre tous les contrôles en .disabled devrait empêcher qu'il soit modifié ce qui résoudrait le problème.