Académique Documents
Professionnel Documents
Culture Documents
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)
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
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
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
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
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
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
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.