de Badr Benmammar
Programmation
des applications financières
sous Excel en VBA
Référence bibliographique
Syntaxe du VBA
Introduction à l’informatique
L’informatique désigne l’automatisation des traitements
répétitifs et souvent long.
Exemple :
Quels sont les nombres parfaits parmi les 10000 premiers nombres
entiers positifs ?
Un nombre est parfait s’il est égal à la somme de ses diviseurs (6 et 28 sont
VBA permet :
La différence entre VB et VBA est que VB est un ensemble complet qui permet de
développer des applications indépendantes et librement distribuables alors qu’une
application réalisée en VBA est complètement liée au logiciel sous lequel elle a été
créée.
Une application VBA créée sous Excel ne pourra pas se lancer sur un poste
si Excel n’est pas installé.
Structure de l’ordinateur
Unité d’entrée
Mémoire
CPU (instructions
et données)
Unité de sortie
Structure de programme
Sub <nomProgramme>()
Sub equation()
Déclaration de variables
Dim x, fx as integer
MsgBox(fx)
End sub
End Sub
Déclaration de variables
Variable :
Case mémoire.
Définie par son identificateur (nom).
Définie par son type (catégorie).
Types des variables
Integer : nombres entiers.
Double : nombres décimaux.
String : Chaîne de caractères.
Boolean : prend la valeur Vrai et faux.
Object : désigne un objet (Exemple: cellule d’Excel).
Variant : peut prendre une valeur de n’importe quel type.
Syntaxe : Dim <nom_var> As <type>
Instructions
Instruction d’affectation.
Instruction d’entrée.
Instruction de sortie.
Instruction conditionnelle.
Exemple : x y
Dim x,y as integer Instruction 1
x y
x=2 Instruction 2 2
x y
y=x+5 Instruction 3 2 7
x y
y =y+1 Instruction 4 2 8
Instruction sortie d'information
Besoin d’afficher un message à l’écran
Syntaxe : MsgBox(y)
Assure la recopie de la valeur de la variable y de la mémoire
centrale à l'écran.
Affiche l’information au sein d'une fenêtre (boîte de message).
Exemple :
MsgBox("Bonjour")
Instruction entrée d'information
Besoin d’afficher un message à l’utilisateur pour entrer une
valeur à partir du clavier.
Syntaxe : x = InputBox("<message>").
La valeur tapée est transmise par InputBox au sein de la
case-mémoire désignée par x.
Exemple : x
Instruction 1 2
Dim x as integer
x = InputBox("donne la valeur de x")
Calcul de fonction f(x)
Soit l’équation mathématique : f(x) = x + 2
Sub equation()
Dim x, fx as integer
x = InputBox("donner la valeur de x")
fx = x + 2
MsgBox(fx)
End sub
Exercice
Rédiger un programme qui lors de son exécution permet à l’utilisateur de
donner son prénom et son nom, et qui affiche ensuite le prénom et le nom de
l’utilisateur sur une seule ligne, puis sur 2 lignes.
Sub prenom_nom()
End Sub
Expressions arithmétiques
Toute expression s’écrit en informatique sous forme :
opérande 1 opérateur opérande 2
Exemples:
c = b² s’écrit : c = (b * b)
c=2*a s’écrit : c = (2 * a) / 3
3
c = 2x + 3y + z² s’écrit : c = (2 * x) + ( 3 * y ) + (z * z)
Incrémentation
z=z+1
Instruction conditionnelle
Else
… (autant d'instructions que nécessaire)
End If
End If
Résoudre une équation
Soit l’équation mathématique : ax² + bx + c = 0 (a≠0 et b≠0)
La solution mathématique :
Calcul de Delta := b² - 4ac.
Si delta 0 alors il existe des solutions sinon il n’existe pas.
Résoudre une équation
Solution informatique :
Dim a,b,c,x1,x2,delta as double
a = InputBox("donner la valeur de a")
b = InputBox("donner la valeur de b")
c = InputBox("donner la valeur de c")
delta = (b*b) – (4 * a * c)
Besoin d’exprimer un traitement selon la valeur de
delta
Instruction conditionnelle
Résoudre une équation
Sub equation2degre()
Dim a,b,c,x1,x2,delta as double
a = InputBox("donner la valeur de a")
b = InputBox("donner la valeur de b")
c = InputBox("donner la valeur de c")
delta = (b * b) – (4 * a * c)
if (delta < 0 ) then
MsgBox("il n’existe pas de solutions")
Else
x1 = ((b * (-1)) + sqr(delta))/(2*a)
x2 = ((b * (-1)) - sqr(delta))/(2*a)
MsgBox("les solutions sont : ")
MsgBox(x1)
MsgBox(x2)
End if
End sub
Instruction de répétition (boucles)
Soit une classe de 3 étudiants.
Saisir les 3 notes et Calculer la moyenne de la classe.
Sub moyenne()
Dim x, somme as double
x = inputBox("Entrer la première note :")
somme = x
x = inputBox("Entrer la deuxième note :")
somme = somme + x
x = inputBox("Entrer la troisième note :")
somme = somme + x
MsgBox("la moyenne est : " & somme/3)
End sub
Refaire le même programme pour 20 étudiants
Besoin d’une instruction de répétition (boucles)
Boucle For
Syntaxe :
For i = n1 To n2
I1
I2
… (autant d'instructions à répéter que nécessaire)
Next
While <condition> Do
I1 I1
I2
I2
(…)
(…)
Loop Until <condition>
Wend
Méthodes utiles
Concaténation de chaînes de caractères : &
Dim t1, t2, t3 as string
t1="Bonjour"
t2="Comment vas-tu?"
t3= t1 & t2
Reste de la division entière : Mod
17 Mod 3 (donne 2)
Tirage au hasard : Rnd()
x = Rnd() => x ]0,1[
x = Rnd()*100 => 0<x<100
x = Int(Rnd()*100) => tous les entiers tel que : 0<=x<100
x = Int(1+Rnd()*6) => x {1,2,3,4,5,6}
Exemple : Lancement de 2 dés
Soit les valeurs x et y, résultats du lancer de 2 dés. Tester si x et
y sont égaux.
Sub Dés()
Dim x, y As Integer
x = Int(1 + Rnd() * 6)
MsgBox (" x = " & x)
y = Int(1 + Rnd() * 6)
MsgBox (" y = " & y)
If (x = y) Then
MsgBox (" x et y sont égaux")
Else
MsgBox (" x et y ne sont pas égaux")
End If
End Sub
Exemple : Calculer le Max
Donner successivement 10 nombres. Quelle est la valeur du nombre le plus
grand ?
Sub plusgrand()
Dim nombre, i, Max As Integer
nombre = InputBox ("donner un nombre:")
Max = nombre
For i = 1 To 9
nombre = InputBox ("donner un nombre:")
If nombre > Max Then
Max = nombre
End If
Next
MsgBox ("le max est: " & Max)
End Sub
Exemple : Somme et Produit
Soit 2 nombres x et y donnés par l’utilisateur, puis une lettre donnée par
l’utilisateur.
Si la lettre tapée est « P », le résultat calculé par le programme vaut le produit
x*y ; si la lettre tapée est « S », le résultat calculé vaut la somme x+y.
Sub Somme_Produit()
Dim x, y, produit, somme As Integer
Dim lettre As String
x = InputBox("donnez x")
y = InputBox("donnez y")
lettre = InputBox("donnez la lettre")
If (lettre = "P") Then
produit = x * y
MsgBox (produit)
Else
If (lettre = "S") Then
somme = x + y
MsgBox (somme)
Else
MsgBox ("pas de traitement")
End If
End If
End Sub
Exemple : Factorielle
Le programme qui effecute le factorielle de x :
Sub PgrFactorielle()
Dim f As Double
Dim i,x As Integer
f=1 x=5
For i = 1 To x
f=f*i
Next
MsgBox(f)
End Sub
Ecrivez le programme qui calcul : 3! + 5! + 8!
Sub PgrFactorielle()
Dim f As Double Dim i, somme As Integer
somme =0,
f=1
For i = 1 To 3
f=f*i
Next
somme = somme + f
f=1
For i = 1 To 5
f=f*i
Next
somme = somme + f
f=1
For i = 1 To 8
f=f*i
Next
somme = somme + f
MsgBox(somme)
End Sub
Ecrivez le programme qui calcul : 3! + 5! + 8!
Sub PgrFactorielle()
Dim f As Double Dim i, somme As Integer
somme =0,
facto(3)
somme = somme + f
facto(5)
somme = somme + f
facto(8)
somme = somme + f
MsgBox(somme)
End Sub
Fonctions et Procédures
Sub calcul()
Dim res As Double
res = facto(3) + facto(5) + facto(8)
MsgBox ("le résultat vaut " & res)
End Sub
ActiveWorkbook.Worksheets("feuil3").Range("B2").interior.color
= vbgray
Plus simplifié :
Range("B2").interior.color =vbgray
Hiérarchie des objets Excel
ActiveWorkbook("Classeur1").Worksheets("Feuil1").Range("A1").interior.color = vbgreen
Désignation de cellules
Range : renvoie une collection de cellules
Exemple:
Sub nbelement()
Dim i As Integer
Range("A1:D3").Name = "MaPlage"
i = Range("MaPlage").Count
MsgBox ("le nombre d’éléments: " & i)
End Sub
Exemple : selection + Offset
Sub exemple1()
Dim plage As Object
Dim nb As Integer
Set plage = selection
nb = plage.Count
MsgBox (nb)
End Sub
Sub exemple2()
Range("A1").Offset(2, 3).Select
ActiveCell.Value = 5
End Sub
Exemple 1
Procédure :
Un ensemble d’instructions destiné à accomplir une tâche
élémentaire
Les procédures peuvent s’appeler les unes les autres
Call <nom_module>.<nom_proc>(arg1, …)
Exemples
Sub proc1()
Instruction1
Call proc2(arg1, arg2)
Instruction2
End sub
Instructions
End sub
If n = 1 Then
capi = m + m * i
Else
capi = capi (m, i, n - 1) + capi (m, i, n - 1) * i
End If
End Function
Sub valeur ()
Dim res As Double
res = capi (1000, 0.05, 10)
MsgBox (res)
End Sub
Partie III
Construction de
l’interface graphique
Construction de l’interface graphique
Etapes de construction :
Ajout de contrôles
Programmation de la UserForm
Insertion d’interface graphique
Explorateur de projet
Objet ThisWorkbook
Insertion/UserForm
Insertion d’interface graphique
Apparition de :
fenêtre UserForm
Controls.Remove "monTextBox"
End Sub
Conversion Francs -> euros
Code
Public S As Double
Matrices et Statistiques
Boucles
For <compteur> = <Début> To <Fin>
Inst
Next
Sub Exemple_For_Each()
Dim Feuille as worksheet
For Each Feuille in worksheets
Feuille.Activate
Range("A1").Interior.Color = vbred
Next
End sub
Fonctions de conversion
Val : convertit une chaîne de caractères en un nombre.
Exemple : Val ("3.4") retourne le nombre 3,4.
Public x As Integer
Sub module1()
Sub module2()
x = 10
MsgBox (module1.x)
MsgBox (x)
End Sub
End Sub
Déclaration de tableau
Les tableaux
Structure composée d’éléments de même type
Déclaration de tableau
Dim <nom>(<nb1>, …, <nbn>) As <type>
Le nombre d’éléments dans chacune de ses dimensions.
Option Base 1 : le numéro d’index du premier élément figurant dans chacune des n
dimensions.
Vecteur
Dim Vect (20) As Integer
Tableau Multidimensionnel
StDev: mesure la dispersion des valeurs par rapport à la moyenne en se basant sur un échantillon
de cette population.
StDevP: même chose que StDev sauf que les données représentent l’ensemble de la population.