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

VBA Discussion :

[Discussion] Devrait-on utiliser les "On error" statement ?


Sujet :

VBA

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 9
    Points : 6
    Points
    6
    Par défaut [Discussion] Devrait-on utiliser les "On error" statement ?
    Bonjour a tous.

    A force de coder du VBA depuis un moment, je me rend compte que ce language est quand meme hyper mal foutut, il y a plein de trucs qui ne sont pas logique et la doc est merdique...

    Cependant, je me refuse a utiliser les intructions "on error" par principe : Je me dit que, s'il y a des erreur, c'est que j'ai pas coder ce qu'il falait, et qu'il faut que je reprenne mon algorythme ( genre une exception qui n'est pas gérée comme il faut, etc.. ).

    Alors, pourquoi diable y a t'il ces On error resume next dans beaucoup de macros trouvable sur internet ?

    Pour moi, cela ressemble a un aveu d'echec..

    J'aimerais beaucoup qu'on me prouve que je me trompe. Qu'en pensez-vous ? Utilisez-vous ces intructions ? Si oui, pourquoi ?

  2. #2
    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 !

    Quand quelque chose n'est pas prévue, n'existe pas dans le langage et donc risque de planter l'exécution,
    c'est un moyen de s'en sortir mais certes, à utiliser avec précaution ou tout du moins en sachant ce que l'on code …

    On peut déplacer le problème dans une fonction laissant ainsi la procédure principale ne pas recourir à cette instruction.

    Comme par exemple pour extraire le nom d'une cellule (ou d'une plage) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function CellName(ByVal Rg As Range)
             On Error Resume Next
             CellName = Rg.Name.Name
    End Function
    Si le Range n'est pas nommé, l'erreur est fatale sans cette instruction …

    Autre exemple, tester si une matrice est vide ou non initialisée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function IsArrayEmpty(V) As Boolean
             On Error Resume Next
                        U = UBound(V)
             IsArrayEmpty = U = "" Or U < 0
    End Function

    Tout dépend donc du bon usage du développeur …

    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …
    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)

  3. #3
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, toujours consultable : La gestion des erreurs dans Excel

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Bonjour !

    Comme par exemple pour extraire le nom d'une cellule (ou d'une plage) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function CellName(ByVal Rg As Range)
             On Error Resume Next
             CellName = Rg.Name.Name
    End Function
    [INDENT]
    Que dire de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function cellName(ByVal rg As Range)
        For Each Nom In Workbook.Name
            If Nom.Name = rg.Name.Name Then cellName = rg.Nom.Name
        Next Name
    End Function
    La mienne return elle aussi "Nothing" si le nom n'existe pas. Cependant, si une autre erreur survient, elle plante.

    Imaginons une autre erreur que la non-existance du range. Ta fonction retournerais alors "nothing" alors que le range existe peut-etre !



    Citation Envoyé par kiki29 Voir le message
    Salut, toujours consultable : La gestion des erreurs dans Excel
    Oui, je suis déja tomber sur ce papier très instructif d'ailleur ! C'est lui qui m'a ammener a cette reflexion...

    D'ailleur, dans l'intro même du papier, je vois un truc qui me fait danser le cheveux sur la tête :

    Citation Envoyé par http://silkyroad.developpez.com/VBA/GestionErreurs/
    De la même façon, une macro qui vérifie l'existence d'une feuille peut logiquement renvoyer une erreur si l'onglet n'existe pas.
    Dafuck ? Une macro qui teste une existance devrais pas plutot renvoyer false si ça n'existe pas ?

  5. #5
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Commence déjà par utiliser Antidote et cela d'urgence.

  6. #6
    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
    Citation Envoyé par lrnv69 Voir le message
    Que dire de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function cellName(ByVal rg As Range)
        For Each Nom In Workbook.Name
            If Nom.Name = rg.Name.Name Then cellName = rg.Nom.Name
        Next Name
    End Function
    La mienne return elle aussi "Nothing" si le nom n'existe pas. Cependant, si une autre erreur survient, elle plante.

    Imaginons une autre erreur que la non-existance du range. Ta fonction retournerais alors "nothing" alors que le range existe peut-etre !
    Ben non justement ‼ T'as réussi à me faire dresser les cheveux sur la tête avec cette contradiction entre autres …
    Et tu as l'air d'avoir la critique un peu facile pour quelqu'un postant un code truffé d'erreurs, vaudrait mieux tester avant !

    Ma fonction n'a pas pour but de vérifier si le Range existe mais de renvoyer le nom d'un Range existant s'il a été nommé !
    C'était juste un exemple …
    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)

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut [Discussion] Devrait-on utiliser l'instruction "On error"?
    La réponse est élémentairement simple et simplement élémentaire. Si une instruction apparaît dans beaucoup de codes, c'est qu'il faut l'utiliser.

    Le corollaire c'est qu'il ne faut pas l'utiliser n'importe comment.

    Le vrai problème, c'est d'apprendre à l'utiliser correctement, surtout, surtout, surtout, surtout, surtout, surtout, surtout, surtout, surtout, surtout, surtout :

    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

Discussions similaires

  1. Réponses: 12
    Dernier message: 03/03/2015, 08h18
  2. [ORACLE 10G]utiliser les Prepared Statements
    Par libuma dans le forum Oracle
    Réponses: 0
    Dernier message: 03/02/2010, 13h30
  3. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 16h57
  4. Merci d'utiliser les TAG
    Par Cian dans le forum Etudes
    Réponses: 0
    Dernier message: 07/08/2003, 18h46
  5. Utiliser les frames
    Par laury dans le forum Composants VCL
    Réponses: 5
    Dernier message: 10/05/2003, 11h14

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