IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

On error ne marche pas la 2ème fois


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut On error ne marche pas la 2ème fois
    Bonjour à tous,

    Je pensais avoir compris le fonctionnement de la gestion d'erreur sous VBA jusqu'à ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
     
    On Error GoTo t
    ActiveSheet.ShowAllData
     
    t:
     
    On Error Resume Next
    ActiveSheet.ShowAllData
     
    End Sub
    Pourquoi ici, le on error resume next ne fonctionne pas ?
    J'ai essayé également de mettre un on error goto 0 entre les 2 on error mais ça ne marche pas.

    On suppose bien sûr que la feuille active n'est pas filtrée

    Mon problème "réel" se pose dans une boucle du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For i = 1 to 3
        On error GoTo x
     
        ' Traitements ... '
     
        On Error Resume Next
        Sheets(i).ShowAllData
     
    x:
     
        ' Gestionnaire d'erreur '
    Next

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    normal...
    On Error s'emploie avec un Resume
    Mais ici, il n'y a ni Resume ni Resume next ni Resume etiquette_de_ligne

    Il faut mettre fin à une gestion d'erreur pour en commencer une autre

  3. #3
    Invité
    Invité(e)
    Par défaut
    Tu peux lire ce tutoriel pour comprendre comment ça marche:
    http://silkyroad.developpez.com/VBA/GestionErreurs/

    Sinon dans ton cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
     
      On Error GoTo t
        ActiveSheet.ShowAllData
      On Error GoTo 0
     
      Exit Sub
     
    t:
      Debug.Print (Err.Description)
      Resume Next
     
    End Sub

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut
    EngueEngue -> A quoi sert On Error GoTo 0 alors si ça ne met pas fin au gestionnaire d'erreur ?

    EDIT: vcottineau -> Ok en fait j'avais trouvé cette solution mais je ne savais pas que l'on pouvais faire Resume etiquette_ligne comme l'a dit EngueEngue donc ça me posait problème dans ma boucle avec seulement Resume et Resume Next. Par contre même question que pour EngueEngue, à quoi sert ton On Error GoTo 0 si c'est le Resume Next qui invalide le gestionnaire d'erreur ?

    Merci à vous 2 en tous cas, rapides et efficaces

  5. #5
    Invité
    Invité(e)
    Par défaut
    Le 'On Error GoTo 0' permet de réactiver le gestionnaire d'erreur par défaut et arrêtera l’exécution de ton programme si une erreur est rencontrée.

    Dans mon exemple si tu ajoutes une erreur entre le 'On Error GoTo 0' et le 'Exit Sub' ton programme va planter car l'erreur ne sera pas gérée.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Par défaut
    Et donc que se passe t-il si une erreur se produit entre le Resume Next et le On error goto 0 puisque Resume Next désactive le gestionnaire d'erreur créé et que celui par défaut n'est pas encore réactivé ?

    EDIT: Je viens de tester et le On Error GoTo t est toujours activé dans cet exemple (le 2ème ShowAllData nous renvoit à t) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
     
      On Error GoTo t
        ActiveSheet.ShowAllData
     
        ActiveSheet.ShowAllData
     
      Exit Sub
     
    t:
      Debug.Print (Err.Description)
      Resume Next
     
    End Sub
    Or de ce que j'ai compris de EngueEngue, Resume Next devrait arrêter le gestionnaire.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Non le 'Resume Next' n'arrête pas le gestionnaire ; il permet de passer à la ligne de code suivante. Dans ton exemple ci-dessous l'ensemble des lignes de code sont contenues dans le 'On Error GoTo t' donc si une erreur est rencontrée elle est traitée par par le 'GoTo t'.

    C'est pour ça que j'avais mis un 'On Error GoTo 0' après la ligne qui risquait de déclancher une erreur. Ca me permet de catcher l'erreur et de laisser ensuite le reste du code au gestionnaire par défaut des erreurs.
    Dernière modification par AlainTech ; 27/08/2013 à 21h52. Motif: Suppression de la citation inutile

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/12/2009, 17h23
  2. Requête Json qui ne marche qu'à partir de la 2ème fois
    Par Turbulator dans le forum jQuery
    Réponses: 2
    Dernier message: 05/10/2009, 12h10
  3. Réponses: 2
    Dernier message: 28/04/2009, 11h59
  4. [Htaccess] Ca ne marche pas: Internal Server Error
    Par pierrot10 dans le forum Apache
    Réponses: 1
    Dernier message: 03/07/2007, 14h36
  5. [Ping] Dès fois marche dès fois ça marche pas
    Par ran_hery dans le forum Administration
    Réponses: 4
    Dernier message: 02/10/2006, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo