<< Retour au sommaire

 

VBA, Les boucles

 

 

 

Table des matières

  1. Introduction ;
  2. La boucle While ;
  3. La boucle For ;
  4. La boucle Do Until ;
  5. Les boucles imbriquées ;
  6. Un exemple dans EXCEL.

 

Introduction

 

Une boucle permet de réitérer l’exécution d’un traitement selon une condition.

Une boucle est également appelée une répétitive.

Il existe 3 types de boucles :

la boucle While ;

la boucle Do ;

la boucle For.

 

Tant que la boucle ne remplit pas une condition attendue, le traitement qu’elle contient est exécuté.

Chaque exécution du traitement contenu dans la boucle est appelée une itération. 

Vous devez être très prudent lorsque vous partez dans la construction d’une boucle ! En effet, vous apprendrez peut-être à votre insu à découvrir le « fameux piège » de la boucle ! Qu’est-il ?

Enfait, puisqu’il faut qu’une condition soit remplie pour que la boucle soit interrompue, vous comprendrez que dans le cas d’une boucle pour laquelle la condition ne serait jamais atteinte, serait une boucle éternelle qui risquerait de vous embêter au point peut-être, de planter tout simplement votre machine…

Alors, avant d’exécuter votre boucle, je vous conseille vivement de relire attentivement votre code afin d’être sûr qu’il n’y ait aucune erreur de logique.

 


La boucle While

 

Cette boucle permet l’exécution d’un traitement tant qu’une condition est vraie.

 

La syntaxe :

While condition

Traitement

Fin de la boucle While

 

Tant que la condition est vraie, traitement est exécuté, la condition est revérifiée ETC.

 

Voici un exemple de code.

Lisez attentivement ce code afin de comprendre l’objectif de la boucle.

C’est simple, une boîte de message apparaît à l’écran et contient la question suivante :

« Êtes-vous d’accord avec moi ? »

L’utilisateur a  le choix de répondre entre « Oui » et « Non ».

S’il répond « Non », la boîte de message est réaffichée à l’écran car la condition de la boucle « tant que » est remplie.

En clair, l’utilisateur n’a qu’une possibilité pour sortir de cette boîte de message, c’est de répondre « Oui ».

 

' Déclaration de la variable Résultat

' pour contenir la réponse de la boîte de message

Dim Résultat As Integer

'Initialisation de Résultat à la valeur VBNo

Résultat = vbNo

'Tant que Résultat est égal à  Non

While Résultat = vbNo

  ' Ouverture de la boîte de message avec la question

  Résultat = MsgBox("Bonjour", vbYesNo, "êtes-vous d'accord avec moi ?")

Wend

' L'utilisateur à répondu Oui

' Affichage d'un message de satisfaction

Résultat = MsgBox("Aure voir", vbOKOnly, "Merci d'avoir approuvé ma question...")

 


La boucle For

 

La boucle For permet d’exécuter un traitement dont le nombre d’itération est déterminé par un compteur qui sera incrémenté à chaque  itération.

 

Voici la syntaxe en français :

Pour Compteur allant de 1 à 10 par pas de 1,

Exécute ce traitement.

Incrémente le compteur.

 

La véritable syntaxe :

For Compteur = Val1 To Val2 Step Val3

Traitement

Next Compteur

 

 

Remarque :

 

Voici un exemple qui va provoquer la concaténation de la chaîne de caractères « Bonjour » à la variable MaChaine.

La concaténation sera exécutée 5 fois.

 

' Déclaration de la variable Compteur

Dim Compteur As Integer

' Déclaration de la variable Chaine

Dim MaChaine As String

' Déclaration de la variable Résultat pour la réponse de la boîte de message

Dim Résultat As Integer

' Pour Compteur prenant les valeurs de 1 à 5 et par pas de 1

For Compteur = 1 To 5 Step 1

  ' Concaténation de la chaîne Bonjour à la variable MaChaine

  MaChaine = MaChaine + "Bonjour"

    Next Compteur

' Affichage de MaChaine dans une boîte de message

Résultat = MsgBox("Résultat", vbOKOnly, MaChaine)

 

La boucle Do Until

 

Cette boucle permet de répéter un traitement jusqu’à ce qu’une condition soit vraie.

 

Voici la syntaxe en bon français :

Faire

Traitement

Jusqu’à ce que condition soit vraie.

 

La syntaxe en VISUAL BASIC :

Do

LeTraitement

Loop Until LaCondition

 

 

Remarque :

 

Voici un exemple de code :

Nous allons déclarer une variable de type chaîne de caractères et elle s’appellera Réponse.

Nous afficherons une question dans InputBox. La question sera :

« Quelle est la capitale de LA France ? »

InputBox sera dans le traitement de la boucle Do Until. La condition de fin de boucle sera vraie lorsque l’utilisateur aura répondu PARIS.

Cependant, nous laisserons une chance à l’utilisateur en lui permettant d’arrêter la boucle s’il répond crac.

A la fin de la boucle, nous afficherons « Bravo » si l’utilisateur a répondu « PARIS », et nous afficherons, « Vous êtes un tricheur », s’il a répondu « crac ».

 

' Déclaration de la variable Réponse contenant la réponse de l'utilisateur

Dim Réponse As String

' Début de la boucle

Do

  ' Affichage de la question

  Réponse = InputBox("Quelle est la capitale de LA FRANCE ?", "Question du jour")

  ' Vérifie si la réponse n'est pas crac

  If Réponse = "Crac" Then Exit Do

' Vérification de la réponse par la boucle Until

Loop Until Réponse = "PARIS"

' Vérifie si l'utilisateur à répondu PARIS ou crac

If Réponse = "PARIS" Then

  ' La réponse est PARIS

  MsgBox ("Bravo !")

Else

  ' La réponse est crac

    MsgBox ("Vous êtes un tricheur !")

End If

 


Les boucles imbriquées

 

Nous pouvons imbriquer une boucle dans une autre boucle.

A chaque exécution de la boucle contenant, la boucle imbriquée est exécutée complètement. Par conséquent, le traitement qui sera intégré dans la boucle imbriquée, est exécuté par le nombre d’itérations de la boucle imbriquée multiplié par le nombre d’itération de la boucle contenant.

Nous pouvons bien sûr imbriquer une boucle dans une boucle imbriquée et ainsi de suite…

Voici donc un exemple de code avec la boucle For :

 

Nous allons déclarer un tableau qui va s’appeler Remplissage.

Ce tableau sera en deux dimensions, 10 par 10, donc le tableau Remplissage pourra contenir 100 valeurs.

La variable NumCel de type entier sera incrémentée de la valeur 1 à chaque exécution d’une itération de la boucle For imbriquée.

Donc, à la fin du traitement des boucles, la variable NumCel contiendra la valeur 100.

 

' Déclaration de la variable Résultat de la boîte de message

Dim Résultat As Integer

' Déclaration du tableau Remplissage

Dim Remplissage(10, 10) As Integer

' Déclaration et initialisation de la variable NumCel

Dim NumCel As Integer

NumCel = 1

' Déclaration des variables compteur pour les boucles FOR

Dim I As Integer

Dim J As Integer

For I = 1 To 10 Step 1

  For J = 1 To 10 Step 1

    ' Affectation de la valeur NumCel

    Remplissage(I, J) = NumCel

   NumCel = NumCel + 1

  Next J

Next I

Résultat = MsgBox("Valeur de la cellule 5 5", vbOKOnly, Remplissage(5, 5))

End Sub

 


Un exemple dans EXCEL

 

Dans cet exemple, nous allons créer une macro qui va rechercher la dernière ligne du tableau, donc de la région de données, et ce, afin d’activer la cellule devant recevoir une nouvelle ligne.

Dans la boucle, nous allons utiliser la commande ActiveCell.OffSet qui va permettre de descendre d’une ligne à chaque ittération…

Je dois donc vous présenter cette commande dès maintenant :

Active.offset

Permet de se déplacer depuis la cellule courante.

La syntaxe :

ActiveCell.OffSet(NombreLignes,NombreColonnes).Select

La description :

NombreLignes est une valeur numérique qui définit le déplacement vertical, donc, de ligne en ligne.

0, aucun déplacement.

Une valeur positive, déplacement à la ligne suivante, 1 pour une ligne, 2 pour 2 lignes, 3 pour 3 lignes Etc.

Une valeur négative, déplacement à la ligne précédente, -1 pour une ligne Etc. 

NombreColonnes est une valeur numérique qui définit le déplacement horizontal, donc, de colonne en colonne.

0, aucun déplacement.

Une valeur positive, déplacement à la colonne suivante, 1 pour une colonne, 2 pour 2 colonnes, 3 pour 3 colonnes Etc.

Une valeur négative, déplacement à la colonne précédente, -1 pour une colonne Etc.

 

Par exemple, pour déplacer le curseur à la ligne précédente :

ActiveCell.OffSet(-1,0).Select

 

Donc, dans notre boucle, comme nous désirons descendre d’une ligne, nous utiliserons la syntaxe suivante :

ActiveCell.OffSet(1,0).Select

 

Attention, vous devez débuter la macro en activant la première cellule en haut à gauche de votre tableau, ici, dans cet exemple, nous considérerons que le tableau débute à la cellule A1.

 

Sub FinDuTableau()

'

' FinDuTableau Macro

'

' Touche de raccourci du clavier: Ctrl+k

' Atteindre la cellule A1

    Application.Goto Reference:="R1C1"

' Vérifie si la cellule courante est différente de chaîne vide

Do While ActiveCell.Value <> ""

  ' Passage à la ligne suivante

    ActiveCell.Offset(1, 0).Select

    Loop

End Sub

 

Philippe BOULANGER