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

  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

  8. #8
    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
    Ok donc mon problème reste entier. Je ne sais toujours pas pourquoi ce code ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    On error GoTo t
    ActiveSheet.ShowAllData
    t:
    ' Traitements quelconques '
    On error GoTo 0
    ' Traitements quelconques '
    On error Resume Next
    ActiveSheet.ShowAllData
    Là dans cet exemple le On error Resume Next ne fonctionne pas si je n'ai pas utilisé de Resume pour la 1ère erreur du1er ShowAllData

  9. #9
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut IDEM SOUS XL 2010
    Bonjour,

    Je fais le même constat
    si on a un on error goto etiquette puis un on error resume next , ce dernier ne fonctionne pas ?!!
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  10. #10
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour ,

    Personnellement je n’utilise pas le On Error GoTo Étiquette
    Une bonne partie des erreurs peuvent être évitées avec l’emploi des conditions (If …) selon les situations connues dans lesquelles on se trouve.
    Lorsque j’utilise une gestion d’erreur, c’est souvent dans le cas où on a pas le choix et que l’on sait que l’erreur va arriver.
    Dans ce cas j’utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    On Error Resume Next
       ‘…
       If Err Then
          ‘…
          Err.Clear
       End If 
       ‘…
    On Error GoTo 0
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  11. #11
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    Bonjour,

    Pour "sortir" du gestionnaire d'erreurs et permettre un autre on error :


  12. #12
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re

    Juste pour rajouter, le Err.Clear permet d’effacer une erreur qui s’est produite,
    permettant alors qu’une autre éventuelle erreur se produise à son tour par la suite … (Edit en précision, dans le cas de l'intéressé ici - bien sur on attend pas une éventuelle erreur, sauf (pour exemple) les collections))

    Edit : pour les moins 1
    si on détails plus, si l'on sait que l'on l'on aura 2 - 3 erreurs qui peuvent se produire,
    et que l'on veut un résultat précis selon le type d'erreur ou l'on veut cibler l'erreur qui nous intéresse
    alors dans ce cas on utilisera (en abrégé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Err.Number = XX Then ' XX représentant le numéro de l'erreur que l'on cible
       ' le code à mettre
       Err.Clear
    End if
    Malheureusement l'homme n'a pas la science infuse, sinon ça se saurait, alors si on peut m'éclairer pour les -1 ça serait
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  13. #13
    Expert confirmé
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 093
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Arkham46 Voir le message
    Bonjour,

    Pour "sortir" du gestionnaire d'erreurs et permettre un autre on error :

    Bonsoir,
    Merci Arkham, ça semble être la solution, j'ai toujours utilisé on error goto 0, je ne connaissais pas on error goto -1 ça vient de où c'est pas dans l'aide en toout cas ?
    Have a nice day. Oliv'
    Votre réponse est peut être dans mon blog !
    https://www.developpez.net/forums/blogs/191381-oliv-/

  14. #14
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    Citation Envoyé par Oliv- Voir le message
    je ne connaissais pas on error goto -1 ça vient de où c'est pas dans l'aide en toout cas ?
    Non pas dans l'aide VBA.
    Je ne sais plus où j'ai trouvé ça à l'origine...

  15. #15
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

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