Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !

Les boucles

Objectifs

Dans ce chapitre, vous allez découvrir une partie importante de la programmation en VBA, celle des boucles. Nous y aborderons quelques définitions et cas de figure dans la vie réelle, puis nous verrons les différents types de boucles.

Vous apprendrez à structurer vos boucles et à en sortir de façon anticipée.

À la fin du chapitre, vous trouverez des exercices pour vous entraîner.

Cas d’utilisation des boucles

En VBA, lorsque vous souhaitez exécuter à plusieurs reprises la même série d’instructions, la méthode de recopier n fois les mêmes lignes n’est pas une solution viable, surtout lorsqu’il s’agit d’écrire un programme, comme par exemple :

Sub MauvaiseFaconDeCoder() 
   MsgBox "Bonjour" 
   MsgBox "Bonjour" 
   MsgBox "Bonjour" 
   .…. 
   MsgBox "Bonjour" 
End Sub 

Exemple 1 : mauvaise façon de coder une instruction qui se répète

De la même façon, si vous souhaitez afficher le message jusqu’à ce que l’utilisateur tape une des valeurs que vous souhaitez (1 ou 0 par exemple), vous ne saurez pas à quel moment vous devez poursuivre le reste de votre programme comme avec le code suivant.

Sub AutreMauvaiseFaconDeCoder() 
   Dim Reponse As Integer 
   Reponse = InputBox("Veuillez saisir une valeur entre 1 et 0") 
   If Reponse <> 0 And Reponse <> 1 Then 
       Reponse = InputBox("Veuillez saisir une valeur entre 1 et 0") 
   End If 
   If Reponse <> 0 And Reponse <> 1 Then 
       Reponse...

Une boucle c’est quoi ?

Une boucle en VBA est une série de mots-clés qui délimitent une série d’instructions qui pourront être exécutées à plusieurs reprises, selon des conditions que vous pourrez fixer vous-même, comme afficher trois fois le même message, ou encore effectuer le même traitement sur plusieurs lignes d’une même feuille Excel.

Il existe plusieurs types de boucles, chacune ayant son intérêt selon les besoins. Leur nom est directement lié aux mots-clés qui sont utilisés pour encadrer les instructions répétées. 

Une boucle est une structure de code composée de trois parties :

[Début de Boucle] [liée à une condition] 
   Instructions 
[Boucler] [liée à une condition] 

Pour savoir quel type de boucle utiliser, un tableau récapitulatif des cas de figure vous sera présenté en fin de chapitre.

Les différents types de boucles

Les boucles For Next

Lorsque vous savez déjà combien de fois vous souhaitez exécuter des instructions, la boucle For Next est tout indiquée.

La syntaxe générale d’une telle boucle est la suivante :

For Compteur=ValeurDebut To ValeurFin 
   Instructions 
Next Compteur 

Exemple 3 : syntaxe générale d’une boucle For Next

Voici un exemple de boucle For Next :

Dim i As Long 
For i = 1 To 10 
   MsgBox "C'est le jour de la Marmotte" 
Next i 

Exemple 4 : utilisation d’une boucle For Next

Les mots-clés For et Next lui donnent son nom d’usage.

Dans ce type de boucle un compteur est utilisé pour faire varier d’une valeur de départ jusqu’à une valeur d’arrivée.

Dans notre exemple précédent, notre compteur est la variable i, de type numérique entier, qui va varier de 1 à 10, et va donc prendre successivement les valeurs 1, 2, 3, 4, 5, 6, 7, 8, 9 et 10. Une fois la valeur d’arrivée atteinte, on dit qu’on « sort de la boucle », et le programme poursuit l’exécution des lignes qui suivront après la boucle.

Ce qui est pratique avec ce type de boucles, c’est que vous pouvez utiliser la valeur de la variable i à l’intérieur de la boucle pour votre traitement.

Ainsi vous pouvez afficher les valeurs de 1 à 5 à l’utilisateur avec ces 3 lignes :

For i = 1 To 5 
   MsgBox i 
Next i 

Exemple 5 : autre utilisation d’une boucle For Next

Mais vous pouvez également utiliser cette variable pour lire les valeurs des cellules A1 à A5 par exemple, avec :

For i = 1 To 5 
   MsgBox Range("A" & i).Value 
Next i 

Exemple 6 : utilisation de la variable i dans une boucle For Next

Mais ce n’est pas tout, vous pouvez également indiquer avec quel pas votre programme avance pour aller de la valeur de début à la valeur d’arrivée. Par exemple, si vous souhaitez afficher les valeurs impaires de 1 à...

Boucle infinie et autres types d’erreurs liés aux boucles

Boucle infinie

Attention, il est fréquent que lorsque vous utilisez des boucles de type Do Loop ou While Wend, vous fassiez une mauvaise évaluation des critères d’entrée/sortie de boucle et vous tombiez dans une « boucle infinie », qui fera que votre application tournera indéfiniment (avec pour conséquence de geler à l’écran), ne vous laissant plus d’autre choix que de l’arrêter pour la redémarrer.

Voici un exemple de boucle infinie (la condition sera toujours fausse/False) :

Do Until False 
   Instructions 
Loop 

Exemple 19 : boucle infinie avec Do Until Loop

Pour arrêter le programme alors qu’il est en train de tourner, vous avez la possibilité d’utiliser simultanément les touches de votre clavier Ctrl et Pause. Il est également possible d’utiliser la touche Echap. La fenêtre suivante s’affichera :

images/09SOB01N.png

Vous pouvez alors poursuivre le programme (Continuer), d’arrêter le programme (Fin), d’accéder au code (Débogage) ou encore d’accéder à l’aide en ligne de Microsoft.

Dépassement de capacité

Il peut arriver également que lorsque vous utilisez les boucles, la variable qui vous sert de compteur aille au-delà des limites...

Sortir d’une boucle

Bien que cela soit déconseillé lorsque vous débutez la programmation VBA avec les boucles, sachez qu’il est possible de sortir de façon anticipée d’une boucle, c’est-à-dire de sortir de la boucle avant d’atteindre la valeur maximum ou que la condition de sortie soit vraie. L’instruction de sortie anticipée comportera le mot-clé Exit (Sortir) associé au type de boucle de laquelle vous souhaitez sortir. Cette instruction vous permet de gagner du temps, mais elle rendra plus difficile le débogage ultérieur de votre code. Aussi il est recommandé de l’utiliser avec parcimonie.

Sortir d’une boucle For - Exit For

Pour sortir des boucles de type For Next ou de type For Each Next, la syntaxe de sortie anticipée se fera au moyen des mots-clés Exit For.

Par exemple, si vous parcourez les 50 premières lignes de la colonne A, pour vérifier que la valeur ENI est disponible :

Dim bENIEstPresent As Boolean 'sert à savoir si la valeur ENI est trouvée 
bENIEstPresent = False 'on initialise notre variable 
Dim i As Integer 
For i = 1 To 50 
   If Range("A" & i).Value = "ENI" Then 'Si la cellule contient ENI alors 
       bENIEstPresent = True 'on bascule la variable à Vrai/True ...

Récapitulatif selon les cas

Bien que plusieurs types de boucle soient à votre disposition, toutes n’auront pas la même efficacité. Aussi afin que vous sachiez quelle structure de code utiliser selon le cas de figure, voici un tableau récapitulatif.

Cas où N le nombre de fois où les instructions seront exécutées est :

Connu à l’avance

Inconnu (de 0 à N fois)

Inconnu (1 fois ou plus)

Boucle For Next For i=1 To 10 ... Next i

Boucle Do Until Loop  Do Until Condition ... Loop

Boucle Do Loop Until Do ... Loop Until Condition

Boucle For Each Next

Boucle Do While Loop Do While Condition ... Loop

Boucle Do Loop While Do ... Loop While Condition

L’expérience de programmation vous permettra par la suite de vous adapter selon votre aisance et votre compréhension de votre programme.

Exercices

Boucles For Next

À pas de 1

 Créez une macro AfficherDe15a20.

Cette macro devra afficher les valeurs allant de 15 à 20.

 Exécutez la macro AfficherDe15a20.

Vous devrez voir successivement les valeurs 15 à 20.

À pas de 2

 Créez une macro AfficherDe10a20.

Cette macro devra afficher les valeurs allant de 10 à 20, en allant de 2 en 2.

 Exécutez la macro AfficherDe10a20.

Vous devrez voir successivement les valeurs paires de 10 à 20.

À Pas décroissant

 Créez une macro Afficher40a20PasDeMoins5.

Cette macro devra afficher les valeurs allant de 40 à 20, avec un pas décroissant de 5.

 Exécutez la macro Afficher40a20PasDeMoins5.

Vous devrez voir successivement les valeurs 40, 35, 30, 25 et 20.

À pas paramétré

 Écrivez une procédure BoucleAPasParametre, qui prendra en paramètre trois valeurs numériques entières, nommées respectivement BorneA, BorneB et Pas.

Cette procédure devra afficher les valeurs comprises entre BorneA et BorneB selon le pas Pas.

 Créez une macro AppelBoucleAPasParametre.

La macro fera appel à la procédure BoucleAPasParametre à 3 reprises. Elle lui passera successivement les valeurs 2, 7 et 1, puis 5, 10 et 2 et enfin 5, 10 et-2.

 Exécutez la macro AppelBoucleAPasParametre.

Vous devrez voir successivement...