Vous êtes sur la page 1sur 53

Ricco Rakotomalala

http://eric.univ-lyon2.fr/~ricco/cours/cours_excel.html

R.R. Universit Lyon 2 1


Gnralits sur la programmation VBA sous Excel

Programmation sous Excel via VBA (Visual Basic pour Applications)

Fonctions personnalises. Macros.


Compltement standardise. Valable pour les Manipulation directe des objets Excel (classeurs,
autres classeurs et mme, si pas daccs aux feuilles, cellules, graphiques, etc.)
objets spcifiques dExcel, pour les autres
outils Office.

Programmation de tches Interfaces graphiques.


Programmation de squences dactions plus Botes de dialogues standards. Mais aussi les formulaires
ou moins complexes, faisant intervenir ou personnalises pour faciliter les accs aux fonctionnalits.
non des mcanismes algorithmiques. Ncessite une certaine formalisation et la connaissance
des principes de la programmation vnementielle.

Enregistreur de macros Programmation des macros


Transformation de squences daction en Trs puissant. Ncessite la connaissance des
programme VBA. Ne ncessite pas la principes de la programmation et de la syntaxe
connaissance de la programmation, mais peu de daccs aux objets Excel.
souplesse (structure fixe, peu adaptable)

Points importants. Connaissance de lalgorithmie, langage de programmation Visual


Basic. Les instructions sont crites dans des fonctions (function) et procdures (sub),
qui sont regroupes dans des modules. Nous travaillons dans VBE (Visual Basic Editor).

R.R. Universit Lyon 2 2


Gnralits sur la programmation
ALGORITHMIE - PROGRAMMATION

R.R. Universit Lyon 2 3


Algorithmie vs. Programmation

Algorithmie Programme

Solution informatique relative un Transcription dun algorithme avec une


problme syntaxe prdfinie
Suite dactions (instructions) Visual Basic pour Applications
appliques sur des donnes Mme principes fondamentaux que les
3 tapes principales : autres langages objets (Java, C#, etc.)
1. saisie (rception) des donnes VBA agit en interaction avec les fonctions
2. Traitements
prdfinies disponibles dans la suite Office
3. restitution (application) des rsultats

R.R. Universit Lyon 2 4


Mode compil vs. Mode interprt

Langage interprt : + portabilit application ; - lenteur (R, VBA, Python)

Langage compil : + rapidit ; - pas portable


(solution possible : write once, compile anywhere ; ex. Lazarus)

Langage pseudo-compil : + portabilit plate-forme ; - lenteur (?)


(principe : write once, run anywhere ; ex. Java et le principe JIT)

VBA (Visual Basic pour Applications) est un langage de programmation


ddi principalement aux applications Microsoft Office. Il est bas sur le
langage Visual Basic, mais ne peut sexcuter que dans une application
hte Microsoft Office, et non de manire autonome.

R.R. Universit Lyon 2 5


Etapes de la conception dun programme (une application)

1. Dterminer les besoins et fixer les objectifs : que doit faire le logiciel, dans quel cadre va-
t-il servir, quels seront les utilisateurs types ? On rdige un cahier des charges avec le
commanditaire du logiciel (Remarque : commanditaire = matre douvrage ; ralisateur =
matre duvre)
2. Conception et spcifications : quels sont les fonctionnalits du logiciel, avec quelle
interface ?
3. Programmation : modlisation et codage
4. Tests : obtient-on les rsultats attendus, les calculs sont corrects, y a-t-il plantage et dans
quelles circonstances ? (tests unitaires, tests dintgration, etc.)
5. Dploiement : installer le chez le client (vrification des configurations, installation de
lexcutable et des fichiers annexes, etc.)
6. Maintenance : corrective, traquer les bugs et les corriger (patches) ; volutive (ajouter
des fonctionnalits nouvelles au logiciel : soit sur lergonomie, soit en ajoutant de
nouvelles procdures)

R.R. Universit Lyon 2 6


Programme : suite dinstructions manipulant des donnes

LANGAGE VISUAL BASIC

R.R. Universit Lyon 2 7


Visual Basic possde tous les attributs dun langage de programmation

Donnes types. Visual Basic propose les types usuels de la programmation :


entier, rels, boolens, chane de caractres.

Structures avances de donnes. Gestion des collections de valeurs


(numrations, tableaux) et des objets structurs (enregistrements, classes)

Squences dinstructions, cest la base mme de la programmation, pouvoir


crire et excuter une srie de commandes sans avoir intervenir entre les
instructions.

Structures algorithmiques : les branchements conditionnels et les boucles.

Les outils de la programmation structure : pouvoir regrouper du code dans des


procdures et des fonctions. Organisation du code en modules et possibilit de
distribuer ces dernires.

Visual Basic nest pas case sensitive , il ne diffrencie pas les termes crits en
minuscule et majuscule.

R.R. Universit Lyon 2 8


Type de donnes

Le type de donnes dfinit le type doprateurs quon peut leur appliquer.

Numrique qui peut tre rel (double) ou entier (long). Les oprateurs
applicables sont : +, -, *, / (division relle), \ (division entire), mod (modulo)
Exemple : 5 / 2 2.5 ; 5 \ 2 2 ; 5 mod 2 1

Boolen (boolean) qui ne prend que deux valeurs possibles : True et False. Les
oprateurs sont : not, and, or.
Exemple : True and False False

Chane de caractres (suite) qui correspond une suite de caractres dlimite par des
guillemets . Les oprateurs possibles sont la concatnation, la suppression dune sous-
partie, la copie dune sous-partie, etc.
Exemple : toto est une chane de caractres, toto on ne sait pas ce que cest (pour linstant)

Habituellement, les oprations font intervenir des donnes de type identique


et renvoie un rsultat du mme type.

R.R. Universit Lyon 2 9


Oprateurs de comparaison

Les oprateurs de comparaison confrontent des donnes de mme type,


mais le rsultat est un boolen

= ; <> ; > ; >= ; < ; <=


galit
infrieur strict,
diffrent Suprieur strict, infrieur ou gal
suprieur ou gal

Exemples

5 > 2 True toto > tata True

5 > toto illicite


Licite. Comparaison de gauche droite
base sur le code ASCII. Arrt des
5 <> 5 False comparaisons ds quindcision leve.

R.R. Universit Lyon 2 10


Variables et premires instructions

Les variables correspondent des identifiants auxquels sont associs des valeurs dun type
donn. Elles matrialisent un espace mmoire avec un contenu que lon peut lire ou crire.

Identifiant de la variable, utilisable


dans la suite du programme

Dclaration Dim v As Double


dune variable
Type associ
Dimensionner. Rserver Indication la variable
un espace mmoire . du type

= est le symbole daffectation. A gauche de =


Affectation. Attribuer on modifie le contenu dans une variable,
v = 2.5
une valeur la variable droite on lit le contenu dune variable. Cest
pour cette raison que linstruction v = v + 1
est licite.

Opration et La valeur 5 est crite dans la variable


x = v * 2
affectation x qui doit tre dclare au pralable.

R.R. Universit Lyon 2 11


Ecriture et utilisation des fonctions personnalises dans Excel

FONCTIONS PERSONNALISES

R.R. Universit Lyon 2 12


Programmation des fonctions personnalises

Une fonction personnalise est une fonction VBA qui peut appele
dans un classeur Excel. Elle prend en entre des informations en
provenance des feuilles du classeur (principalement) et renvoie une
valeur insre dans une cellule (le plus souvent galement).

Formalisme Function NomFonction(paramtres) as type de donne

Est un identifiant qui doit Type de la valeur


respecter la syntaxe VBA retourne par la fonction.

Les informations que prend en entre la fonction, elles prennent la


forme nom_parametre as type de paramtre. Il peut y en avoir
plusieurs, ils sont spars par des , dans ce cas.

Un classeur Excel contenant du code VBA doit tre enregistr au format


XLSM, prenant en charge les macros. Sinon on perd son code.

R.R. Universit Lyon 2 13


Programmation dans Visual Basic Editor

Entre : prix HT (rel)


Sortie : prix TTC (rel) Public pour que la fonction soit visible en dehors
du module, notamment dans la feuille de calcul

Les lignes de commentaires


commencent avec une et sont
mises automatiquement en vert.

Il faut crer un module pour


programmer une fonction
personnalise

R.R. Universit Lyon 2 14


Utilisation de la fonction dans une feuille Excel

La fonction est insrable dans la feuille de


calcul comme nimporte quelle autre
fonction Excel. Elle est accessible dans la
catgorie Fonctions personnalises .

Le rsultat saffiche une fois la fonction


insre et valide. La fonction est
automatiquement appele chaque fois que
la feuille a besoin dtre recalcule (comme
pour les autres fonctions standards dExcel).

R.R. Universit Lyon 2 15


Fonction avec plusieurs paramtres

(1) Le sparateur de paramtres est la


Entres : prix HT (rel), tva (rel) , lors de la dfinition de la fonction.
Sortie : prix TTC (rel)

'fonction avec 2 paramtres


Public Function MonPrixTTCTva(pht As Double, tva As Double) As Double
'dclaration d'une variable intermdiaire
Dim pttc As Double
'calcul exploitant les paramtres en entre
pttc = pht * (1 + tva)
'retourner le rsultat
MonPrixTTCTva = pttc
End Function

(2) Trs trangement, il devient ; lorsquon


appelle la fonction dans la feuille de calcul.

R.R. Universit Lyon 2 16


Plus loin avec la programmation

STRUCTURES ALGORITHMIQUES

R.R. Universit Lyon 2 17


Branchement conditionnel IF

Permet dactiver une partie du code en fonction de la


ralisation dune condition ou pas.

If condition Then
bloc dinstructions
Syntaxe

si la condition est vraie


Else
bloc dinstructions
si la condition est fausse
End If

(1) Condition est souvent une opration de comparaison


(2) La valeur de retour de Condition est de type boolen (True ou False)
(3) Then doit tre sur la mme ligne que If
(4) La partie Else est facultative (ne rien faire si la condition est fausse)
(5) Il est possible dimbriquer une autre structure conditionnelle If dans les blocs dinstructions

R.R. Universit Lyon 2 18


Branchement conditionnel IF Un exemple

Entres : prix HT (rel), catgorie de produit (chane)


Sortie : prix TTC (rel)

Public Function MonTTCBis(pht As Double, cat As String) As Double


'dclarer la variable de calcul
Dim pttc As Double
'en fonction de la catgorie de produit
If (cat = "luxe") Then
pttc = pht * 1.33
Else
la valeur de cat est diffrente de luxe
pttc = pht * 1.2
End If
'renvoyer le rsultat
MonTTCBis = pttc
End Function

R.R. Universit Lyon 2 19


Branchement multiple SELECT CASE

Permet dactiver une partie du code en fonction des valeurs prises par une
variable de contrle. Peut se substituer au IF, mais pas toujours, tout dpend
de la forme de la condition (condition compose, on doit passer par un IF).

Select Case variable


Case valeur 1
bloc dinstructions
Syntaxe

Case valeur 2
bloc dinstructions
...
Case Else
bloc dinstructions
End Select

(1) Variable est la variable de contrle, elle peut tre de nimporte quel type en VBA, y compris un
rel ou une chane de caractres
(2) Valeur doit tre de type compatible avec variable
(3) La partie Case Else est facultative
(4) Limbrication avec un autre IF ou un autre Select Case (autre variable de contrle) est possible.

R.R. Universit Lyon 2 20


Branchement multiple SELECT CASE Un exemple

Entres : prix HT (rel), catgorie de produit (chane)


Sortie : prix TTC (rel)

'fonction select case


Public Function MonTTCSelon(pht As Double, cat As String) As Double
'dclarer la variable de calcul
Dim pttc As Double
'en fonction de la catgorie de produit
Select Case cat
Case "luxe"
pttc = pht * 1.33
Case Else
pttc = pht * 1.2 'toute autre valeur que luxe
End Select
'renvoyer le rsultat
MonTTCSelon = pttc
End Function

R.R. Universit Lyon 2 21


Branchement multiple SELECT CASE Plages de valeurs

Il est possible dintroduire des plages de valeurs dans la partie Case de


la structure Select Case. La comparaison devient plus sophistique.
Variable est un numrique dans ce cas, entier ou mme rel.

Select Case variable


Case Is op.de.comparaison valeur
bloc dinstructions
Syntaxe

Case valeur de dpart To valeur de fin


bloc dinstructions

Case Else
bloc dinstructions
End Select

R.R. Universit Lyon 2 22


Branchement multiple SELECT CASE Plages de valeurs Un exemple

Entre : quantit (entier)


Sortie : prix unitaire (rel)
Calcul : quantit < 100 p.u. = 0.5
100 quantit 200 p.u. = 0.3
quantit > 200 p.u. = 0.2

'calcul du prix unitaire en fonction de la quantit


Public Function MonPU(quantite As Long) As Double
'variable intermdiaire
Dim pu As Double
'selon les valeurs de quantit
Select Case quantite
Case Is < 100
pu = 0.5
Case 100 To 200
pu = 0.3
Case Is > 200 'Case Else aurait fait l'affaire aussi
pu = 0.2
End Select
MonPU = pu
End Function

R.R. Universit Lyon 2 23


Boucle POUR (FOR)

Faire rpter lexcution dun bloc dinstructions. Le nombre ditrations


est contrl par un indice.

For indice = val.dpart to val.fin step pas


Syntaxe

bloc dinstructions
...
Next indice

(1) Indice est un type ordonn, trs souvent un numrique


(2) pas contrle le passage dune valeur lautre dindice, si omis, pas = 1 par dfaut
(3) Next entrine le passage la valeur suivante de indice, si cette prochaine valeur
est > val.fin, on sort de la boucle
(4) Val.fin doit tre superieure val.dpart pour que lon rentre dans la boucle
(5) Si pas est ngatif, val.fin doit tre infrieure val.dpart cette fois-ci
(6) Linstruction Exit For permet de sortir prmaturment de la boucle
(7) On peut imbriquer des boucles (une boucle lintrieur dune autre boucle)

R.R. Universit Lyon 2 24


Boucle FOR Un exemple

Entre : n (entier)
Sortie : S (rel)
Calcul : S = 1 + 2 + + n

'calcul de la somme des carrs des valeurs


Public Function MaSommeCarre(n As Long) As Double
'variables de calcul (s pour la somme, i : indice)
Dim s As Double, i As Long
'initialisation
s = 0
'boucle avec l'indice i
For i = 1 To n Step 1
s = s + i ^ 2
Next joue le rle de lincrmentation (i suivant)
Next i
'renvoyer le rsultat
MaSommeCarre = s
End Function

R.R. Universit Lyon 2 25


Boucle TANT QUE FAIRE (DO WHILELOOP)

Faire rpter lexcution dun bloc dinstructions. Le nombre ditrations


est contrl par une condition. Attention la boucle infinie c.--d. la
condition permettant de sortir de la boucle nest jamais dclenche.

Do While condition
Syntaxe

Bloc dinstructions...
...
Loop

(1) Condition est un boolen, cest souvent une opration de comparaison


(2) On continue lexcution TANT QUE la condition est vraie ; si la condition
est fausse, on sort de la boucle
(3) Exit Do permet de provoquer la sortie prmature de la boucle

Si la condition est fausse demble. On


peut ne pas rentrer dans la boucle.
R.R. Universit Lyon 2 26
Boucle DO WHILELOOP (un exemple)

Entre : n (entier)
Sortie : S (rel)
Calcul : S = 1 + 2 + + n

'calcul de la somme des carrs des valeurs


Public Function MaSommeCarreWhile(n As Long) As Double
'variables de calcul
Dim s As Double, i As Long
'initialisation
s = 0
'il nous revient aussi d'initialiser l'indice
i = 1
'boucle TANT QUE
Do While (i <= n)
'sommer
s = s + i ^ 2
'pas de next, nous devons incrmenter l'indice
i = i + 1
Loop
'renvoyer le rsultat
MaSommeCarreWhile = s
End Function

R.R. Universit Lyon 2 27


Boucle FAIRETANT QUE (DOLOOP WHILE)

Faire rpter lexcution dun bloc dinstructions. Le nombre ditrations


est contrl par une condition.

Syntaxe Do
Bloc dinstructions
...
...
Loop While condition

On est sr de rentrer au moins une fois dans la boucle.

Le choix de la bonne structure (Faire.. Tant Que ou Tant Que..


Faire) dpend du problme traiter

R.R. Universit Lyon 2 28


Les variantes des boucles DO

Les boucles DO contrles par une condition sont trs riches en VBA.

Do { While | Until } condition


[ statements ]
[ Exit Do ]
[ statements ]
Loop
-or-
Do
[ statements ]
[ Exit Do ]
[ statements ]
Loop { While | Until } condition

Le Rpeter Jusqu (Until) existe aussi.

R.R. Universit Lyon 2 29


Le type plage de cellules spcifique Excel

LE TYPE RANGE

R.R. Universit Lyon 2 30


Le type RANGE

Le type RANGE dsigne une plage de cellules, cest un type spcifique Excel.

Coin en haut et gauche de la plage de cellules passe en paramtre de la fonction =


coordonne (1, 1) c.--d. ligne n1 et colonne n1, quelle que soit la position absolue
de la plage dans la feuille de calcul (ici le coin nord-ouest est en B3)
Exemple

Un bloc de cellules (B3:D4) est pass en


paramtre de la fonction. Ce bloc est forcment
rectangulaire, avec, ici : 2 lignes et 3 colonnes.

La fonction MaSommeRange() est cense faire la mme chose


que la fonction standard SOMME() dExcel.
R.R. Universit Lyon 2 31
Exploiter le type Range en VBA

Entre : plage (range)


Sortie : S (rel) Lignes et colonnes commencent lindice 1, quelle
Calcul : Somme des valeurs que soit la position de la plage dans la feuille.

'Travail sur le type Range


Public Function MaSommeRange(plage As Range) As Double
'variables intermdiaires
Dim s As Double, i As Long, j As Long Nombre de lignes de
'initialisation de la somme la plage de cellules.
s = 0
'parcours de la plage de cellules Nombre de
colonnes.
For i = 1 To plage.Rows.Count Step 1 'lignes
For j = 1 To plage.Columns.Count Step 1 'colonnes
'lecture des valeurs et somme
s = s + plage.Cells(i, j).Value
Next j
Next i
Accs la valeur (Value) de la
'renvoyer le rsultat
cellule : ligne ni, colonne nj
MaSommeRange = s
End Function
R.R. Universit Lyon 2 32
Une boucle adapte pour les plages de cellules For Each

La boucle For Each est adapte au parcours des collections.


Or une plage de cellules est une collection de cellules.

'Travail sur le type Range avec un For Each


Public Function MaSommeRangeEach(plage As Range) As Double
'variables intermdiaires
Dim s As Double, cellule As Range Une cellule est une plage de
cellules avec une seule cellule.
'initialisation de la somme
s = 0
'parcours de la plage de cellules
For Each cellule In plage plage fait figure de collection traiter.
s = s + cellule.Value Quimporte le sens du parcours ici (ligne
par ligne, ou colonne par colonne).
Next cellule
'renvoyer le rsultat
MaSommeRangeEach = s Cest bien la valeur contenue dans la
End Function cellule qui est exploite pour la somme.

R.R. Universit Lyon 2 33


Type spcial qui peut contenir toutes sortes de valeur

LE TYPE VARIANT

R.R. Universit Lyon 2 34


Le type Variant

Le type de variant peut grer tout type de valeurs. Il est trs souple,
particulirement commode quand on ne connat pas lavance le type
utiliser. Mais attention, il ne faut pas en abuser, il est trs lent parce que
multiplie les vrifications chaque accs la variable correspondante.

Un coup, la fonction renvoie un rel, un


Entre : a, b (rel) autre coup elle doit renvoyer une chane
Sortie : a/b si b 0, division par zro sinon de caractres.

'utilisation du type variant


Public Function MaDivision(a As Double, b As Double) As Variant
'var. intermdiaire
Dim resultat As Variant
'calcul
If (b <> 0) Then Dans la mme variable resultat, de type
resultat = a / b variant, on peut affecter un rel et une
Else chane de caractres.
resultat = "division par zro"
End If
'renvoyer le rsultat
MaDivision = resultat
End Function

R.R. Universit Lyon 2 35


Le type Variant est vraiment trs souple

On peut sen servir pour renvoyer un tableau. Une fonction peut donc renvoyer
plusieurs valeurs dun coup, linstar des fonctions matricielles dExcel (il faut valider
la saisie de la fonction avec la squence de touches CTRL + MAJ + ENTREE).

'renvoyer plusieurs valeurs


Public Function MonMinMax(a As Double, b As Double) As Variant
'un tableau interne - matrice 2 lignes et 1 colonne
Dim tableau(1 To 2, 1 To 1) As Double
'identifier le min et le max
If (a < b) Then
tableau(1, 1) = a
tableau(2, 1) = b
Else
tableau(1, 1) = b
tableau(2, 1) = a
End If
On a bien une fonction matricielle
'renvoyer le tableau comme peuvent en tmoigner les
MonMinMax = tableau accolades { } qui encadrent lappel
de la fonction.
End Function

R.R. Universit Lyon 2 36


Programmation des macros Travailler directement sur les feuilles

LES MACROS (1)

R.R. Universit Lyon 2 37


Macros ?

Les macros sont galement des procdures que lon cre lintrieur dun module.
Mais, la diffrence des Function, ce sont des Sub() sans paramtres qui peuvent
manipuler (accder et modifier) directement les objets Excel (classeurs, feuilles,
cellules, graphiques, scnarios, tableaux croiss dynamiques).

Ils ne sexcutent pas de la mme manire. Au lieu de les insrer dans une cellule, ils
se lancent globalement via le bouton MACROS dans le ruban DEVELOPPEUR.

R.R. Universit Lyon 2 38


Enregistreur de macros

Une manire simple de gnrer une macro est de lancer lenregistreur de macros.
Du code VBA est automatiquement gnr.

Exemple : mettre en gras et vert


le contenu des cellules A1 et A2

Une macro correspond


un Sub() sans paramtres.

Un nouveau module
Module1 est
automatiquement cr.

Ecrire du code VBA pour les macros


se rvlera plus simple au final.

R.R. Universit Lyon 2 39


Enregistreur de macros - Bilan

Avantages :
Il ny a pas plus simple pour produire du code, on peut crer et excuter une macro
sans aucune notion de programmation
Il nous donne des indications prcieuses sur les commandes associes aux objets
Excel

Inconvnients :
On travaille structure fixe, si la configuration de la feuille change, il nest pas
possible de lancer la macro
On ne bnficie de la puissance des structures algorithmiques

En dfinitive :
Il peut nous aider rdiger notre code en nous donnant des pistes sur la syntaxe
des commandes et les objets adquats manipuler (ex. imprimer automatiquement
des feuilles, on lance lenregistreur une fois, on intgre son code dans le notre
lintrieur dune boucle).

R.R. Universit Lyon 2 40


Ecriture des macros Les trois principaux objets

Ecrire directement des macros est simple une fois assimil la philosophie de
lapproche, et identifi les principaux objets et laccs leurs proprits et mthodes
(lenregistreur peut nous y aider).

Activer (slectionner) le
Classeurs Workbooks(classeur1.xlsm).Activate classeur dont le nom de
fichier est classeur1.xlsm

Dans le classeur courant, activer la feuille de calcul


dont le nom est Feuil1 (visible dans la languette
Sheets(Feuil1).Activate au bas de la feuille)
Feuilles
Workbooks(classeur1.xlsm).Sheets(Feuil1).Activate On peut combiner
les critures.

Dans la feuille courante du classeur courant, insrer


Cells(1,1).Value = 15 la valeur 15 dans la cellule ligne n1, colonne n1
c.--d. en A1, les coordonnes sont absolues ici.
Cellules
Sheets(Feuil1).Cells(1,1).Value = 15 De nouveau, on peut combiner.

R.R. Universit Lyon 2 41


Exemple de macros Simulation valeurs de TVA
Ecrire une macro qui insre diffrentes valeurs de
TVA en B2 et rcupre les valeurs de prix TTC en B3. Les diffrentes valeurs de TVA testes doivent tre
retranscrites au fur et mesure dans la colonne D.

Les valeurs de Prix TTC correspondantes


doivent tre recenses en colonne E
Sub SimulationTVA()
'variables
Dim pht As Double, pttc As Double
Dim tva As Double
Dim i As Long Remarque : il faut tre sur la feuille
'dbut d'criture des valeurs en ligne 2 adquate avant de lancer la macro,
i = 2
sinon le programme ne saura pas o
'rcuprer la valeur du PHT
pht = Cells(1, 2).Value 'en B1 chercher Cells().
'faire varier la tva de 10% 30% avec un pas de 5%
For tva = 10 To 30 Step 5
'insrer la valeur de la TVA en B2
Cells(2, 2).Value = tva
'Rcuprer le prix ttc en B3 A lissue de la simulation
pttc = Cells(3, 2).Value
'inscription des valeurs
'TVA en colonne D
Cells(i, 4).Value = tva
'PTTC en colonne E
Cells(i, 5).Value = pttc
'passage la ligne suivante
i = i + 1
Next tva
End Sub

R.R. Universit Lyon 2 42


Travailler sur les slections de lutilisateur

LES MACROS (2)

R.R. Universit Lyon 2 43


Slection simple
Comment programmer une macro qui manipule directement une plage de cellules
slectionne par lutilisateur ? Attention, nous ne sommes pas dans la mme
configuration que les fonctions personnalises ici, nous ninsrons pas un rsultat
dans une cellule, nous manipulons et modifions directement la plage slectionne.

Exemple : dans cette slection (les cellules


doivent tre slectionnes avant de lancer
la macro !), mettre en police verte les
cellules contenant une valeur paire.
Sub MesValeursPaires()
'variable intermdiaire
Dim cellule As Range Selection est un objet Excel (Selection
'boucler sur la slection
est donc un mot cl). Il est de type
For Each cellule In Selection
'tester le contenu Range (que nous connaissons bien).
If (cellule.Value Mod 2 = 0) Then
'modifier la couleur de la police
cellule.Font.ColorIndex = 4
End If Rsultat
Next cellule
10 15 20 13
End Sub
36 7 8 28
R.R. Universit Lyon 2 44
Slection simple On aurait pu crire

Dans une slection, de nouveau les


coordonnes sont relatives c.--d. le coin en
haut gauche dune slection correspond la
cellule (ligne n1, colonne n1) quelle que soit la
position de la slection dans la feuille.
Sub MesValeursPairesBis()
'variables intermdiaires
Dim i As Long, j As Long
'boucler sur les lignes Aucun doute, Selection est
bien de type Range
For i = 1 To Selection.Rows.Count
'boucler sur les colonnes
For j = 1 To Selection.Columns.Count
'tester le contenu
If (Selection.Cells(i, j).Value Mod 2 = 0) Then
'modifier la couleur de la police
Selection.Cells(i, j).Font.ColorIndex = 4
End If
Next j
Next i
End Sub

R.R. Universit Lyon 2 45


Slection simple Un second exemple

Identifier la premire cellule contenant la valeur 10 15 20 13


minimale dans une plage, mettre sa police en bleu. 36 7 8 28

Sub MonMinBleu()
variables intermdiaires
min va servir de cellule tmoin
Dim cellule As Range, min As Range
'initialisation du tmoin sur la 1re cellule
Set min = Selection.Cells(1, 1)
'parcourir
For Each cellule In Selection Range est un objet. Une
'comparer avec le contenu de la cellule tmoin affectation pour une variable
If (cellule.Value < min.Value) Then objet doit tre ralise
'mj de la cellule tmoin
laide de linstruction Set
Set min = cellule
End If
Next cellule
'mettre la couleur pour la cellule minimale
min.Font.ColorIndex = 5
End Sub

R.R. Universit Lyon 2 46


Slections multiples

Une slection peut tre multiple aussi c.--d. contenant plusieurs zones

Un exemple de slection
multiple avec 3 zones.

Trs curieusement, le mme mot cl Selection peut tre exploit.

Selection.Areas.Count Nombre de zones dans la slection.

Accs la zone nk (qui est de type Range).


Selection.Areas(k)
Areas est une collection de zones.

R.R. Universit Lyon 2 47


Slection multiple Un exemple
Pour chaque zone, mettre en
Sub MonMinZoneBleu()
police bleue la cellule contenant
'var. intermdiaires
Dim zone As Range, min As Range la valeur minimale.
'pour chaque zone Selection.Areas est une collection. On peut
For Each zone In Selection.Areas utiliser un For Each. On aurait pu aussi passer
' l'intrieur de chaque zone par un accs indic. Par ex.
'initialisation For k = 1 to Selection.Areas.Count
Set min = zone.Cells(1, 1) Set zone = Selection.Areas(k)
Etc
'parcours des cellules
For Each cellule In zone
'comparer
If (cellule.Value < min.Value) Then
'mj de la variable tmoin
Rsultat
Set min = cellule
End If
Next cellule
'mettre la couleur pour la cellule minimale
min.Font.ColorIndex = 5
'passage la zone suivante
Next zone
End Sub

R.R. Universit Lyon 2 48


BOTES DE DIALOGUE

R.R. Universit Lyon 2 49


Botes de dialogue standards

Les botes de dialogue permettent dinteragir avec lutilisateur. Nous nous en


tenons aux plus simples ici. InputBox() pour la saisie, MsgBox() pour laffichage.

InputBox() est une fonction

Sub MesBoitesDeDialogue()
'var. intermdiaire
Dim prenom As String
'saisie
prenom = InputBox("Entrer votre prnom", "Saisie", "")
'affichage
MsgBox ("Bonjour " & prenom)
End Sub

Noter la concatnation de chanes de caractres pour


faire apparatre le prnom dans la bote de dialogue.
R.R. Universit Lyon 2 50
EXPLOITER LES FONCTIONS
NATIVES DEXCEL

R.R. Universit Lyon 2 51


Accder aux fonctions natives dExcel dans nos programmes
Excel dispose de fonctions natives puissantes. Nous
pouvons y accder dans nos programmes VBA.
Exemple : Vrifier quune slection est simple (une
Sub MaMoyenneSelection() seule zone), puis calculer et afficher la moyenne
'var. intermdiaire des valeurs dans une bote de dialogue.
Dim moyenne As Double
'vrifier la slection
If (Selection.Areas.Count > 1) Then
MsgBox ("Attention, ce n'est pas une slection simple")
Else
Noter la syntaxe.
'faire calculer la moyenne de la slection par Excel
moyenne = Application.WorksheetFunction.Average(Selection)
MsgBox ("La moyenne est " & Str(moyenne))
End If
End Sub

R.R. Universit Lyon 2 52


Rfrences

De la documentation profusion (inutile dacheter des livres sur VBA)

Site de cours de Microsoft


VBA sous Excel : https://msdn.microsoft.com/fr-fr/library/office/ee814737(v=office.14).aspx
Structures de dcision : https://msdn.microsoft.com/fr-fr/library/hh892482(v=vs.90).aspx
Structures de boucle : https://msdn.microsoft.com/fr-fr/library/ezk76t25(v=vs.90).aspx

Autres cours et supports


Le Compagnon Info : http://www.lecompagnon.info/excel/
Excel Easy : http://www.excel-easy.com/
Cours VBA Gratuit : http://www.excel-pratique.com/fr/vba.php
Excel VBA for Complete Beginners : http://www.homeandlearn.org/index.html

Et dautres trs nombreux encore faites chauffer les moteurs de recherche.

R.R. Universit Lyon 2 53