Stopper procedure depuis une fonction

patgva Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
Dans une procedure vba pour Access, je fais appel a une fonction. Lorsque la fonction recontre une erreur, je voudrais pouvoir arreter la fonction mais egalement la procedure d'origine.

Il y a t il une ligne de code qui me permettrait de tout stopper sans faire apparaitre la fenetre vba?

Merci beaucoup.

Contexte: depuis Access, une procedure vba copie colle une table Access dans une nouvelle feuille Excel. Pour chacun des onglets excel, je lance une fonction qui formate les feuilles. Lorsque l'utilisateur a ferme un classeur excel peut de temps avant, une erreur 171 ou 91 apparait (une fois sur deux...). L'idee est alors de quitter la procedure et fermer le classeur quand l'erreur se presente.
A voir également:

3 réponses

Utilisateur anonyme
 
Bonsoir, il faut utiliser la gestion des erreurs, avec l'instruction On Error


Sub test()
'Dans cet exemple en cas d'erreur le code va dans la partie appelée GestionErreur
On Error GoTo GestionErreur
Dim a
a = 3 / 0
Exit Sub

GestionErreur:
MsgBox ("Erreur trouvée")


End Sub
0
patgva Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Merci. La subtilite est de pouvoir egalement stopper la procedure sub.
L'erreur intervient dans la function.

Utiliser un "GO TO errohandler" puis exit function permet de quitter la fonction mais pas la procedure sub principale depuis laquelle elle est appelee.
0
Utilisateur anonyme
 
Ça marche aussi:
Sub test()
On Error GoTo GestionErreur
Dim r As Double

r = Division(1, 2)
MsgBox ("1 / 2 = " & r)

r = Division(1, 0)
MsgBox ("1 / 0 = " & r)

Exit Sub

GestionErreur:
MsgBox ("Erreur trouvée")


End Sub

Function Division(a As Integer, b As Integer) As Double
    Division = a / b
End Function


Penser aux balises de coloration syntaxique: bouton <>, préciser le langage :<code csharp>.
Quand la solution est trouvée, mettre la discussion Résolue.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour le fil,

Pour cela, tu peux aussi utiliser une variable déclarée au niveau Module :

Dim Erreur As Boolean
Sub test()
Dim r As Double

r = Division(1, 2)
If Erreur = False Then
   'Ici le traitement si Erreur il y a eu dans la fonction
Else
    Goto GestionErreur
End If
'blabla
Exit Sub
GestionErreur:
MsgBox ("Erreur trouvée")
End Sub

Function Division(a As Integer, b As Integer) As Double
Erreur = False
On Error Goto TraiteErreur
    Division = a / b
    Exit Function
TraiteErreur:
Erreur = True
End Function

0