Reprise en cas d'erreur Suivant : Gestion des erreurs en Excel VBA

  • Partage Ça
Hugh West

Dans Microsoft Excel VBA, la gestion des erreurs est l'une des tâches critiques. Si vous êtes un codeur, vous connaissez l'importance de la gestion des erreurs pour construire une application parfaite. Toute erreur dans une déclaration peut entraver votre code VBA de nombreuses façons. Vous devez donc être prudent pour gérer ces erreurs lors de l'exécution d'un code VBA. Il y a beaucoup d'erreurs d'exécution auxquelles vous pouvez être confronté lors de l'utilisation du code VBA dans Excel. Pour les résoudrel'un d'eux, nous utilisons le En cas d'erreur, reprendre la suite déclaration.

Dans ce tutoriel, vous apprendrez à utiliser la fonction En cas d'erreur, reprendre la suite dans Excel VBA. Ce tutoriel sera très précis, avec des exemples et des illustrations appropriés. Restez donc avec nous.

Télécharger le cahier d'exercices

VBA On Error Resume Next.xlsm (en anglais)

Gestion des erreurs dans Excel VBA

En travaillant avec Microsoft Excel VBA, vous serez confronté à de nombreuses erreurs dans votre sous-procédure. Lorsque VBA ne peut pas exécuter une instruction, il génère une erreur d'exécution.

Excel traite automatiquement ces erreurs. Ainsi, lorsqu'une erreur d'exécution survient, il affiche un message d'erreur par défaut comme le suivant :

Vous pouvez les traiter de diverses manières à l'aide de certaines instructions VBA, dont je parlerai dans les sections suivantes.

Lire la suite : Comment corriger l'erreur #REF ! dans Excel (6 solutions)

Sur les déclarations d'erreur en VBA

Pour gérer les erreurs d'exécution, nous donnons des instructions à Excel à l'aide de l'instruction On Error. Elle décide du type d'opérations que nous voulons effectuer immédiatement. En fait, nous désactivons ces erreurs par ce type de gestion des erreurs.

Nous utilisons trois types d'instructions On Error (syntaxe) dans Excel VBA.

  • En cas d'erreur, aller à ligne
  • En cas d'erreur, reprendre la suite
  • En cas d'erreur, aller à 0

Lorsque vous trouvez une erreur, utilisez la commande On Error, car si vous n'utilisez pas une commande En cas d'erreur ces erreurs d'exécution seront désastreuses. Il affichera une invite d'erreur et arrêtera l'exécution.

Lorsque nous utilisons un En cas d'erreur nous activons un gestionnaire d'erreurs "actif". Le gestionnaire d'erreurs "actif" est un gestionnaire activé qui lance l'opération de traitement des erreurs. Si une erreur survient alors qu'un gestionnaire d'erreurs est impliqué, le gestionnaire d'erreurs de la méthode actuelle ne peut pas supporter l'erreur. Après cela, le contrôle retourne à la procédure appelante.

Si le processus appelant dispose d'un gestionnaire d'erreurs activé, il est déclenché pour gérer l'erreur. Si le gestionnaire d'erreurs de votre système appelant est engagé de manière correspondante, le contrôle revient via les procédures d'appel précédentes jusqu'à ce qu'il trouve un gestionnaire d'erreurs activé mais inactif. S'il ne trouve aucun gestionnaire d'erreurs activé inactif, cela signifie que l'erreur est catastrophique à son point d'occurrence.

Chaque fois que le gestionnaire d'erreur redonne l'autorité à une procédure appelante, cette procédure fait évoluer la procédure existante. L'exécution reprend dans la procédure actuelle au moment choisi par la commande Curriculum vitae lorsqu'un gestionnaire d'erreurs traite les erreurs dans une procédure.

Reprendre la suite en cas d'erreur en VBA

Maintenant, le En cas d'erreur, reprendre la suite indique à VBA d'ignorer toute ligne de code contenant des erreurs et de passer immédiatement à la ligne de code suivante. Ensuite, les codes Excel VBA ignorent la ou les lignes contenant des erreurs et passent à la séquence de code suivante.

Le site En cas d'erreur, reprendre la suite force l'exécution à reprendre avec la commande poursuivant instantanément la ligne de code qui a induit l'erreur d'exécution. Cette instruction permet de sauter une exécution même s'il y a une erreur d'exécution. Si vous pensez qu'une ligne de code particulière peut produire une erreur, placez la routine de gestion des erreurs à cet endroit plutôt qu'à un autre endroit dans la procédure. L'instruction En cas d'erreur, reprendre la suite devient inactive lorsque votre code appelle une autre procédure. Ainsi, lorsque vous avez besoin d'une gestion d'erreur adaptée dans cette routine, vous devez exécuter une instruction En cas d'erreur, reprendre la suite dans chaque motif nommé.

C'est raisonnable lorsque la ligne de code que vous pouvez sauter n'est pas nécessaire au bon fonctionnement de la macro, mais n'oubliez pas qu'elle peut être préjudiciable si vous l'utilisez de manière incorrecte, car elle peut donner des résultats inattendus.

Rappelez-vous :

L'instruction On Error Resume Next ne corrige pas les erreurs d'exécution. Elle ignore essentiellement les erreurs où l'exécution de VB reprendra à partir de l'instruction qui a généré l'erreur d'exécution.

Jetez un coup d'œil au code suivant :

 Sub divide() MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

Nous avons essayé de diviser 5 par 0 et 1. Exécutons le code. Le résultat sera le suivant :

Il produit une erreur d'exécution. Nous ne pouvons pas diviser un nombre par 0. Lorsque vous déboguez le code, vous verrez ce qui suit :

Lorsque le programme VB trouve une erreur, il arrête immédiatement la procédure, mais n'exécute pas la ligne suivante.

Maintenant, implémentons le En cas d'erreur, reprendre la suite avant la déclaration d'erreur :

 Sub divide() On Error Resume Next MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

Après avoir exécuté le code, vous verrez ce qui suit :

Comme vous pouvez le constater, VBA ignore la ligne qui produit l'erreur et passe immédiatement à la ligne de code suivante. De cette manière, vous pouvez utiliser la fonction En cas d'erreur, reprendre la suite pour traiter l'erreur dans Excel VBA.

Exemples de "reprise après erreur" en VBA

Dans les sections suivantes, je vais vous fournir deux exemples de la En cas d'erreur, reprendre la suite que vous pouvez mettre en œuvre dans votre feuille de calcul Excel à l'aide de VBA. Je vous recommande d'apprendre et d'appliquer tous ces éléments dans votre classeur. Cela augmentera certainement vos connaissances d'Excel.

1. l'instruction 'On Error Resume Next' pour masquer les feuilles de travail

Dans cet exemple, je vais vous montrer un code VBA qui va masquer toutes les feuilles de travail de votre classeur actif.

Jetez un coup d'œil à la capture d'écran suivante :

Ici, nous avons quatre feuilles de calcul. Nous allons toutes les masquer en utilisant le code VBA suivant :

 Sub hide_all_sheets() Dim copies As Worksheet For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub 

Lorsque vous exécutez le code suivant, vous verrez l'erreur d'exécution suivante :

Excel affiche cette erreur car vous ne pouvez pas masquer toutes les feuilles d'un classeur. Vous devez donc ignorer cette erreur. Pour ce faire, vous devez implémenter l'instruction On Error Resume Next dans votre ligne de code.

 Sub hide_all_sheets() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub 

Après avoir terminé l'exécution du code VBA, vous verrez le résultat suivant :

Au final, vous ne verrez aucune erreur après l'exécution. Ainsi, notre instruction On Error Resume Next a très bien fonctionné dans le code VBA.

Lire la suite : Erreurs dans Excel et leur signification (15 erreurs différentes)

Fonction VLOOKUP avec "On Error Resume Next" en VBA

Dans cet exemple, je vais montrer un exemple de la fonction VLOOKUP en VBA Maintenant, ce code VBA comprend également l'élément suivant En cas d'erreur, reprendre la suite déclaration.

Jetez un coup d'œil à la capture d'écran suivante :

Ici, vous pouvez voir le nom et l'âge de certaines personnes. Dans le tableau adjacent, nous utiliserons la méthode de calcul de l'âge. VLOOKUP pour trouver le nom et l'âge de la personne.

Tapez le code suivant pour ce faire :

 Sub VLOOKUP_Function() Dim i As Long For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub 

Exécutez maintenant la macro et vous verrez apparaître l'erreur suivante :

Il s'agit d'une erreur d'exécution. Pourquoi cela se produit-il ? Regardez à nouveau l'ensemble de données :

Comme vous pouvez le voir, il n'y a pas de données pour "Aaron" et "Emma". C'est pourquoi il n'exécute que la fonction VLOOKUP pour la première entrée. Après cela, il arrête l'exécution. Maintenant, si vous voulez ignorer l'erreur et continuer à trouver le reste des âges, utilisez la balise En cas d'erreur, reprendre la suite déclaration.

 Sub VLOOKUP_Function() Dim i As Long On Error Resume Next For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub 

Après avoir exécuté le code VBA, vous verrez le résultat suivant :

Comme vous pouvez le constater, en appliquant le En cas d'erreur, reprendre la suite nous avons ignoré l'erreur et trouvé le reste des âges des personnes. Notre code VBA n'a pas trouvé de données pour Aaron et Emma. C'est pourquoi il a ignoré ces valeurs et renvoyé le reste des valeurs dans la feuille de calcul Excel.

Read More : [Corrigé] Excel a détecté un problème avec une ou plusieurs références de formules dans cette feuille de calcul.

Désactiver l'option "Reprendre après en cas d'erreur" avec Excel VBA

Il se peut que vous souhaitiez ignorer les erreurs pour un segment particulier du code VBA. N'oubliez pas que si vous utilisez l'instruction On Error Resume Next dans un code VBA, toutes les erreurs suivantes sont ignorées. Si vous souhaitez désactiver cette fonction et activer la gestion des erreurs pour un autre segment, utilisez l'instruction En cas d'erreur, aller à 0 Cela permettra de réactiver la gestion des erreurs.

Usage générique :

Sub error_handling()

Pour ignorer les erreurs

En cas d'erreur, reprendre la suite

// lignes de codes

Pour activer le traitement des erreurs

En cas d'erreur, aller à 0

//lignes de codes

Fin du sous

Jetez un coup d'œil au code VBA suivant :

 Sub error_handling() Dim i As Long 'pour ignorer l'erreur Sur l'erreur Reprise suivante For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i 'pour désactiver sur l'erreur reprise suivante Sur l'erreur GoTo 0 MsgBox i / 0 End Sub 

Nous avons utilisé le code précédemment pour le VLOOKUP Nous avons ajouté un morceau de code supplémentaire pour vous montrer que notre code ignorera les erreurs pendant l'exécution de la fonction VLOOKUP mais il activera la gestion des erreurs après la En cas d'erreur, aller à 0 déclaration.

Lire la suite : Excel VBA : Désactiver l'option "En cas d'erreur, reprendre la suite".

VBA "On Error GoTo" (en cas d'erreur)

Auparavant, j'ai parlé de la gestion des erreurs à l'aide de la méthode On Error. En cas d'erreur, reprendre la suite. Il existe également deux types de traitement des erreurs que je vais aborder dans les sections suivantes.

1. VBA Sur erreur GoTo 0

Le site Sur l'erreur Goto 0 est le paramètre intégré d'Excel si vos codes ne comportent pas de gestionnaire d'erreurs. Cela signifie essentiellement que lorsque VBA trouve une erreur avec la commande En cas d'erreur, aller à 0 il arrêtera l'exécution du code et affichera son traditionnel message d'erreur.

En cas d'erreur, aller à 0 Elle ne définit pas la ligne 0 comme le début du code de gestion des erreurs, même si la méthode comporte une ligne numérotée 0.

Jetez un coup d'œil au code suivant :

 Sub on_error_goto_0() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo 0 ActiveSheet.Name = "Copy-4" End Sub 

Nous vous avons déjà montré ce code, qui permet de masquer toutes les feuilles de calcul du classeur actuel. Maintenant, j'ai en effet un morceau de code supplémentaire avec En cas d'erreur, aller à 0 pour afficher l'erreur. Si vous exécutez le code, vous verrez ce qui suit :

Il affiche cette erreur parce que nous ne pouvons pas avoir des feuilles avec le même nom dans le classeur actif.

2. ligne VBA On Error GoTo

Maintenant, vous pouvez également demander à Excel d'exécuter un autre segment de code s'il trouve une erreur en utilisant la fonction En cas d'erreur, aller à la ligne Il indique à Excel d'exécuter quelque chose après avoir trouvé une erreur.

L'argument ligne est une étiquette de ligne ou un numéro de ligne quelconque. Si notre code provoque une erreur d'exécution, il se déplacera sur la ligne, provoquant le gestionnaire d'erreur actif dans l'exécution. N'oubliez pas que votre ligne définie doit se trouver dans la procédure exacte de l'instruction On Error ; sinon, elle provoquera une erreur de compilation.

Jetez un coup d'œil au code suivant :

 Sub on_error_goto_line() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo error_handler ActiveSheet.Name = "Copy-4" Exit Sub error_handler : MsgBox "There is also a sheet with the same name. Try a different one." End Sub 

Vous avez vu le code dans l'exemple précédent. Quand nous avons utilisé En cas d'erreur, aller à 0 Mais ici, nous l'avons remplacé par l'option En cas d'erreur, aller à la ligne déclaration.

Maintenant, exécutez le code et vous verrez ce qui suit :

Comme vous pouvez le constater, la boîte de dialogue d'erreur standard ne s'affiche pas, mais la boîte de message personnalisée que nous avons créée dans la section gestionnaire d'erreurs Lorsqu'Excel trouve une erreur, il passe à la section gestionnaire d'erreurs et nous montre la boîte de messages.

Nous avons également utilisé un Exit Sub dans la procédure. S'il n'y a pas de feuille nommée " VLOOKUP "Ensuite, nous devons terminer l'exécution ici, car nous n'avons pas besoin de poursuivre avec le gestionnaire d'erreur et d'afficher la boîte de message.

VBA "On Error" ne fonctionne pas dans Excel

Parfois, quels que soient vos efforts, la méthode On Error ne fonctionne pas. Auparavant, nous avons implémenté la méthode En cas d'erreur pour gérer les erreurs, mais il arrive parfois que des erreurs soient affichées même si vous utilisez la méthode En cas d'erreur, reprendre la suite ou En cas d'erreur, aller à 0 Il peut y avoir plusieurs raisons dans votre code que vous devez corriger. Je ne vais pas vous montrer cela.

La raison fondamentale de VBA ' En cas d'erreur Not Working in Excel est d'activer l'option "Break on All Errors" dans Excel.

Suivez ces étapes pour résoudre ce problème :

📌 Étapes

  • D'abord, appuyez sur Alt+F11 sur votre clavier pour ouvrir l'éditeur VBA.
  • Maintenant, cliquez sur Outils> ; Options.

  • Après cela, cliquez sur le Général dans l'onglet Options de la boîte de dialogue.

  • Ici, vous pouvez voir, " Interruption sur toutes les erreurs "Cela vous empêche essentiellement de traiter les erreurs.
  • Pour le modifier, sélectionnez l'option " Interruption en cas d'erreurs non gérées "et cliquez sur OK .

J'espère que cela résoudra votre problème de VBA "On Error" qui ne fonctionne pas dans Excel.

Lire la suite : Raisons et corrections de l'erreur NOM en Excel (10 exemples)

💬 Choses à retenir

✎ On Error Resume Next ne corrige pas les erreurs, mais ignore l'erreur et passe à l'instruction suivante.

Excel piège et stocke les erreurs d'exécution dans l'objet Err. Lorsque nous utilisons la fonction En cas d'erreur, reprendre la suite il efface les propriétés de l'objet Err.

Vous pouvez désactiver le En cas d'erreur, reprendre la suite dans votre code VBA dans Excel en ajoutant l'instruction En cas d'erreur, aller à 0 déclaration.

Conclusion

Pour conclure, j'espère que ce tutoriel vous a fourni un élément de connaissance utile pour utiliser l'application En cas d'erreur, reprendre la suite en Excel VBA. Je vous recommande d'apprendre et d'appliquer toutes ces instructions à votre ensemble de données. Téléchargez le cahier d'exercices et essayez-les vous-même. N'hésitez pas non plus à donner votre avis dans la section des commentaires. Vos précieux commentaires nous motivent à créer des tutoriels comme celui-ci.

N'oubliez pas de consulter notre site web Exceldemy.com pour divers problèmes et solutions liés à Excel.

Continuez à apprendre de nouvelles méthodes et à vous développer !

Hugh West est un formateur et analyste Excel très expérimenté avec plus de 10 ans d'expérience dans l'industrie. Il est titulaire d'un baccalauréat en comptabilité et finance et d'une maîtrise en administration des affaires. Hugh a une passion pour l'enseignement et a développé une approche pédagogique unique qui est facile à suivre et à comprendre. Sa connaissance approfondie d'Excel a aidé des milliers d'étudiants et de professionnels du monde entier à améliorer leurs compétences et à exceller dans leur carrière. Grâce à son blog, Hugh partage ses connaissances avec le monde, offrant des tutoriels Excel gratuits et une formation en ligne pour aider les particuliers et les entreprises à atteindre leur plein potentiel.