1. Livres & vidéos
  2. Macros et langage VBA
  3. Les boucles
Extrait - Macros et langage VBA Découvrez la programmation sous Excel (3e édition)
Extraits du livre
Macros et langage VBA Découvrez la programmation sous Excel (3e édition)
2 avis
Revenir à la page d'achat du livre

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, si cela s’avère nécessaire.

À 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 du code, 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 un chiffre entre 1 et 0") 
   If Reponse <> 0 And Reponse <> 1 Then 
       Reponse = InputBox("Veuillez saisir un chiffre entre 1 et 0") 
   End If 
   If Reponse <> 0 And Reponse <> 1 Then 
       Reponse...

Une boucle c’est quoi  ?

Une boucle en VBA est un ensemble 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 une variable servant pour ledit compteur.

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

Entre chaque tour de boucle, la valeur dont s’incrémente ou se décrémente la variable s’appelle le pas. Par défaut, le pas est de valeur 1, mais vous pouvez indiquer avec quel pas votre exécution se déroule pour aller de la valeur de début à la valeur d’arrivée. Par exemple, si vous...

Une boucle qui n’en est pas une : With End With

À plusieurs reprises dans cet ouvrage, vous verrez apparaître l’instruction With, qui permet d’exécuter une série d’instructions sans avoir besoin de repréciser l’objet sur lequel les instructions doivent s’appliquer.

With UnObjet 
   .ProprieteA = Valeur1 
   .ProprieteB = Valeur2 
End With 

Exemple 19 : syntaxe générale d’une structure With End With

L’analogie dans le monde réel serait d’aller faire une série d’exercices dans un ouvrage. Il est plus facile d’indiquer de faire « les exercices 1, 2 et 3 de la page 115 », plutôt que de faire l’exercice 1 de la page 115, de refermer le livre, de le rouvrir à la page 115 pour faire l’exercice 2, et encore une fois le fermer et le rouvrir pour faire l’exercice 3.

With Range("A1") 
   .Value = 12 
   .AddComment "Exemple de commentaire" 
   .Activate 
End With 

Exemple 20 : exemple de code utilisant une structure With End With

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 21 : boucle infinie avec Do Until Loop

Pour arrêter le programme alors qu’il est en train de s’exécuter, 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 choisir de poursuivre l’exécution du programme (Continuer), de l’arrêter (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...

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

1 pas à la fois

 Créez une macro AfficherDe5a15.

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

 Exécutez la macro AfficherDe5a15.

Vous devrez voir successivement les valeurs de 5 à 15 avec un pas de 1.

De 2 en 2

 Créez une macro AfficherDe50a60.

Cette macro devra afficher les valeurs allant de 50 à 60, en allant de 2 en 2.

 Exécutez la macro AfficherDe50a60.

Vous devrez voir successivement les valeurs paires de 50 à 60.

À reculons

 Créez une macro Afficher30a10PasDeMoins5.

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

 Exécutez la macro Afficher30a10PasDeMoins5.

Vous devrez voir successivement les valeurs 30, 25, 20, 15 et 10.

À pas paramétré

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

Cette procédure devra afficher les valeurs comprises entre BorneDebut et BorneFin 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 3 et enfin 5, 10 et -2.

 Exécutez la macro AppelBoucleAPasParametre.

Vous...