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 :

2 On Error Successifs


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2013
    Messages : 5
    Points : 5
    Points
    5
    Par défaut 2 On Error Successifs
    Citation Envoyé par Halo2550 Voir le message
    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
    J'ai exactement le même problème, j'ai été obligé de mettre deux On Error Resume Next sur mes .ShowAllData successifs, à défaut de pouvoir créer un errorHandler qui fonctionne 2 fois consécutives.

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    Et tu ne peux pas éviter les erreur avec des tests en amont? C'est à dire traiter le cas où l'erreur apparait?

    Le On Error, devra être laissé en dernier recours
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour Hymced, Mercatog, bonjour le forum,

    Peut-être comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
    À plus,

    Thauthème

    Je suis Charlie

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonjour tu peu aussi mettre ton traitement d'erreur dans une fonciton


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub  MaMacro
     
      if  Not  AfficheTout  then msgBox "1° Erreur"
     
     (...)
     
      if  Not  AfficheTout  then msgBox "2° Erreur"
     
     
     
    End Sub
     
     
    Function AfficheTout as boolean
     
        On error GoTo UneErreur
       ActiveSheet.ShowAllData
       AfficheTout = true
      exit function
    UneErreur:
      AfficheTout = false
    end sub

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2013
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci à vous deux pour vos réponses ultra rapides ! j'ai opté pour la méthode 1 plus simple, mais c'est qd même bon à savoir pour la méthode 2

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    J'ai été confronté à ce problème il y a qq temps.

    En fait On Error GoTo 0 désactive l'interception des erreurs.
    En utilisation 'normale' ça ne se voit pas car elle est réinitialisée en sortie de procédure.
    Tu peux utiliser utiliser On Error Goto -1 qui lui le réactive. Documenté uniquement pour VB mais correct également en VBA.

    eric

  7. #7
    Invité
    Invité(e)
    Par défaut
    Salut,

    Il faut faire gaffe avec On Error Goto -1 car il ramène à l'étiquette précédente en cas d'erreur, donc il peut y avoir création d'une boucle infini au même titre qu'avec Resume qui lui ramène sur la dernière ligne qui à généré l'erreur.
    Dans les 2 cas (Goto -1 et Resume), il vaut mieux être au courant.

  8. #8
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    Il faut faire gaffe avec On Error Goto -1 car il ramène à l'étiquette précédente en cas d'erreur
    Tu peux développer ?
    Pour moi On Error Goto -1 n'emmène nulle part, tout comme On Error Goto 0.
    -1 et 0 ne sont pas des étiquettes, ce sont juste des syntaxes particulières de On Error Goto

    eric

  9. #9
    Invité
    Invité(e)
    Par défaut
    EDIT:

    Le code n°1 créé une boucle infini.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Sub ErrorHandlingBoucleInfini()
     
        Dim a As Double
     
    On Error GoTo Etiquette1
        a = 5 / 0
        MsgBox "Il n'y a pas d'erreur"
     
    Etiquette1:
     
    ' Si erreur => Renvoie sur l'étiquette n°1 (étiquette précédente dû au On Error GoTo Etiquette1 toujours actif)
    On Error GoTo -1
        a = 5 / 0
     
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Sub ErrorHandling()
     
        Dim a As Double
     
    On Error GoTo Etiquette1
        a = 5 / 0
        MsgBox "Il n'y a pas d'erreur"
     
    Etiquette1:
     
    On Error GoTo Etiquette2
    On Error GoTo -1
        a = 5 / 0
     
    Etiquette2:
    End Sub
    Dernière modification par Invité ; 30/08/2014 à 23h04.

  10. #10
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Bonjour,

    jolie démonstration de boucle sans fin causée par On Error Goto -1

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  11. #11
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Je n'ai pas dû assez détailler.

    Il faut quand même distinguer les erreurs 'normales' et attendues à ne pas traiter, de celles à traiter.
    Si tu as une boucle avec des erreurs 'normales' que tu ne veux pas traiter On Error Goto 0 désactive le gestionnaire d'erreur et tu plantes sur l'erreur suivante. On Error Goto -1 ne le désactive pas et tes boucles se terminent.
    C'est dans ce cadre qu'il est intéressant.

    Je ne vois pas trop l'intérêt ni dans quel cas l'utiliser dans le traitement de l'erreur.
    Tout est réinitialisé avec le End Sub, et Resume et Resume Next réinitialisent aussi le gestionnaire d'erreur.

    eric

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL-5.1] Syntax error sur IF successifs
    Par Tyra3l dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 21/10/2014, 10h32
  2. [SQL Server] Error converting data type varchar...
    Par Sir Tengu dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 13/06/2003, 10h46
  3. [Kylix] Kylix c++ error
    Par pacpac dans le forum EDI
    Réponses: 2
    Dernier message: 10/06/2003, 16h27
  4. [CR] Print Engine error text
    Par afaraji dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 03/09/2002, 15h44
  5. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51

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