Stopper procedure depuis une fonction

patgva Messages postés 2 Statut Membre -  
pijaku Messages postés 13513 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.

3 réponses

  1. 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
    1. patgva Messages postés 2 Statut Membre
       
      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
  2. 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
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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