Vous êtes sur la page 1sur 7

Initiation à la programmation P a g e |1

CHAPITRE IV. STRUCTURES ITERATIVES OU REPETITIVES


Démarche
 Introduction
 La boucle While… Wend ou Do … Loop
 Exercices
 La boucle For … Next
 Exercices
 Instruction Exit Do, Exit For
 Exercices

IV. 1. Introduction

Prenons le cas d’une saisie au clavier (une lecture), par exemple, on pose une question
laquelle l’utilisateur doit répondre par O (Oui) ou N (Non). Mais l’utilisateur maladroit risque
fort tôt ou tard de taper autre chose que cela. Dès lors, le programme peut soit planter par
une erreur d’exécution (parce que le type de réponse ne correspond pas au type de la variable
attendu) soit se dérouler normalement jusqu’au bout, mais en produisant des résultats
fantaisistes. Alors, dans tout programme un tant soit peu sérieux, on met en place ce qu’on
appelle un contrôle de saisie (pour vérifier que les données entrées au clavier correspondent
bien à celles attendues par le programme).

A vue de nez, on pourrait essayer avec un SI. Voyons voir ce que cela donne :

Sub boucle_debut()
Dim reponse As String
reponse = InputBox("Voulez-vous quitter ? O/N")
If reponse <> "O" And reponse <> "N" Then
MsgBox ("Saisie erronnée. Recommencez")
reponse = InputBox("Voulez-vous quitter ? O/N")
End If
End Sub
C’est impeccable. Du moins tant que l’utilisateur a le bon goût de ne se tromper qu’une seule
fois, et d’entrer une valeur correcte à la deuxième demande. Si l’on veut également bétonner
en cas de deuxième erreur, il faudrait rajouter un SI. Et ainsi de suite, on peut rajouter des
centaines de SI, et écrire un programme aussi lourd qu’une blague des Grosses Têtes, on n’en
sortira pas, il y aura toujours moyen qu’un acharné flanque le programme par terre. C’est donc
une impasse.

a. Définition générale
Une boucle est une structure qui permet de répéter les mêmes instructions plusieurs fois.
Initiation à la programmation P a g e |2

b. Fonctionnement
Voici ce qui se passe dans l’ordre :
1. L’ordinateur lit les instructions de haut en bas ;
2. Puis, une fois arrivé à la fin de la boucle, il repart à la première instruction ;
3. Il recommence alors à lire les instructions de haut en bas
4. Il repart au début de la boucle.

Le problème est que si on ne l’arrête pas, l’ordinateur est capable de répéter les instructions
à l’infini ! Il vous faut indiquer une condition d’arrêt. Cette condition signifiera « Répète la
boucle tant que la condition est vraie ». Par exemple « Exit Do, Exit For»
c. Types de boucles
Il y en a plusieurs, mais nous verrons dans ce cours que deux :
La boucle While… Wend ou Do While … Loop (tantQue en algorithmique)
La boucle for … Next (Pour … suivant en algorithmique)

1. La boucle Do While … Loop (While…Wend)

En programmation VBA, la boucle While… Wend ou Do While … Loop, francisée en boucle


tantQue, est une structure permettant d’exécuter un ensemble d’instructions de façon
répétée sur base d’une condition d’itération.

Elle peut être considérée comme une répétition de if.


Synthaxes :

While condition_d’iteration
Instructions
Wend

Ou encore
Do While condition_d’iteration
Instructions
Loop
Exemple : Reprenons notre exercice de vérification de la réponse de l’utilisateur et
implémentons avec la boucle Do While … Loop.

Sub Boucle()
Rem While…Wend
Dim rep As String
rep = InputBox("Voulez-vous quitter? (O/N)")
While rep <> "O" And rep <> "N"
MsgBox ("ERREUR! VEUILLEZ TAPER O OU N!")
rep = InputBox("Tapez O ou N")
Wend
Initiation à la programmation P a g e |3

If rep = "O" Then


MsgBox ("Vous avez tapé Oui")
Else
MsgBox ("Vous avez tapé Non")
End If
End sub

Sub Boucle_debut()
Rem Do…Loop
Dim rep As String
rep = InputBox("Voulez-vous quitter? (O/N)")
Do While rep <> "O" And rep <> "N"
MsgBox ("ERREUR! VEUILLEZ TAPER O OU N!")
rep = InputBox("Tapez O ou N")
Loop
If rep = "O" Then
MsgBox ("Vous avez tapé Oui")
Else
MsgBox ("Vous avez tapé Non")
End If
End Sub

Exercices
1) Ecrire un programme qui demande cinq fois à l’utilisateur d’écrire son nom.

Sub demande_cinq_fois_nom1()
Dim nom As String, compteur As integer
compteur = 1
While compteur <= 5
nom = InputBox("Entrer votre nom ici :")
compteur = compteur + 1
Wend
End Sub

Ou encore

Sub demande_cinq_fois_nom2()
Dim nom As String, compteur As integer
compteur = 1
Do While compteur <= 5
nom = InputBox("Entrer votre nom ici :")
compteur = compteur + 1
Loop
End Sub
Initiation à la programmation P a g e |4

2) Ecrire un programme qui demande cinq fois à l’utilisateur d’écrire son nom et affiche à la
fin le nom.

Sub demande_cinq_fois_nom_avec_affichage()
Dim nom As String, compteur As integer
compteur = 1
Do While compteur<=5
nom = InputBox("Entrer votre nom ici :")
If compteur = 5 Then
MsgBox "Votre nom est : " & nom
Exit Do
End If
compteur = compteur + 1
Loop
End Sub

4) Ecrire un programme VBA qui affiche dix fois « Hello world »

3) Retour en algorithmique : Ecrire un programme qui calcul la factorielle d’un nombre saisis
au clavier avec la boucle « tantQue »

Sub factorielle()
Dim nb As Integer, fac As Double, i As Integer
nb = InputBox("Entrez un nombre")
While nb <= 0
If nb = 0 Then
fac = 1
MsgBox ("La factorielle de 0 est " & fac)
Exit Sub
Else
nb = InputBox("ERREUR! Entrez un nombre positif svp!")
End If
Wend
fac = 1
i=1
While i <= nb
fac = fac * i
i=i+1
Wend
MsgBox ("La factorielle de " & nb & " est " & fac)
End Sub
Initiation à la programmation P a g e |5

Ou encore

Sub factorielle()
Dim nb As Integer, fac As Double, i As Integer
nb = InputBox("Entrez un nombre")
Do While nb <= 0
If nb = 0 Then
fac = 1
MsgBox ("La factorielle de 0 est " & fac)
Exit Sub
Else
nb = InputBox("ERREUR! Entrez un nombre positif svp!")
End If
Loop
fac = 1
i = nb
Do While i <= 1
fac = fac * i
i=i-1
Loop
MsgBox ("La factorielle de " & nb & " est " & fac)
End Sub

2. La boucle For To … Next

La boucle For To … Next est juste une autre façon de faire une boucle

En théorie, la boucle Do while … Loop permet de réaliser toutes les itérations boucles) que
l’on veut, mais il est dans certains cas utile d’avoir un autre système de boucle plus rapide
à écrire. Sachez que vous utiliserez certainement autant de FOR que de WHILE. Il est donc
important de savoir manipuler ces deux types de boucles.
Synthaxe :
For compteur = debut To fin [Step pas]
intructions
Next

Exemple1: Ecrire un programme qui affiche cinq fois “Bonjour le monde”

Sub message_avec_la_boucle_for()
Dim compteur As integer
For compteur = 1 To 5 Step 1
MsgBox "Bonjour le monde"
Next
End Sub
Initiation à la programmation P a g e |6

En l’absence de Step, le programme considère que le pas est de 1

Sub message_avec_la_boucle_for()
Dim compteur As integer
For compteur = 1 To 5
MsgBox "Bonjour le monde"
Next
End Sub

Exemple2 : Ecrire un programme VBA qui calcule et affiche la somme de tous les multiples de
3 compris entre 1 et 100

Sub multiples_de_3()
Dim nb As Integer, som As Double
For nb = 1 To 100
If nb Mod 3 = 0 Then
som = som + nb
End If
Next
MsgBox "La somme des multiples de 3 compris entre 1 et 100 vaut : " & som
End Sub

Exemple3 : calcul de la factorielle avec la boucle For…Next

Sub factorielle()
Dim nb As Integer, fac As Double, i As Integer
nb = InputBox("Entrez un nombre")
While nb <= 0
If nb = 0 Then
fac = 1
MsgBox ("La factorielle de 0 est " & fac)
Exit Sub
Else
nb = InputBox("ERREUR! Entrez un nombre positif svp!")
End If
Wend
fac = 1
For i = 1 To nb
fac = fac * i
Next
MsgBox ("La factorielle de " & nb & " est " & fac)
End Sub
Initiation à la programmation P a g e |7

Ou encore

Sub factorielle()
Dim nb As Integer, fac As Double, i As Integer
nb = InputBox("Entrez un nombre")
Do While nb <= 0
If nb = 0 Then
fac = 1
MsgBox ("La factorielle de 0 est " & fac)
Exit Sub
Else
nb = InputBox("ERREUR! Entrez un nombre positif svp!")
End If
Loop
fac = 1
For i = nb To 1 Step -1
fac = fac * i
Next
MsgBox ("La factorielle de " & nb & " est " & fac)
End Sub

EXERCICES

1. Ecrire un algorithme qui calcule et affiche la somme de tous les nombres pairs
multiples de 7 inférieurs à 50.

2. Ecrire un algorithme qui calcule et affiche la somme de tous les nombres impairs
compris entre 50 et 500 et divisibles par 9.

3. Dans le cours d’Algo, il y a eu 5 travaux cotés sur 10. Ecrire un algorithme qui lit les
cotes de 700 étudiants dans ces 5 travaux et qui affiche l’ (les) étudiant (s) qui a obtenu
la meilleure moyenne sur 10.

4. Soit une élection avec 2 candidats 1 et 2. Il y a 400 bulletins de vote. Chaque électeur
tape le chiffre 1 ou 2 correspondant à son choix. Ecrire un algorithme qui lit le vote de
chaque électeur et qui affiche le pourcentage de chacun des candidats à l’issue du
vote

5. 1. Ecrire un algorithme qui lit 2 nombres entiers positifs et non nuls et qui calcule et
affiche la somme de leurs factorielles.

Vous aimerez peut-être aussi