Gestion de l'enemble des erreurs

Leskwal

XLDnaute Occasionnel
Bonsoir le forum

Est-il possible de créer une macro fonctionnant en parallèle des autres qui en cas d'erreur, quelle qu'elle soit, ferme le fichier actif ?

Parce que ; écrire :

Code:
On error resume next
ou
Code:
On error goto étiquette

présuppose l'endroit susceptible où il peut y avoir une erreur.

Cordialement

Pascal
 

chris

XLDnaute Barbatruc
Re : Gestion de l'enemble des erreurs

Bonjour

La macro suicide ?

On error resume next
présuppose que l'on a analysé le type d'erreur possible et que la poursuite à la ligne suivante reste logique

On error goto etiquette
présuppose qu'on anticipe telle ou telle erreur et un traitement approprié

Dans la mesure où VBA ne propose pas, hélas, de
on error call ...
il te reste à insérer dans toutes tes procédures un
On error goto etiquette
et en fin de tes procédures un
Activeworkbook.close
sous l'etiquette.

Les pros auront peut-être une solution par module de classe...

Néanmoins un bon code est celui qui a été réalisé en imaginant tous les cas de figures lors de l'analyse préalable, testé après réalisation et où le risque d'erreur doit donc être minime...
 

Leskwal

XLDnaute Occasionnel
Re : Gestion de l'enemble des erreurs

Bonjour chris


Néanmoins un bon code est celui qui a été réalisé en imaginant tous les cas de figures lors de l'analyse préalable, testé après réalisation et où le risque d'erreur doit donc être minime...

Effectivement, je ne peux qu'approuver.

Actuellement dans mon code j'utilise les classiques "On Error Goto ou Resume Next" et, a priori, cela fonctionne plutôt bien puisque je n'ai pas de retour de mes collaboratrices. :D

Mais disons que c'est par curiosité intellectuelle, n'étant absolument pas développeur :)

Tout comme vous, je m’interrogeais sur les modules de classe.

Si quelqu'un a une idée, merci d'avance.

Cordialement

Pascal
 

tbft

XLDnaute Accro
Re : Gestion de l'enemble des erreurs

Bonjour

Les modules de classes.... toute une histoire...
D'apres ce que j'ai compris (et utilisé), cela te permet de créer des propres types de données avec leurs propres fonctions, procédures et propriétés...

La premiere que j'ai créé ma permit de recreer une donnée de type integer avec les méthodes inc, dec, reset....
inc pour incremente de 1
dec pour decrementer de 1
reset pour remettre à la valeur de base
 

Misange

XLDnaute Barbatruc
Re : Gestion de l'enemble des erreurs

Bonjour

Je ne peux qu'abonder dans le sens de Chris. Et m'étonner que tu aies besoin de coller des on error resume next toutes les deux lignes.
Cette façon de faire n'est normalement destinée qu'à intercepter des erreurs dont on sait qu'avec raison elles peuvent se produire. PAr exemple :
je veux tester si un classeur toto.xls existe et si ce n'est pas le cas le créer.
je demande l'ouverture du fichier tot.xls. Si il n'existe pas, ça génère une erreur qui devrait arrêter la macro. On error resume next me permet d'aller à la ligne suivante qui contient les instructions de création de toto.xls

Mais dans un code bien fichu, en dehors de ce genre de situation, c'est à éviter.
Disons que tu demandes à l'utilisateur de saisir une date mais que ce soit optionnel
mieux vaut écrire
if madate <>"" then range ("truc")=madate

au lieu de mettre
on error resume next
range(truc)=madate

De même si tu travailles via des formulaires. Tu testes à la sortie du contrôle par exemple que les données saisies le sont et correctement plutot que renvoyer à des étiquettes d'erreur.

Si tu veux qu'on jette un oeil à ton code, mets en un bout.
 

Leskwal

XLDnaute Occasionnel
Re : Gestion de l'enemble des erreurs

Bonjour à tous et merci de l’intérêt porté à ma question .



Quelques petits échantillons de code (Comme je vous l'ai précisé, je ne suis pas développeur :) )


RISQUE DE PLANTAGE DU A UNE DIVISION PAR 0
Code:
 ' -----POURCENTAGE -----
 On Error Resume Next
            UserForm_STAT.Controls("TextBox_Pourcent_RÉA_ETAT_MENS_CUMUL_FàF_Sept_Aout_" & VAR_FORM_SUR_USR_S).Value = Format(Worksheets("STAT").Range("BO" & VAR_INDEX_REMPLISSAGE_DES_TEXTBOX) / Worksheets("STAT").Range("BR" & VAR_INDEX_REMPLISSAGE_DES_TEXTBOX), "#,##0.00 %")

Avec un GOTO ETIQUETTE

Code:
 ' ....
        .CenterHorizontally = True
        .CenterVertically = True
        .Orientation = xlLandscape
        .Draft = False

On Error GoTo PasA3:                  'Vers étiquette indiquant que le format A3 n'est pas supporté par l'imprimante
        .PaperSize = xlPaperA3

' ......        

Exit Sub


' ETIQUETTE -------------------------------------------

PasA3:
        MsgBox ("DÉSOLÉ" & Chr(10) & "Votre imprimante ne supporte pas le format A3" & Chr(10) & "Pascal"), vbExclamation, "INFORMATION"

' ETC ...

Voilà un petit aperçu :D

Merci encore

Pascal
 

Misange

XLDnaute Barbatruc
Re : Gestion de l'enemble des erreurs

ouh là tes noms de variables sont un peu longuettes :) ça rend le code très difficile à lire. Je te conseille de faire des noms certes explicatifs mais plus courts. Quand tu déclare tes variables, rien ne t'empêche de mettre à côté un commentaire pour bien expliquer à quoi elles correspondent.

pour éviter une erreur liée à une division par 0, il faut simplement tester si le dénominateur est égal à 0
donc
un truc du genre
Code:
if Worksheets("STAT").Range("BR" & VAR_INDEX_REMPLISSAGE_DES_TEXTBOX) <>0 then
UserForm_STAT.Controls("TextBox_Pourcent_RÉA_ETAT_MENS_CUMUL_FàF_Sept_Aout_"  & VAR_FORM_SUR_USR_S).Value = Format(Worksheets("STAT").Range("BO"  & VAR_INDEX_REMPLISSAGE_DES_TEXTBOX) / Worksheets("STAT").Range("BR"  & VAR_INDEX_REMPLISSAGE_DES_TEXTBOX), "#,##0.00 %")
else 
msgbox("attention la valeur de la cellule truc ne doit pas être nulle")
end if

après le msgbox, tu as deux possibilités : tu peux soit laisser comme ça et ton textbox ne reçoit rien, soit ajouter
exit sub et dans ce cas tu termines ta macro.
Mais un on error resume next n'a pas vraiment de sens ici.

Il y a d'autres possibilités moins violentes pour l'utilisateur pour lui redonner la main pour qu'il corrige
regarde par exemple ici
Ce lien n'existe plus (avec un classeur exemple)

tu trouveras des conseils plus généraux sur cette page par exemple
Ce lien n'existe plus


pour ton truc avec l'imprimante c'est différent car tu ne peux pas à priori savoir à l'avance si l'imprimante supporte ou pas le A3 (alors que tester ce qui est contenu dans une cellule ça oui tu peux)
 

Discussions similaires

Réponses
19
Affichages
2 K

Statistiques des forums

Discussions
312 305
Messages
2 087 091
Membres
103 465
dernier inscrit
Ehoarn_src