OVH Cloud OVH Cloud

Gestion d'erreur

4 réponses
Avatar
Franck
Hello,

J'ai un probl=E8me avec une gestion d'erreur. Il trouve 2=20
valeurs identiques et ensuite j'aimerai que le programme=20
ce stop pour que l'on puisse modifier les valeurs et le=20
relancer. Mais je n'arrive pas trouver le code pour=20
r=E9aliser cette op=E9ration.=20
Est ce que quelqu'un peut m'aider le code d=E9j=E0 ecrit ce=20
trouve juste en dessous. Merci beaucoup.


'gestionnaire d'erreur des directions identiques
=20
On Error GoTo identiquedirection
=20
For i =3D 1 To 3
=20
If tblcoordonnee(i, 3) =3D tblcoordonnee(-3 / 2 * i ^ 2=20
+ 11 / 2 * i - 2, 3) Then
=20
MsgBox "direction identique !!!",=20
vbOKCancel 'message d'erreur
=20
Me.txtdirection(i).BackColor =3D &HFF& 'mise en=20
surbrillance des valeurs identiques
Me.txtdirection(-3 / 2 * i ^ 2 + 11 / 2 * i -=20
2).BackColor =3D &HFF&
=20
End If
=20
Next i
=20
identiquedirection:
=20
'quel est le code pour l'arr=EAter et modifier les=20
valeurs?

4 réponses

Avatar
Fred
Bonjour,

Pour sortir d'une fonction, routine, boucle ou d'un programme, il existe
quelques instructions appropriées :

Sortie d'une boucle for-next : exit for
Sortie d'une boucle do-loop : exit do
Sortie d'une fonction : exit function
Sortie d'une routine : exit sub
Sortie d'un programme : end

Dans le cas présent, vous avez mis en place un gestionnaire d'erreur (on
error ...)

Donc, d'un point de vue pratique, voici un exemple de code :

function Division(byval n as integer,byval m as integer) as double
on error goto monerreur

Division=n/m
'
' --- On arrive à la fin de la fonction. Il n'y a pas eu d'erreur donc on
peut sortir...
'
exit function ' On sort de la fonction sans erreur...

'
' --- Si on arrive à ce niveau du programme, c'est qu'il y a eu une
erreur...
'
monerreur:
if m=0 then
msgbox "Division par zéro...",vbcritical,"Erreur"
else
msgbox "Une erreur est survenue avec m=" & m & ", n=" & n & " Détail : "
& err & ", " & error,vbcritical,"Erreur"
end if

end function

Maintenant, dans votre programme, vous avez défini une boucle et vous
souhaitez sortir du programme afin d'en corriger les paramètres en cas
d'anomalie :

if tblcoordonnee(i, 3) = tblcoordonnee(-3 / 2 * i ^ 2 + 11 / 2 * i - 2, 3)
Then

Me.txtdirection(i).BackColor = &HFF& 'mise en surbrillance des
valeurs identiques
Me.txtdirection(-3 / 2 * i ^ 2 + 11 / 2 * i - 2).BackColor = &HFF&
MsgBox "direction identique !!!", vbOKCancel 'message d'erreur
me.txtdirection(i).setFocus ' On positionne le curseur dans la
première zone pour corriger la valeur
exit sub ' On sort du programme pour donner la main à
l'utilisateur
end if

Frédéric.

"Franck" a écrit dans le message de
news:1c1a201c45219$3f97ceb0$
Hello,

J'ai un problème avec une gestion d'erreur. Il trouve 2
valeurs identiques et ensuite j'aimerai que le programme
ce stop pour que l'on puisse modifier les valeurs et le
relancer. Mais je n'arrive pas trouver le code pour
réaliser cette opération.
Est ce que quelqu'un peut m'aider le code déjà ecrit ce
trouve juste en dessous. Merci beaucoup.


'gestionnaire d'erreur des directions identiques

On Error GoTo identiquedirection

For i = 1 To 3

If tblcoordonnee(i, 3) = tblcoordonnee(-3 / 2 * i ^ 2
+ 11 / 2 * i - 2, 3) Then

MsgBox "direction identique !!!",
vbOKCancel 'message d'erreur

Me.txtdirection(i).BackColor = &HFF& 'mise en
surbrillance des valeurs identiques
Me.txtdirection(-3 / 2 * i ^ 2 + 11 / 2 * i -
2).BackColor = &HFF&

End If

Next i

identiquedirection:

'quel est le code pour l'arrêter et modifier les
valeurs?
Avatar
François Picalausa
Hello,

Sortie d'un programme : end


Sortie d'un programme : décharger les feuilles, les objets, ...
SURTOUT PAS END!

Voir cete fiche de la faq:
http://faq.vb.free.fr/index.php?question

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Fred" a écrit dans le message de
news:cb15pr$su9$
Sortie d'un programme : end


Avatar
Fred
Bonjour,

Oui, bien sûr, pas de end directement mais end est une fonction VB qui
termine un programme. Tout comme il faut fermer tout handle ouvert, libérer
toute mémoire allouée, etc...

Par contre, je confirme bien que ça termine un programme correctement si les
règles sont respectées. (La FAQ fournie vous donne quelques règles à suivre
mais n'est pas exhaustive) De plus, tout le monde ne code pas forcément des
programmes qu'avec des objets, des fenêtres, ... Il existe encore de
nombreux programmes qui s'exploitent en ligne de commande et où cette
instruction est fort pratique.

Merci François pour vos précisions.

Frédéric.
"François Picalausa" a écrit dans le message de
news:
Hello,

> Sortie d'un programme : end
Sortie d'un programme : décharger les feuilles, les objets, ...
SURTOUT PAS END!

Voir cete fiche de la faq:
http://faq.vb.free.fr/index.php?question

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Fred" a écrit dans le message de
news:cb15pr$su9$
> Sortie d'un programme : end




Avatar
François Picalausa
Hello,

end est une fonction VB qui
termine un programme.


End est une instruction qui ferme tout sans crier gare et qui peut causer de
sérieuses pertes de mémoires!

De plus, tout le monde ne
code pas forcément des programmes qu'avec des objets, des fenêtres,
... Il existe encore de nombreux programmes qui s'exploitent en ligne
de commande et où cette instruction est fort pratique.



Un programme en ligne de commande, à moins de faire du qbasic où cette
instruction était celle à utiliser, se termine lorsque que le sub main (par
exemple) se termine. Sinon, c'est quand les objets sont détruits.
End n'est pas pratique, End est meurtrier!

<quote src="documentation de vb">
Note The End statement stops code execution abruptly, without invoking the
Unload, QueryUnload, or Terminate event, or any other Visual Basic code.
</quote>

Donc, si on avait un handle dans un module de classe, handle pas désalloué!
Si on utilise des composants ActiveX, qui utilisent des handles en interne,
idem...

<quote src="documentation de vb">
The End statement provides a way to force your program to halt. For normal
termination of a Visual Basic program, you should unload all forms. Your
program closes as soon as there are no other programs holding references to
objects created from your public class modules and no code executing.
</quote>

End n'as qu'un seul avantage: occuper sauvagement de la RAM!

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"Fred" a écrit dans le message de
news:cb8ngv$5l9$