VBA en cas d'erreur Reprendre le suivant ou aller à 0

Ce didacticiel expliquera les instructions VBA On Error Resume Next et Goto.

Même lorsque votre code est parfaitement construit, l'utilisateur peut ne pas faire ce que vous attendez. Pour cette raison, vous devez insérer des gestionnaires d'erreurs dans votre code chaque fois qu'une erreur peut survenir.

En cas d'erreur Reprendre ensuite

L'instruction On Error Resume Next indique à VBA d'ignorer toutes les lignes de code contenant des erreurs et de passer à la ligne suivante. VBA ignorera la ou les lignes contenant une erreur et passera à la ligne de code suivante.

Ceci est utile lorsque la ligne de code qui peut être ignorée n'est pas essentielle au bon fonctionnement de la macro, mais peut être assez dangereuse si elle est mal utilisée car elle peut donner des résultats involontaires.

Par exemple, dans la procédure ci-dessous :

123456 Sous HideAllSheets()Dim ws As Feuille de calculPour chaque ws dans ActiveWorkbook.Sheetsws.Visible = FauxWS suivantFin du sous-marin

Si nous exécutons ce code, nous obtiendrons une erreur car nous ne pouvons pas masquer toutes les feuilles de calcul d'un classeur - au moins un classeur doit rester visible.

Cependant, si nous modifions la procédure comme indiqué ci-dessous, le code continuera après l'erreur et laissera la dernière feuille du classeur visible.

1234567 Sous HideAllSheets()En cas d'erreur Reprendre ensuiteDim ws As Feuille de calculPour chaque ws dans ActiveWorkbook.Sheetsws.Visible = FauxWS suivantFin du sous-marin

En cas d'erreur GoTo 0

Si nous n'avons pas de gestionnaire d'erreurs dans notre code, En cas d'erreur Aller à 0 est le paramètre par défaut d'Excel. Cela signifie essentiellement que lorsqu'une erreur se produit avec En cas d'erreur GoTo 0, VBA arrêtera d'exécuter le code et affichera sa boîte de message d'erreur standard, par exemple :

Si nous avons mis un piège d'erreur comme En cas d'erreur Reprendre ensuite dans notre code, mais alors nous souhaitons réinitialiser l'erreur par défaut, nous pouvons insérer un En cas d'erreur Aller à 0 ligne dans notre code.

12345678910 Sous-erreurGoTo0()En cas d'erreur Reprendre ensuiteDim ws As Feuille de calculPour chaque ws dans ActiveWorkbook.Sheetsws.Visible = FauxWS suivantEn cas d'erreur GoTo 0'Exécutez plus de code ici par exemple :ActiveSheet.Name = "Feuille1"Fin du sous-marin

Maintenant, s'il devait y avoir une erreur dans notre code après le En cas d'erreur Aller à 0 ligne, le message d'erreur par défaut pour Excel se produirait. Dans cet exemple, nous avons déjà une feuille nommée Sheet1 dans ActiveWorkbook comme code au-dessus du En cas d'erreur Aller à 0 masque la feuille, mais ne la supprime pas. Le message d'erreur Excel par défaut indiquant que le nom de la feuille a déjà été pris s'afficherait alors.

En cas d'erreur Aller à Ligne

Nous pouvons également forcer notre code à passer à une ligne de code différente en utilisant le En cas d'erreur Aller à Ligne qui dit à VBA d'aller à une ligne de code spécifique si une erreur se produit.

123456789101112 Sous-erreurGoToLine()En cas d'erreur Reprendre ensuiteDim ws As Feuille de calculPour chaque ws dans ActiveWorkbook.Sheetsws.Visible = FauxWS suivantEn cas d'erreur GoTo errhandlerActiveSheet.Name = "Feuille1"Quitter le souserrhandler :MsgBox("Il existe déjà une feuille appelée feuille1!", vbCritical)Fin du sous-marin

Dans l'exemple ci-dessus, lorsque le code trouve la feuille « Sheet1 », il passe à la ligne de code sous l'étiquette du gestionnaire d'erreurs - dans ce cas, il appelle une boîte de message personnalisée informant les utilisateurs que la feuille existe déjà. L'étiquette du gestionnaire d'erreurs doit être suivie de deux points pour indiquer à VBA qu'il s'agit d'une étiquette.

1 errhandler :

Le code passera ensuite à la ligne sous l'étiquette et renverra la boîte de message personnalisée.

Ceci est utile lorsque vous ne voulez pas que votre utilisateur puisse cliquer sur Déboguer pour accéder à votre code car le message Excel standard donne toujours une option pour déboguer le code.

Nous avons également besoin d'un Quitter le sous dans la procédure. S'il y a NE PAS une feuille appelée Sheet1, puis cette ligne de code s'exécuterait et renommerait la feuille active en Sheet1. Nous voulons ensuite que le code se termine - nous ne voulons pas qu'il continue vers le gestionnaire d'erreurs et affiche la boîte de message. La ligne Exit Sub quitte alors la procédure et arrête le code.

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave