N’utilisez jamais la structure GoTo (enfin si quand même !) [#19 FORMATION EXCEL VBA COMPLETE]

Guide « 108 astuces pour grands débutants sur Excel ! » Offert
Booster votre productivité en téléchargeant gratuitement votre ebook PDF des meilleures astuces pour les débutants et les pros d'Excel
Excel formation - 00 Astuces - 100
 

Dans ce nouveau chapitre de notre formation sur l’apprentissage du développement d’application Excel en VBA, je vais vous présenter une nouvelle méthode de développement, que de nombreux développeur aiment à surnommer la méthode spaghetti ; tant celle-ci peut rapidement avoir pour conséquence de rendre le code abstrait ! À utiliser avec précaution !

 

Téléchargement

Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
 

 

Tutoriel Vidéo

 

 

Vous trouverez très régulièrement de nouvelles vidéos sur la chaîne, alors pensez à vous abonner pour ne manquer aucune astuce et devenir rapidement un pro d’Excel (cliquez-ici) !

 

1. Présentation

Au cours des différents chapitres précédent de la formation sur l’apprentissage du développement de VBA, nous avons découverts un certain nombre de concepts qui permettent de mettre en place, ce que nous appelons dans le jargon des développeurs une « programmation structurée », c’est-à-dire que chaque portion de code (les « procédures » ou les « fonctions ») dispose d’un point d’entrée unique, et d’un point de sortie lui aussi unique :

  • Chaque portion de code est saisie dans une procédure ou une fonction, qui peut être appelée à tout moment,
  • Des tests If ou même Case permettent d’orienter les décisions prises par le programme,
  • Des morceaux codes peuvent être répétés à volonté grâce aux boucles (For, While, Untile, boucles récursives)

Cela permet d’avoir un code simple à lire, à comprendre, à modifier et donc à améliorer.

À présent, nous allons découvrir un nouveau concept de programmation que nous pourrons tout à fait utiliser dans nos macros VBA, et nous verrons que même si ce concept dispose de son lot de défauts, il va également vite devenir essentiel de le maîtriser dans cas bien particuliers !

 

2. Étiqueter son code

Poser des étiquettes (également Labels) dans le code consiste à identifier des lignes ou des portions de codes en utilisant un nom unique en tout début de ligne, suivi de deux points (« : »).

Il est ainsi possible de numéroter les lignes d’une procédure :

 

Sub exempleEtiquettes()
     
    1:  Dim a As Integer
    2:  a = 10
    3:  a = a + 5
    4:  MsgBox a
     
    End Sub

 

Ou encore de donner un nom à ces lignes :

 

Sub exempleEtiquettes()
     
    declarationVariables:   Dim a As Integer
    affectationValeur:      a = 10
    modificationValeur:     a = a + 5
    affichageValeur:        MsgBox a
     
    End Sub

 

Bien entendu, les accents ou espaces sont à proscrire des étiquettes sous peine de générer des erreurs d’exécutions :

Excel formation - VBA19 - goto - 01

Dans cet exemple, les étiquettes permettent de repérer des lignes de codes, mais elles pourraient tout aussi bien se référer à un ensemble de lignes :

 

Sub exempleEtiquettes()
     
    declarationVariablesEtAffecation:
        Dim a As Integer
        a = 10
        
    modificationValeurEtAffichage:
        a = a + 5
        MsgBox a
     
    End Sub

 

Cela permet de bien séparer chaque portion de code, mais nous pourrions tout aussi bien utiliser des commentaires.

Pour le moment, nous n’avons pas encore abordé la notion de commentaires, mais sachez juste qu’il s’agit de lignes ou partie de lignes qui seront ignorées par Excel lors de l’exécution d’une macro. Les commentaires sont identifiés par la présence de l’apostrophe au début (et VBE les affiche en vert). Rendez-vous dans le prochain chapitre à sortir la semaine prochaine pour tout savoir sur les commentaires ! :

Excel formation - VBA19 - goto - 02

Alors dans ce cas, pourquoi utiliser des étiquettes dans le code ?

 

3. Suivre les étiquettes : l’instruction Goto

En plus d’identifier chaque partie de code, comme nous venons justement de le voir juste avant, l’intérêt de poser ainsi des étiquettes dans notre code est que nous allons pouvoir nous rendre directement sur une ligne identifiée par une étiquette en utilisant l’instruction Goto !

Par exemple, imaginons que nous souhaitions contrôler la valeur de a afin de modifier celle-ci jusqu’à ce que sa valeur soit au moins égale à 20 :

 

Sub exempleEtiquettes()
     
    declarationVariablesEtAffecation:
        Dim a As Integer
        a = 10
        
    modificationValeurEtAffichage:
        a = a + 5
        MsgBox a
     
        If a < 20 Then GoTo  modificationValeurEtAffichage
        
    End Sub

 

Si vous avez suivi les précédents chapitres de la formation, la structure du code que nous venons de mettre en place devrait en principe vous rappeler ce que nous y avons vu !

En effet, nous venons ici d’introduire un nouveau type de boucle !

Excel formation - VBA19 - goto - 03

Ainsi il serait bien plus adapté d’utiliser par exemple une boucle Do While, spécialement conçue pour ce type d’opération :

 

    Do While a < 20
            a = a + 5
            MsgBox a
        Loop

 

De cette manière, n’importe qui ayant un peu de connaissance en développement pourra clairement identifier en un seul coup d’œil l’objectif de cette boucle Do While, alors qu’il serait nécessaire de remonter au niveau de l’étiquette pour en comprendre l’objectif dans l’exemple donné juste avant.

Bien sûr, ici le code est très simple, mais imaginez fonctionner de cette manière sur une procédure constituée de plusieurs centaines, ou même milliers de lignes, la compréhension en serait réduite à un véritable jeu d’enquête !

En dehors du cas que nous verrons juste après, il sera possible et vivement préférable de se passer d’utiliser l’instruction GoTo !

 

4. Dans quel cas utiliser Goto ?

En revanche, il existe un cas dans lequel l’instruction Goto s’avère être indispensable : il s’agit de la gestion des erreurs d’exécution !

En effet, imaginons dans notre exemple que le nombre de départ soit à renseigner par l’utilisateur (via l’affichage d’une Inputbox que nous commençons maintenant à bien connaître) :

 

declarationVariablesEtAffecation:
        Dim a As Integer
        a = InputBox("Quel est le nombre de départ  ?")
        
        Do While a < 20
            a = a + 5
            MsgBox a
        Loop
        
    End Sub

 

Tant que l’utilisateur joue le jeu et saisi un nombre, alors le programme va effectivement être fonctionnel et pouvoir suivre le fil de son déroulement.

En revanche, imaginons que celui-ci décide de saisir un mot :

Excel formation - VBA19 - goto - 04

Immanquablement, lorsque Excel va tenter d’affecter cette valeur à la variable a qui pour rappel est typée en tant que Integer, c’est-à-dire que celle-ci ne peut avoir pour valeur qu’un nombre entier, alors nous seront forcément confrontés à une erreur d’exécution :

Excel formation - VBA19 - goto - 05

Pour éviter une interruption de la macro, pour pourrions plutôt intercepter cette erreur, informer l’utilisateur de son erreur et l’inviter à saisir un nouveau nombre !

Excel formation - VBA19 - goto - 06

Pour cela :

  • 1 : Nous insérons une nouvelle étiquette saisieValeur juste avant la saisie de la valeur par l’utilisateur,
  • 2 : Nous interceptons l’erreur éventuelle avec l’instruction On Error afin de rediriger le code vers l’étiquette erreurSaisie (voir point juste en dessous). La ligne On Error Goto 0 permet d’annuler l’effet de l’interception de l’erreur pour les lignes qui suivent, les erreurs d’affectation eventuelles engendront à nouveau une erreur d’exécution,
  • 3 : Nous insérons une nouvelle portion de code, identifié par l’étiquette erreurSaisie,
  • 4 : Puis nous remontons le fil du code jusqu’à retourner au niveau de l’étiquette saisieValeur

De cette manière, toute saisie incorrecte aboutie sur une nouvelle demande :

Excel formation - VBA19 - goto - 07

Par contre, si nous saisissons un résultat correct, ce message sera encore affiché ! La raison en est simple : une fois sorti de la boucle Do While, le code continu de s’exécuter jusqu’à arriver sur la ligne contenant le MsgBox, ainsi que le GoTo !

Il est donc nécessaire de quitter la procédure juste avant en utilisant l’instruction Exit Sub :

 

Sub exempleEtiquettes()
     
    declarationVariablesEtAffecation:
        Dim a As Integer
        
    saisieValeur:
        On Error GoTo erreurSaisie
            a = InputBox("Quel est le nombre de  départ ?")
        On Error GoTo 0
        
        Do While a < 20
            a = a + 5
            MsgBox a
        Loop
        
        Exit Sub
        
    erreurSaisie:
        MsgBox "Veuillez saisir un nombre"
        GoTo saisieValeur
        
    End Sub

 

 



Articles qui pourraient vous intéresser

Comment remplir automatiquement des cellules d'un tableau Excel avec la complétion automatique
Comment regrouper (ou pas !) les dates d’un tableau croisé dynamique (TCD) sur Excel ?
Comment connecter Excel sur Internet, sans VBA ?
Comment traduire automatiquement des fonctions Excel dans leur version originale ?
Comment analyser les résultats d’un sondage ou questionnaire avec Excel ?
Comment utiliser la fonction SOMME.SI pour effectuer des recherches sur des textes sur Excel ?
Comment calculer et étudier des écarts budgétaires avec Excel ?
Comment verrouiller et protéger un objet (graphique, image, zone de texte…) sur Excel ?
Comment formater des dates correctement dans Excel ?
Comment protéger le formatage des cellules tout en autorisant la saisie de données dans Excel ?
Comment transformer une photo en tableau Excel ?
Comment créer un publipostage automatique avec Excel ? (sans Word !)

Contact - Plan du site - À propos - Contact

© Excelformation.fr 2018-2024 - Excel, simplement

Haut de la page

Excelformation.fr propose de nombreuses formations pratiques et gratuites sur Microsoft Excel : des cours pour apprendre à structurer et analyser les données, des tutos sur les fonctions avancées, les formules et les formules avancées d'Excel, les formules matricielles, les mise-en-formes conditionnelles, les graphiques Excel (xls, xlsx, xlsm,…). Des tutoriels pour apprendre à automatiser les tâches répétitives (via des macro-commandes en VBA) de vos classeurs Excel.