Stopper procedure depuis une fonction

Fermé
patgva Messages postés 2 Date d'inscription lundi 29 décembre 2014 Statut Membre Dernière intervention 29 décembre 2014 - 29 déc. 2014 à 21:31
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 30 déc. 2014 à 11:27
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.

3 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
29 déc. 2014 à 21:45
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 lundi 29 décembre 2014 Statut Membre Dernière intervention 29 décembre 2014
29 déc. 2014 à 21:53
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
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
Modifié par Whismeril le 29/12/2014 à 22:16
Ç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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
30 déc. 2014 à 11:27
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