Excel formation - Page de vente TCd - 11 Découvrez la méthode complète pour analyser les données efficacement et sans effort avec les tableaux croisés dynamiques, en cliquant ici

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

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 créer une zone d’impression dynamique et intelligente sur Excel
Comment supprimer les lignes vides ou avec des cellules vides d’un tableau sur Excel
Comment géolocaliser une adresse sur Google Maps en 1 clic avec Excel
Comment calculer le taux de rendement interne d’un projet sur Excel (fonction TRI)
Comment envoyer la sélection par mail en 1 clic avec VBA sur Excel
Comment afficher plusieurs onglets d'un même classeur grâce au multi-fenêtrage d'Excel
Comment convertir des CSV en fichier Excel en masse (tous les fichiers d’un répertoire) avec VBA
6 Astuces pour envoyer facilement un fichier Excel par mail (sans VBA)
3 méthodes pour transformer un texte en majuscule (ou en minuscule) sur Excel
Comment remplacer automatiquement des données (mots, lettres, nombres,…) sur Excel
MISE EN FORME CONDITIONNELLE SUR UN GRAPHIQUE EXCEL
COMMENT DUPLIQUER 500 FOIS (OU PLUS !) UNE FEUILLE DE CALCUL EXCEL EN 1 CLIC

Contact - Plan du site - À propos - Contact

© Excel-Formation 2018 - 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.