Академический Документы
Профессиональный Документы
Культура Документы
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.
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.
10
5
L’affectation
• Le symbole = désigne ce qu’on appelle une opération
d’affectation.
36 = Range("C4")
11
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.
13
• Exemple :
Range("B1") = 3 * 1 / (10 ^ 3 + 1)
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…)
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
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
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"
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.
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
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
34
17
Partie IV
LES TESTS
35
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
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
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 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
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)
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
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
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
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
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