You are on page 1of 32

VBA Excel

Accéder à l’éditeur visual basic (1)


• Tout d’abord, vous devez activer l’onglet
dé l
développeur dans
d la
l barre
b de
d menu
– Cliquez sur l’icône « Office » en haut à gauche.
– Cliquez sur le bouton « options d’Excel ».
– Cochez la case « Afficher l’onglet développeur »

1
Accéder à l’éditeur visual basic (2)
• Cliquez sur l’onglet
« developpeur », puis sur
le bouton « Visual
Basic ». Une nouvelle
fenêtre s’ouvre. Celle-ci
contient à gauche la
fenêtre « Projet ».
• Faites en clique droit dans
cette fenêtre puis insérez
un nouveau module :
insérer/Module. Une
nouvelle fenêtre s’affiche
alors.

Ecrire une macro (1)


• Un module possède un
nom Il est possible de
nom.
le renommer. Pour cela :
affichez la fenêtre de
propriétés (F4).
• C’est donc dans un
module que ll’on
on écrit
notre code VBA.

2
Ecrire une macro (2)
• Maintenant tapez (rigoureusement) la chose suivante
d
dans la
l fenêtre
f êt du d l :
d module

Exécuter la macro
• Revenez dans Excel puis cliquez sur le bouton « Macros » (dans la barre de
menu de l’onglet développeur), puis sélectionnez votre macro et cliquez sur
le bouton « exécuter » (ou « run »).

3
Sauvegarder un classeur contenant
du VBA
• Lorsque vous
sauvegardez votre
classeur, le code VBA
est sauvegardé avec.
• Cependant, il faut bien
faire attention à choisir
le bon format de fichier.

Partie I
LES INSTRUCTIONS DE BASE

4
Ecriture dans une feuille de calcul
• Ecrire du texte dans une cellule
Range("A1") = "Bonjour"
cela permet d’écrire « Bonjour » dans la cellule A1.

• Ecrire dans plusieurs cellules


Range("C4:E6") = 100.4
cela permet dd’écrire
écrire le nombre 100,4
100 4 dans toutes les cellules contenu
dans la plage C4 à E6.

• Pour écrire du texte il faut le mettre entre guillemets.


• Les nombres à virgule s’écrivent avec un « . » en VBA.

Lire à partir d’une feuille de calcul


• Lire le contenu d’une cellule :
Range("F1") = Range("C4")
cela permet de lire ce qu’il y a dans la cellule C4 et de le copier dans la
cellule F1.
• Autre exemple :
Range("F1:F6") = Range("C4")
cela permet de lire ce qu’il y a dans la cellule C4 et de le copier dans
chacune des cellules de la plage F1 à F6.

• Par contre, il ne faut pas écrire ça :


Range("C4") = Range("F1:F6")
en faisant preuve d’un peu de logique en comprend pourquoi...

10

5
L’affectation
• Le symbole = désigne ce qu’on appelle une opération
d’affectation.

• L’expression suivante affecte le contenu de C4 à F1:


Range("F1") = Range("C4")

• L’affectation se fait toujours dans le même sens : Ce qu’il y a à


droite du symbole = est affecté à ce qu’il y à gauche. Il n’est donc
pas possible d’écrire

36 = Range("C4")

• Le symbole = de VBA n’a pas le même sens que le symbole = en


mathématique.

11

Autres façons d’accéder au


contenu d’une cellule
• Il est possible de désigner une cellule en
partic lier d’une
particulier d’ ne plage de cell
cellules,
les l’e
l’expression
pression
suivante permet de designer la cellule de
coordonnées (2,3) et de lui affecter la valeur
56 :

Range("A8:C12")
Range( A8:C12 ).Cells(2,
Cells(2 3) =
56

12

6
Ordre d’exécution des instructions
• Les instructions sont exécutées séquenciellement de
haut en bas.

• Il y a donc une grande différence entre :


Range("A1") = "salut"
Range("B1") = Range("A1")
et
Range("B1") = Range("A1")
Range("A1") = "salut"

13

Les opérations arithmétiques


• Pour effectuer des calculs on utilise des expressions arithmétiques
en utilisant les opérateurs suivants (les priorités sont les même qu’en
mathématiques):
– + : addition
ddi i
– - : soustraction
– * : multiplication
– / : division
– ^ : élévation à la puissance
– Mod : modulo (reste de la division euclidienne)

• Exemple :
Range("B1") = 3 * 1 / (10 ^ 3 + 1)

• Il est également possible d’utiliser des fonctions mathématiques.


Range("B1") = 1 + Sqr(3 ^ 2 + 2 ^ 4)

14

7
Les opérations arithmétiques
• Il est possible de récupérer le contenu d’une cellule et de
ll’inclure
inclure dans une expression :

Sub Pythagore()
Range("C1") = "somme"
Range("C2") = Range("A2") + Range("B2")
End Sub

15

Partie II
VARIABLES ET
TYPES DE DONNÉES

16

8
C’est quoi une variable ?
• La programmation impose très souvent de stocker
provisoirement
i i t des
d valeurs
l (valeur
( l issue
i d’une
d’
cellule, résultat d’un calcul intermédiaire…)

• Pour employer une image, une variable peut être


considérée comme une cellule d’une feuille Excel
qui serait « cachée », l’ordinateur va la repérer par
une étiquette, un nom qui permettra d’accéder à la
valeur contenue qu’elle contient.
17

Déclaration d’une variable


• La déclaration des variables consiste
– d’une
d une part à donner un nom à une variable ;
– d’autre part à indiquer à l’ordinateur le type de donnée
que l’on va stocker dans cette variable

• Une fois la variable déclarée, il est possible de :


– lui affecter une valeur en utilisant ll’opérateur
opérateur
d’affectation « = »
– Accéder à son contenu tout simplement en
« l’appelant ».

18

9
Déclaration de variables en VBA
• Syntaxe générale de déclaration de variable en VBA :
Dim nom_variable As type
– nom_variable est les nom de variable (pas d’espace, ni de
symboles réservées comme les opérateurs mathématiques)
– type est le type de la variable qui dépend de ce que l’on désire
stocker dans la variable.

• Exemple :
Di somme as Integer
Dim I t
somme = Range("A1") + Range("B1")
Range ("A2") = somme

19

Les types de données en VBA


• Les types de données numériques fait pour stocker des nombres
entiers ou réels

• Les types de données alphanumérique. Là, il n’y en a souvent qu’un :


le type « chaine de caractères ».

• Le type booléen. Particulier à l’informatique, ce type de données ne


permet de stocker que 2 types de valeurs : vrai ou faux.

• Les types composites,


composites comme les dates

• Les tableaux : que l’on verra plus tard.

20

10
Les types de données numériques
• Il existe plusieurs types de données permettant de stocker des nombres en
VBA.
• le type de donnée choisi pour un nombre va déterminer :
– les valeurs maximales et minimales des nombres pouvant être stockés dans la
variable
– la précision de ces nombres (dans le cas de nombres décimaux).
• Voici la liste :
– Les types contenant des nombres entiers
• Byte : 0 à 255
• Integer : -32 768 à 32 767
• Long : -2 147 483 648 à 2 147 483 647
– Les
L types
t contenant
t t des
d nombres
b décimaux
dé i
• Single : -3,40x1038 à -1,40x1045 pour les valeurs négatives
1,40x10-45 à 3,40x1038 pour les valeurs positives
• Double : 1,79x10308 à -4,94x10-324 pour les valeurs négatives
4,94x10-324 à 1,79x10308 pour les valeurs positives
– Type de donnée monétaire ;
• Currency : toujours 4 chiffres après la virgule

21

Remarque sur les types


numériques
• Pourquoi ne pas déclarer toutes les variables
numériques
éi en réel
é l double
d bl ?
• Il faut essayer de respecter le principe de
l’économie de moyens. Sur certains
programmes de grande taille, l’abus de
variables surdimensionnées peut entraîner des
ralentissements notables à l’exécution,

22

11
Le type « chaine de caractères »
• En VBA, le type de données correspondant aux chaines de
caractères et le type String.
• Exemple
E l :
Dim s As String
s = "salut"

• Dans une variable de ce type, on stocke des caractères, qu’il s’agisse


de lettres, de signes de ponctuation, d’espaces, ou même de chiffres.
Le nombre maximal de caractères pouvant être stockés dans une
seule variable string dépend du langage utilisé.
• Un
U groupe dde caractères
tè (y ( comprisi un groupe de
d un, ou de
d zéro
é
caractères), qu’il soit ou non stocké dans une variable, d’ailleurs, est
donc souvent appelé chaîne de caractères.
• Une chaîne de caractères est toujours notée entre guillemets

23

L’opérateur de concaténation
• On à déjà vu que l’on pouvait effectuer des opérations
avec les types
yp numériques
q ((addition, multiplication…)
p )
• Il existe également une opération que l’on peut faire
avec les chaines de caractères que l’on appel la
concaténation.
• En VBA, la concaténation se fait avec le symbole &.
• Exemple :
Dim s1 as String
Di s2
Dim 2 as St
String
i
s1 = "C1 = " & Range("C1")
s2 = "La valeur de " & s1

24

12
Le type booléen
• En VBA, le type de données correspondant aux
booléen est le type Bool.
Bool
• on y stocke uniquement les valeurs logiques
VRAI et FAUX.
• Exemple :
Dim flag As Boolean
flag = True
• Le type booléen sera particulièrement utile
lorsque l’on parlera des tests.

25

Le type Date
• Le type Date (qui en VBA s’écrit Date) est en type composite en ce sens
qu’il est constitué de 3 éléments : le jour, le mois et l’année qui sont des
nombres entiers.
• Exemple :
Di jour
Dim j A
As D Datet
jour = #1/13/2008#
• Etant un type composite, il est souvent utile d’accéder au différentes
composantes d’une date.
Pour cela, on dispose de « Fonctions » Day, Month, Year qui permettent
d’accéder aux différentes composantes d’une date.
• Exemple :
Dim jour As Date
jour = #1/13/2008#
Range("A1")
(" 1") = Day(jour) (j )
Range("B1") = Month(jour)
Range("C1") = Year(jour)
Ici, on écrit dans la cellule A1 le numéro du jour (c’est-à-dire 13), dans B1
le numéro du mois, dans C1 le numéro de l’année.

26

13
L’option Explict
• En VBA, il n’est en réalité pas obligé de déclaré.
Cependant, ceci n’est pas du tout une bonne habitude à
prendre.
d
• Il est possible cependant, d’obliger la déclaration de
variables en ajoutant :
Option Explicit
au tout début du module.

• Il est fortement recommandé de mettre cette option au


début de tout vos modules.
27

Le type Variant
• Il existe également un type spécial en VBA appelé Variant.
• Une variable de type Variant peut contenir n’importe quel type de
d
données
é parmii les
l types décrit
dé i avant.
• On pourrait donc se dire « je n’ai qu’a utiliser systématiquement ce
type de donné ».
Cependant, ceci n’est pas une bonne chose pour plusieurs raison.
Une des raison est la même que celle expliqué à la page 36
(économie d’espace mémoire).
Une autre raison est que si vous n’utiliser systématiquement le type
Variant, non seulement votre programme sera plus difficile à relire
mais surtout il sera plus difficile à corriger.
corriger
• On n’utilisera donc le type Variant que si il y a une véritable raison
de l’utiliser.

28

14
Partie III
MACROS ET
FONCTIONS D’EXCEL

29

Les macros
• On l’a déjà vu un macro se déclare de la façon suivante :
Sub nom_macro() ()

End Sub
• Il est possible d’associer une macro à un bouton sous Excel

30

15
Les fonctions
• Il est également possible d’écrire des fonctions que l’on
ppourra ensuite appeler
pp dans une formule Excel (comme
(
les fonctions que vous utilisez habituellement).
• Une fonction est une sorte de « boite noire » qui prend
en entrée des paramètres effectue un calcul (dont on
ignore les détails) et donne un résultat.
– Par exemple : la fonction MAX d’Excel prend en
paramètre une plage de valeurs et donne comme résultat le
maximum des valeurs de cette plage.
• Donc, lorsque l’on écrit une fonction sois même il va
falloir indiquer quels sont ses paramètres (et leur type)
puis écrire son contenu, puis dire quel est le résultat (et
son type).
31

Déclaration de fonctions en VBA


• Syntaxe générale :
Function nom_fonction(arguments) As type_retourné
code de la fonction …
nom_fonction = valeur_renvoyé
End Function
– Où nom_fonction et le nom que l’on donne à cette fonction. C’est aux choix.
Mais tant qu’a faire on choira un nom en rapport avec ce qu’elle effectue.
– arguments est la liste des paramètres de la fonction
– type_retourné est le type du résultat de la fonction
– valeur_renvoyé est le résultat de la fonction.
• Le mieux pour comprendre est un exemple :
La fonction qui suit prend en paramètre 2 entiers et donne comme resultat
la somme élevé au carré de ces 2 entiers.
Function sommeCarre(x As Integer, y As Integer) As Integer
Dim res As Integer
res = (x + y) ^ 2
sommeCarre = res
End Function

32

16
Utilisation
• Une fois déclarée la fonction s’utilise comme tout autre
fonction dd’Excel.
Excel.
• Encore faut-il pour qu’elle fonctionne qu’on lui passe en le
bon nombre de paramètres et le bon type.

33

Avant d’écrire une fonction


• Il faut toujours se poser les questions suivantes avant de
déclarer une fonction :
– Combien de paramètres aura-t-elle ?
– Quels sera le type de chacun de ces paramètres
– Quels sera le type du résultat.
• Comment répond-t-on à ces question ?
Et bien évidemment il n’y a pas méthode. Cela dépend
du problème que vous voulez que la fonction résolve.
Par exemple,
exemple si vous voulez écrire une fonction que
calcul l’hypoténuse d’un triangle de quoi avez besoin et
quels est le type de ce que vous besoin et quel est le
type du résultat.

34

17
Partie IV
LES TESTS

35

De quoi s’agit-il? (1)


• Nous avons déjà vu 2 des 4 structures de bases de la programmation
(affectation, lecture/écriture). On va donc maintenant voir la
troisième
• Reprenons le cas de notre « programmation algorithmique du
touriste égaré ». Normalement, l’algorithme ressemblera à quelque
chose comme : « Allez tout droit jusqu’au prochain carrefour, puis
prenez à droite et ensuite la deuxième à gauche, et vous y êtes ».
• Mais en cas de doute légitime de votre part, cela pourrait devenir :
« Allez tout droit jusqu’au prochain carrefour et là regardez à
droite. Si la rue est autorisée à la circulation, alors prenez la et
ensuite cc’est
est la deuxième à gauche.
gauche Mais si en revanche elle est en
sens interdit, alors continuez jusqu’à la prochaine à droite, prenez
celle-là, et ensuite la première à droite ».

36

18
De quoi s’agit-il? (2)
• Ce deuxième algorithme a ceci de supérieur au premier qu’il
prévoit, en fonction d’une situation pouvant se présenter de deux
façons différentes,
différentes deux façons différentes dd’agir
agir. Cela suppose que
l’interlocuteur (le touriste) sache analyser la condition que nous
avons fixée à son comportement (« la rue est-elle en sens
interdit ? ») pour effectuer la série d’actions correspondante.
• Les ordinateurs possèdent cette aptitude, sans laquelle d’ailleurs
nous aurions bien du mal à les programmer.
• Nous allons donc pouvoir parler à notre ordinateur comme à notre
touriste, et lui donner des séries d’instructions à effectuer selon que
la situation se présente dd’une
une manière ou dd’une
une autre
autre.
• Cette structure logique s’appel un test ou
structure conditionnelle.

37

Structure d’un test (1)


• Un test en VBA peut prendre en gros 3 formes différentes.
• Première forme :
If expression_booléenne Then
instructions
End If

– expression_booléenne est une expression qui à pour résultat vrai ou faux.


– instructions sont les instructions qui seront exécutée dans le cas où
expression_booléenne est vrai.
• Le principe est donc relativement simple : arrivée à la première ligne la
machine examine la valeur de ll’expression
expression booléenne.
– Si cette expression à pour résultat « vrai », alors la suite d’instructions situés à
l’intérieur sont évalué. Cette suite peut d’ailleurs très brève ou très longue.
– Si cette expression à pour résultat « faux », alors on passe directement aux
instructions situés après le End If.
• Reste à savoir : c’est quoi une expression booléenne.

38

19
Expression booléenne
• Une expression booléenne est une expression qui à pour résultat vrai
ou faux. Ni plus, ni moins.
• Cela peut prendre différentes formes. Une des formes possible est une
comparaison.
• Une comparaison est une expression constituée de 3 choses :
– une valeur
– un opérateur de comparaison
– une autre valeur
• Les valeurs peuvent être, à priori, de n’importe quel type. Mais si l’on veut
que la comparaison ait un sens, il faut que les deux valeurs de la
comparaison soient du même type !
• Les opérateurs
p de comparaison
p sont :
– = : égal à…
– < : inferieur strictement à…
– > : supérieur strictement à…
– <= : inferieur ou égal à…
– >= : supérieur ou égal à…
– != : différent de…
39

Exemple
• La macro qui suit lit le nombre dans la cellule A1 et écrit « positif » dans la
cellule B1 si celui-ci est positif.
Sub test1()
Dim a As Integer
g
a = Range("A1")
If a > 0 Then
Range("B1") = "Positif"
End If
End Sub
• Autre exemple :
Sub test2()
Dim a As Integer
a = Range("A1")
If a > 0 Then
Range("B1") = "Positif"
End If
If a <= 0 Then
Range("B1") = "Negatif ou nul“
End If
End Sub

40

20
Structure d’un test (2)
• La seconde forme est la suivante :
If expression_booléenne Then
instructions1
Else
instructions2
End If

– expression_booléenne est une expression qui à pour résultat vrai ou faux.


– instructions1 sont les instructions qui seront exécutée dans le cas où
expression_booléenne est vrai.
– instructions2 sont les instructions qui seront exécutée dans le cas où
expression_booléenne est vrai.
• Le principe n’est
n est donc guère plus compliqué que la forme précédente
précédente.
– Si l’expression booléen est vrai, on exécute la suite d’instructions 1.
– Sinon on exécute la suite d’instructions 2.
– Ensuite on continue l’exécution avec les instructions situées après le End If
(si il y en a).

41

Exemple
• L’exemple précédent peut maintenant être amélioré.
Sub test3()
Dim a As Integer
a = Range("A1")
If a > 0 Then
Range("B1") = "Positif"
Else
Range("B1") = "Negatif ou nul“
End If
End Sub
• Ici, on ne fait qu’un seul test au lieu d’en faire 2.

42

21
Structure d’un test (3)
• La troisième forme est un peu plus complexe, mais son principe est tout
aussi logique que pour les formes précédentes :
If expression_bool1 Then
instructions1
ElseIf expression_bool2 Then
instructions2

Else
instructions3
End If
• On notera d’abord qu’il peut y avoir plusieurs ElseIf avec les
instructions qui vont avec.
• Le principe est donc le suivant :
– Si expression_bool1 est vrai alors on exécute instructions1
– Sinon, si expression_bool2 est vrai alors on exécute instructions2
– Etc…
– Sinon on exécute instructions3
• On notera que le sinon à la fin est facultatif.

43

Exemple
• L’exemple qui suit traite le cas ou le nombre est nul.
Sub test4()
Dim a As Integer
g
a = Range("A1")
If a > 0 Then
Range("B1") = "Positif"
ElseIf a = 0 Then
Range("B1") = "Nul"
Else
Range("B1") = "Negatif"
End If
End Sub
• Remarque
q : ici je
j test si a est égal
g à 0 en écrivant a = 0. On avait ppourtant
dit précédemment que = désigne l’opération d’affectation. Et bien en fait,
= peut tout aussi bien designer l’égalité mathématique.
Alors comment savoir ? Cela dépend du contexte. Si j’utilise l’operateur =
dans un test celui-ci représente l’égalité mathématique. Si je l’utilise
ailleurs que dans un test, celui-ci représente l’affectation.

44

22
Test imbriqués
• Il est possible qu’une (ou plusieurs) instructions à l’intérieur
d’un test soit elle-même un test.
• Par exemple :
If a >=0 Then
If a < 10 Then
Range("B1") = "inferieur à 10"
Else
Range("B1") = "superieur à 10"
End If
End If

45

Expression booléennes
« composées »
• En formulant une condition dans un algorithme, il faut se méfier comme de
la peste de certains raccourcis du langage courant, ou de certaines notations
valides en mathématiques,
mathématiques mais qui mènent à des non non-sens
sens informatiques.
informatiques
Prenons par exemple la phrase « Toto est compris entre 5 et 8 ». On peut
être tenté de la traduire par : 5 < Toto < 8
Or, une telle expression, qui a du sens en français, comme en
mathématiques, ne veut rien dire en programmation. En effet, elle
comprend deux opérateurs de comparaison, soit un de trop, et trois valeurs,
soit là aussi une de trop.
• Certains problèmes exigent parfois de formuler des conditions qui ne
peuvent pas être exprimées sous la forme simple exposée ci-dessus.
Reprenons le cas « Toto est inclus entre 5 et 8 ». En fait cette phrase cache
non une, mais deux conditions. Car elle revient à dire que « Toto est
supérieur à 5 et Toto est inférieur à 8 ». Il y a donc bien là deux conditions,
reliées par ce qu’on appelle un opérateur logique, le mot ET (And).

46

23
Les opérateurs logiques
• Pour écrire des expressions booléennes plus « évolué », on dispose de 3
opérateurs logiques : And, Or, Not.
– Le And a le même sens en informatique que dans le langage courant.
courant Pour que
"Condition1 And Condition2" soit VRAI, il faut impérativement que
Condition1 soit VRAI et que Condition2 soit VRAI. Dans tous les autres cas,
"Condition1 And Condition2" sera faux.
– Il faut se méfier un peu plus du Or. Pour que "Condition1 Or Condition2" soit
VRAI, il suffit que Condition1 soit VRAIE ou que Condition2 soit VRAIE. Le
point important est que si Condition1 est VRAIE et que Condition2 est VRAIE
aussi, Condition1 Or Condition2 reste VRAIE. Le Or informatique ne veut
donc pas dire « ou bien »
– Enfin, le Not inverse une condition : Not(Condition1)est VRAI si Condition1
est FAUX
FAUX, et il sera FAUX si Condition1 est VRAI
VRAI.
Alors, vous vous demandez peut-être à quoi sert ce NON. Après tout, plutôt
qu’écrire Not(Prix > 20), il serait plus simple d’écrire tout bonnement
Prix <= 20. Dans ce cas précis, c’est évident qu’on se complique
inutilement la vie avec le Not. Mais si le Not n'est jamais indispensable, il y
a tout de même des situations dans lesquelles il s'avère bien pratique.

47

Tables de vérité
• On représente fréquemment tout ceci dans des tables de vérité
(C1 et C2 représentent deux conditions)

C1 And C2 C2 Vrai C2 Faux Not C1 C1 Vrai


C1 Vrai Vrai Vrai C1 Vrai Faux
C1 Faux Vrai Faux C1 Faux Vrai

C1 Or C2 C2 Vrai C2 Faux
C1 Vrai Vrai Faux
C1 Faux Faux Faux

48

24
Exemple
• Donc pour dire que toto est compris entre 5 et 8…
Sub
b toto()
()
Dim toto As Integer
toto = Range("A1")
If 5 < toto And toto < 8 Then
Range("B2") = "compris entre 5 et 8"
End If
End Sub

49

Partie V
LES BOITES DE DIALOGUES

50

25
A quoi ça sert ?
• On a vu jusqu’à présent comment lire et écrire à partir
des cellules dd’une
une feuille de calcul
calcul.
• On va pouvoir, avec VBA, également afficher des
données ou saisir des données par l’intermédiaire de
boites de dialogues.
• Cela se fait avec les instructions :
– MsgBox,
M B pour l’affichage
l’ ffi h
– InputBox, pour la saisie

51

La boite de Message
• Il est possible d’afficher une boite de message en avec simplement en
écrivant l’instruction :
MsgBox chaine
– chaine est une chaine de caractères ou une expression quelconque.
• Exemple :
Sub maMacro()

MsgBox "Fin de la macro"
End Sub

• On ppourra utiliser l’opérateur


p de concaténation pour
p afficher des messages
g
plus interessant.
Sub afficherValeurs()
MsgBox "Contenu de la cellule A1" & Range("A1")
End Sub

52

26
La boite de saisie
• Celle-ci permet de demander (et récupérer) une valeur à l’utilisateur.
Cela se fait avec l’instructions suivante :
var = InputBox(chaine)

– var est une variables convenablement déclarée.


– chaine est une chaine de caractère correspondant au message à afficher
dans la boite de dialogue.
• Exemple :
Sub saisie()
Dim age As Integer
age = InputBox("Quel est votre age ?")
MsgBox "Vous avez " & age & " ans"
End Sub

53

Partie VI
LES BOUCLES

54

27
Qu’est-ce que c’est?
• Voici donc la quatrième et dernière des briques fondamentale de la
programmation. Nous avons donc bientôt fini d’apprendre les
bases de la programmation.
• Les boucles sont généralement le point douloureux de l'apprenti
programmeur. Autant, il est assez facile de comprendre comment
fonctionnent les boucles, autant il est souvent long d'acquérir les
réflexes qui permettent de les utiliser judicieusement pour traiter un
problème donné.
• Avec Excel, vous avez sans doute pu manier des choses équivalentes
aux variables (les cellules, les formules) et aux tests (la fonction
SI…). Mais les boucles n'existe que dans les langages de
programmationi proprement dits.
di Et on s’en sert très fréquemment.
f
• Alors, à vos futures – et inévitables - difficultés sur le sujet, voici le
remède: rigueur, patience, et encore rigueur et toujours de la
patience.

55

A quoi cela sert-il ?


• Supposons que
– vous écrivez une formule dans Excel et vous l’appliquer sur toute une
colonne.
l
– vous voulez mettre en vert toute les cellules de votre tableau de chiffre
d’affaire qui dépasse les 10000 €.
• Si vous voulez faire ceci en VBA, il va falloir utiliser des boucles si
vous ne voulez pas répéter quarante mille fois des instructions que
se ressemble.
• En gros, une boucle intervient des qu’il faut répéter plusieurs fois la
même chose.
• Il existe
i en VBA différentes
diffé fformes dde bboucles.
l D Dans notre cas nous
allons en étudier 3.
– La boucle « tant que »
– La boucle « pour »
– La boucle « pour chaque »

56

28
La boucle tant que
• Supposons que la réalité sois aussi simple que la programmation et que
vous dites a votre touriste égaré : « Tant que tu n’est pas arrivé à destination
tu avance et à chaque fois tu prend la première à droite ».
» Et bien vous faire
exécuter a votre touriste une boucle Tant Que.
• En VBA, cela s’ecrit :
While expression_bool
instructions
Wend
– expression_bool est une expression booléenne.
– instructions est une suite d’instructions (cela peut être n’importe laquelle des
instructions vue précédemment, testes compris).
• Le principe est relativement simple : les instructions contenues dans la
boucle sont exécutées à répétition tant que la expression_bool est vraie.
• Quand expression_bool devient fausse, on « sort » de la boucle, c’est-à-dire
que l’on va ensuite exécutée les instructions qu’il y a après Wend.

57

Exemples
• La macro qui suit demande en boucle l’âge d’une personne tant que l’âge
donné n’est pas positif.
Sub demandeAge()
g ()
Dim age As Integer
age = -1
While age < 0
age = InputBox("Quel est ton age")
Wend
MsgBox "Bravo, tu as " & age & " ans"
End Sub

• Autre exemple, cette macro « compte » de 1 à 10.


Sub compter()
Dim i As Integer
i = 1
While i <= 10
MsgBox "i = " & i
i = i + 1
Wend
End Sub

58

29
La boucle Pour
• Dans l’exemple précédent, vous avez remarqué qu’une boucle pouvait être
utilisée pour augmenter la valeur d’une variable. Cette utilisation des
boucles est très fréquente, et dans ce cas, il arrive très souvent qu’on ait
besoin dd’effectuer
effectuer un nombre déterminé de tour.tour
• Ceci est tellement fréquent qu’il existe une boucle spécialement faites pour
ça : la boucle Pour
• En VBA, cela s’écrit :
For var = début To fin
instructions
Next var
– var est une variable
– debut et fin sont des nombres entier (ou des expression ayant pour résultat un
nombre
b entier)
ti )
– instructions est une suite d’instructions (cela peut être n’importe laquelle des
instructions vue précédemment, testes compris).
• Le principe est bien plus simple qu’il n’y parait : il suffit de lire « pour var
allant de début à fin, répéter les instructions

59

Exemple
• L’exemple précédent, mais écrit avec une boucle pour
Sub compter()
Dim i As Integer
For i = 1 To 10
MsgBox "i = " & i
Next i
End Sub

• Il suffit de voir la chose ainsi : « pour i allant de 1 à 10, répéter


l’instruction MsgBox "i = " & i. »
• Donc à i part ded 1, puisi on exécute
é le
l contenu ded boucle.
b l Quandd on
arrive à Next i, on passe au i suivant, c’est-à-dire tout
simplement 2 et on recommence jusqu’à arrive a 10.
• Une fois qu’on est arrivé à 10 on continue en exécutant les
instructions qui suivent Next i (s’il y en a).

60

30
Compter autrement que de 1 en 1
• La boucle Pour n’est capable, de base, que de de compter de 1 en 1
et uniquement dans le sens montant. Mais si la plupart du temps,
c’est ce que l’on souhaite, de temps en temps cela peut être un peu
limité
• Heureusement, il est possible « d’indiquer » à la boucle que Pour
que l’on souhaite allant par exemple de 2 en 2 ou de un en 1 dans le
sens descendant.
• Exemple :
Sub compter()
Dim i As Integer
For i = 1 To 10 Step 2
MsgBox "i = " & i
Next i
End Sub
• ou encore :
Sub compter()
Dim i As Integer
For i = 10 To 1 Step -1
MsgBox "i = " & i
Next i
End Sub

61

Remarque sur la boucle Pour


• Toute les boucles que l’on peut écrire avec la boucle Pour peuvent
aussi être écrites avec la boucle Tant que. De ce fait, la boucle pour
n’est
n est absolument pas indispensable.
indispensable
• Alors pourquoi existe-t-elle?
Et bien, certains développeurs appels ça du « sucre syntaxique »,
c’est-à-dire que la boucle Pour n’est pas du tout indispensable mais
elle existe pour permettre d’écrire plus facilement des boucles
comportant un compteur. Il est à noté aussi que ce genre de boucle
est extrêmement fréquent dans un programme.
• Si toute les boucles Pour peuvent être écrites avec un boucle avec
une boucle Tant que,
que ll’inverse
inverse nn’est
est cependant pas vrai.
vrai
– Par exemple, le programme qui demande l’âge d’une personne tant que
celle-ci n’a pas donné un âge positif ne peut être écrit avec une boucle
Pour.

62

31
La boucle Pour chaque
• Ce type de boucle est également ce que l’on peut appeler du « sucre
syntaxique », mais il faut absolument la connaitre car celle-ci va, par
exemple nous être particulièrement utile pour effectuer une tache sur
chacune des cellules d’une plage de valeur.
• Syntaxe de la boucle Pour chaque :
For Each var In plage
instructions
Next var
– var est une variable d’un type quelconque (dans notre cas plutôt de type
Range)
– plage désigne une plage de valeurs
– instructions est une suite d’instructions (cela peut être n’importe
laquelle des instructions vue précédemment, testes compris).
• Le principe est extrêmement simple à comprendre. Le mieux est de
prendre un exemple.

63

Exemple
• Cette Macro affiche dans une boite de message le contenu de chacune des cellules
de la Plage indiqué
Sub afficherCellules()
Dim cellule As Range
g
For Each cellule In Range("A1:A10")
MsgBox "Contenu de la cellule " & cellule
Next cellule
End Sub

pour comprendre le principe il suffit de lire ce qui est écrit : « pour chaque cellule
de la plage A1:A10 je fais MsgBox "Contenu de la cellule " &
cellule »
• On peut également très facilement parcourir chacune d’une plage sélectionnée à la
main. Pour cela, on utilise une variable spéciale : Selection
Sub afficherCellules()
Dim cellule As Range
For Each cellule In Selection
MsgBox "Contenu de la cellule " & cellule
Next cellule
End Sub

64

32