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 :

[VBA-E]Gestion d'erreurs multiple


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 49
    Points : 25
    Points
    25
    Par défaut [VBA-E]Gestion d'erreurs multiple
    Bonjour tout le monde,
    Je voudrais savoir comment gerer les erreurs de facons multiples a partir d'un programme qui serait de la forme suivante:

    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
    23
    24
    Private Sub CommandButton3_Click()
    On Error Goto Errorhandler
       Application.ScreenUpdating=False
     
       Objet1.Activate
       Objet1.Calculate
     
      Objet2.Activate
      Objet2.Calculate
     
      Application.DisplayAlerts=False
      ActiveWorkbook.Charts.Delete
      Application.DisplayAlerts=True
     
      Call procedure1
     
      Application.ScreenUpdating=True
    Exit Sub
     
    ErrorHandler:
        Debub.Print  "Erreeur dans la feuille X :" & Err.Description
        Exit Sub
     
    End Sub
    J'en profite pour egalement demander si mon utilisation de l'Application.ScreeUpdating est optimale ici car j'ai mon manager qui m'a affirme qu'il ne l'etait pas.

    D'avance merci pour votre aide.

    Icetechnik

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    En déclenchant plusieurs opérations sur une seule gestion d'etteur, ce n'est pas vraiment très adroit ! (une par une est plus prudent)
    Ton manager a raison ! que se passerait-il, d'après toi, en cas d'erreur ? Où et quand serait rétabli, dans ce cas, le ScreenUpdating ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    Bonsoir Jmfmarques,

    ce n'est pas vraiment très adroit ! (une par une est plus prudent)
    Justement je ne suis pas sure de la facon de faire. Il serait bien si tu pouvais detaille a partir de mon exemple.


    Ton manager a raison ! que se passerait-il, d'après toi, en cas d'erreur ? Où et quand serait rétabli, dans ce cas, le ScreenUpdating ?
    La encore je n'ai pas tres bien saisi car je n'ai jamais utilise de facon avancee VBA jusqu'a ce jour. Tout ce que je sais est que ScreeUpdating = False fais que l'ecran n'est pas mis a jour en meme temps que l'application tourne.

    D'avance merci pour ton aide.

    Icetechinik

  4. #4
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    1) la prudence la plus élémentaire conduit à gérer l'erreur susceptible de se produire chaque fois qu'est "lancée" un instruction risquant d'échouer !
    ex si on se moque de l'erreur (si non rédhibitoire)
    si erreur, aller à l'étiquette etiquette1
    instruction_risquée1
    si erreur aller à l'étiquette etiquette1 ou étiquette2, selon ce que tu gères
    instruction_risquée2
    instruction_non risquée
    suite des instructions
    aller à l'étiquette etiquette3 (pour sauter les etiquettes etiquette1 et etiquette2))
    etiquette1
    réactions
    etiquette2
    réactions
    etiquette3
    on continue

    etc...
    C'est à toi de savoir ce que tu veux et de décider des passages par étiquettes ou sauts d'étiquettes, en fonction de ce que tu veux !
    Il s'agit là, avant même la syntaxe de VB, d'une simple organisation de ta pensée ! prends une feuille de papier, colles-y des "étiquettes"... et simules tes "sauts" avec un crayon, pour voir par où tu passes dans un cas ou dans l'autre !... une autre fois : en oubliant totalement l'informatique !
    Si tu n'y parviens pas ainsi (sans informatique), je crains qu'aucun langage informatique ne puisse t'y aider...
    2) les explications données en 1) devraient te permettre de constater pourquoi, en cas d'erreur, ton affichage ne serait pas actualisé et donc, pourquoi l'observation de ton manager est fondée...

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 150
    Points
    20 150
    Par défaut
    bonsoir

    Pour moi il n'y a pas de soucis avec "ScreenUpdating"


    Par contre j'intégrerais la propriété "DisplayAlerts" dans la gestion d'erreur car il peut arriver qu'elle ne se réinitialise pas tout seul en fin de procédure

    tu conserves :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.DisplayAlerts=False 
    ActiveWorkbook.Charts.Delete 
    Application.DisplayAlerts=True
    et tu ajoutes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ErrorHandler: 
        Application.DisplayAlerts=True 	
        Debug.Print  "Erreeur dans la feuille X :" & Err.Description


    La meilleurs gestion d'erreur est d'éviter quelle se produise . par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.DisplayAlerts=False 
    If ActiveWorkbook.Charts.Count > 0 Then ActiveWorkbook.Charts.Delete 
    Application.DisplayAlerts=True

    à quoi correspondent Objet1 et Objet2 ?

    s'il s'agit de classeurs tu peux essayer d'enlever les .Activate et par exemple écrire directement


    plus généralement si tu enlèves tous les .Select .Activate , tu auras un gain de temps et ScreenUpdating ne sera peut etre plus nécéssaire .



    bonne soiree
    michel

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2004
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 49
    Points : 25
    Points
    25
    Par défaut
    Merci a tous pour aide. Cela m'a fait pas mal avancer dans mon projet.

    Cordialement,

    ps : desole du retard de mes nouvelles (internet a domicile en panne (je vous ecrit depuis un cybercafe)).

Discussions similaires

  1. [VBA-EXCEL] Gestion des erreurs et manipulation du contenu d'une cellule
    Par Froggy007 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/09/2008, 21h42
  2. [vba-e] Gestion D'erreur Dans Un Inputbox
    Par KKshi666 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/05/2007, 10h39
  3. [VBA-E] Gestion d'une erreur #N/A
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/04/2006, 21h17
  4. [VBA-E]Gestion d'erreur
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 07/04/2006, 21h05
  5. [VBA-E] Pb sur gestion des erreurs
    Par micoscas dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 08/03/2005, 18h08

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