Vous êtes sur la page 1sur 91

ISUP - UMPC VBA & EXCEL & ACCESS 1-1

Annick Valibouze 22/01/2010







CYCLE SUPERI EUR
1r e Anne
2009- 2010





VBA & EXCEL & ACCESS
pour la Statistique

Annick VALIBOUZE





ISUP VBA & EXCEL & ACCESS 1-2
Annick Valibouze 22/01/2010


Annick Valibouze
ISUP
Universit Pierre et Marie Curie
4, place Jussieu
F-75252 Paris cedex 05
http://www.isup.upmc.fr






























ISUP - UMPC VBA & EXCEL & ACCESS 1-3
Annick Valibouze 22/01/2010






VBA & EXCEL & ACCESS

Pour la statistique



TABLE DES MATIERES

"#$%&'() * )+"), - %().&)(/ %$/ 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000*12
"#$%&'() 3 )+"), )' ,$ /'$'&/'&45)00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 31*6
"#$%&'() 7 )8()9&/'()( )' .:;&<&)( ;)/ .$"(:/00000000000000000000000000000000000000000000000000000000000 717*
"#$%&'() = )'5;) ;)/ %().&)(/ %(:9($..)/ 0000000000000000000000000000000000000000000000000000000000000000000 =1=*
"#$%&'() 2 ,) ,$89$9) >&/5$, ?$/&" 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 21=@
"#$%&'() A &8')(<$")/ 5'&,&/$')5( 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 A1A2
"#$%&'() @ ?$/)/ ;) ;:88))/ - $"")// 000000000000000000000000000000000000000000000000000000000000000000000000000000000000 @1A6
"#$%&'() B ,$89$9)/ :?C)'/ - 45),45)/ 8:'&:8/0000000000000000000000000000000000000000000000000000000000000 B1B3
"#$%&'() 6 "),,5,)/ )8 >?$ /:5/ ,D#:') )+"),000000000000000000000000000000000000000000000000000000000000000000 61BA
"#$%&'() *E "$,"5, <:(.), /:5/ )+"),0000000000000000000000000000000000000000000000000000000000000000000000000000000*E16*
ISUP VBA & EXCEL & ACCESS 1-4
Annick Valibouze 22/01/2010























ISUP - UMPC VBA & EXCEL & ACCESS 1-5
Annick Valibouze 22/01/2010
"FGHIJKL * Excel : Premiers Pas


Lancement :
Une feuille de calcul dans lenvironnement Excel.

Cest un tableau double entre.
Les colonnes sont indices par des lettres (A, B,) et les lignes par des entiers (1, 2,).

Cellules

La feuille de calculs est constitue de cellules notes
Ai, Bi, Ci, . (reprsentes par $A$i, $B$i, $C$i , ...)
o i est un entier ; cest le format $A$1.

Une cellule est dite active si elle est entoure dun cadre noir gras avec un carr noir en bas
droite.

Pour activer une cellule :
- cliquer dessus
- taper sa notation dans la zone nom
- sy dplacer avec les flches (ou TAB ou CTRL)

Nenu systeme Excel Poigne ue iecopie
Zone Nom
Baiie ue menus
Baiie u'outils stanuaiu
Baiie ue foimule baiie ues tities
Cellule slectionne


Figure 1



ISUP VBA & EXCEL & ACCESS 1-6
Annick Valibouze 22/01/2010

Saisie du contenu :
- dans la cellule elle-mme
- dans la barre des formules


Figure 2


Validation avec : Entre, ! , cliquer sur une autre cellule

Correction avec : la barre des formules

Annulation de la dernire modification : cliquer sur la croix rouge

Suppression : - slectionner les cellules (touche CTRL enfonce si non connexes) puis
- utiliser la touche clavier Suppr ou bien
- Dans la barre Menu : Edition/Effacer (tout ou formules)

Fusion : Format/cellule/Alignement/fusionner

Dplacer une plage de cellules : slectionner la plage ; cliquer avec le bouton droit sur lun
des quatre bords ; dplacer la plage bouton enfonc ; lacher le bouton lemplacement dsir.

Copier une plage de cellules : utiliser la poigne de copie (voir plus loin, la propagation) ou
slectionner la plage avec la souris, taper la donne dans lune des cellules et faire CTRL +
ENTREE.

Intersection de plages de cellules : utiliser la touche espace du clavier comme oprateur
dintersection. Elles ne fonctionnent pas avec les rfrences 3D (voir plus loin).


Figure 3

Note. Le signe : dsigne un intervalle et le signe ; spare des lments.

Menu Contextuel et Format :

Affichage du menu contextuel de la cellule avant et aprs validation.

Afin quapparaisse le menu contextuel, se placer lintrieur de la cellule et cliquer sur le
bouton droit de la souris.
Ci-dessous, le contenu de la cellule nest pas encore valid.

ISUP - UMPC VBA & EXCEL & ACCESS 1-7
Annick Valibouze 22/01/2010

Figure 4

Dans cette figure, le contenu de la cellule a t valid. Le menu contextuel a t modifi et le
contenu de la cellule a t interprt par Excel. On note la diffrence entre laffichage dans la
cellule et le contenu de la barre des formules.


Figure 5

En demandant le Format dans le menu contextuel, nous observons celui choisit par dfaut par
Excel. Il est possible alors de le modifier.


Figure 6



Changer denvironnement : Rfrence absolue, relative ou mixte
ISUP VBA & EXCEL & ACCESS 1-8
Annick Valibouze 22/01/2010

Dans Outil/Options/Gnral, nous changeons pour adopter un autre systme que $A$1. Nous
lui prfrerons le systme matriciel L1C1 (voir Figure 7).

Dans ce systme matriciel, sont dfinis trois types de rfrences :

Rfrence absolue : LiCj dsigne la cellule ligne i colonne j

Si la cellule active est LiCj alors pour deux entiers relatifs k et l

Rfrence relative : L(k)C(l) dsigne la cellule ligne i+k colonne j+l
Rfrence mixte : L(k)Cl dsigne la cellule ligne i+ k colonne l.



Figure 7

Astuce : Pour passer dune rfrence lautre automatiquement, tapez sur F4 lorsque
La cellule ou le groupe de cellules est slectionn.

Note : - Par dfaut, les noms utilisent toujours des rfrences absolues aux cellules.
- Dans lautre mode, $A$1 est une rfrence absolue et A1 est une rfrence relative.
- voir Outils/Options/Formules.

Rfrence une feuille et un classeur

[NomClasseur]NomFeuille !PlageCellules

Exemple : [NotesPremierSemestre]Feuil2 !L1C1:L4C4

La mise jour est ralise si le classeur contenant la liaison est ouvert.
Si le classeur source (contenant les donnes) nest pas ouvert, il faut rfrencer en donnant le
chemin : "C:\...\...\ [NomClasseur]NomFeuille !PlageCellules" .

Rfrence 3D : NomFeuille1 : NomFeuille2 !

Contenu dune cellule

! Les valeurs
ISUP - UMPC VBA & EXCEL & ACCESS 1-9
Annick Valibouze 22/01/2010
Les diffrents types sont :
Boolen : VRAI ou FAUX avec un affichage centr.
Un nombre entier ou rel : 12 ou 12,7 (voir les formats) avec affichage
droite.
Une date, une heure (voir formats) avec affichage droite.
Un texte avec affichage gauche.
! Les formules
Chaque cellule peut tre le rsultat dune formule.
Une formule commence par le signe =.
Elle peut utiliser
" Des oprateurs arithmtiques : +, -, *, /
" Des oprateurs de comparaisons : <, <=, >=, =, <>
" Des oprateurs boolens : ET, OU, NON
" Des fonctions :
Des fonctions prdfinies apparaissent dans la zone nom si on clique sur sa flche.


Figure 8

La moyenne est slectionne et Excel nous propose la liste des cellules sur lesquelles
soprera cette moyenne : de la cellule C(-3) la cellule C(-1) de la mme ligne.
Astucieusement, Excel propose les formules avec des rfrences relatives.


Figure 9

Une fois valid : le contenu de la cellule affiche lvaluation de la fonction alors que la barre
des formules affiche son corps.

ISUP VBA & EXCEL & ACCESS 1-10
Annick Valibouze 22/01/2010

Figure 10

Linstruction SI-ALORS-SINON


Figure 11



Figure 12

ISUP - UMPC VBA & EXCEL & ACCESS 1-11
Annick Valibouze 22/01/2010


La propagation

Pour viter de rpter la formule sur toute la colonne, on utilise la propagation de valeurs ou
de formules en activant la cellule o est enregistre la formule et en dfinissant la zone de
propagation en cliquant sur le carr noir en bas droite de la cellule (la poigne de copie) et
en propageant en tenant le bouton gauche appuy ; puis Copier les cellules .


Figure 13

Note : pour faire apparatre le menu de copie, il faut cliquer sur la poigne avec le bouton droit et tirer dessus.

Utilisations de la zone :
supprimer tout son contenu
propager une formule ou une valeur
propager linairement (i.e. le long dune ligne ou le long dune colonne)
une srie ; Excel interprte 2 puis 4 comme la suite ;

Note. Vous pouvez renommer cette feuille 1 en NotesPremierSemestre : cliquez gauche sur le nom Feuille 1 en bas de la feuille puis
choisir Renommer .

Donner et utiliser un Nom

Montrons ci-dessous comment nommer Admissibilit toutes les cellules de la colonne C5.
Slectionner la colonne puis Aller dans Insertion/Nom/Dfinir (ou bien CTRL+F3).


Figure 14

ISUP VBA & EXCEL & ACCESS 1-12
Annick Valibouze 22/01/2010
De la mme manire, les cellules de la colonne C4 sont dfinies avec le nom Moyenne .
Nous pouvons alors utiliser ce nom dans les fonctions en remplacement de la rfrence la
cellule. La formule dadmissibilit de L2C5 est modifie en remplaant LC(-1) par Moyenne ;
cette formule est propage dans les lignes du dessous dans la colonne C5.


Figure 15

On peut de la mme faon ne nommer quune cellule ou une ligne.

Notes : - pas de distinction entre majuscule et minuscule.
- utilisent par dfaut des rfrences absolues aux cellules.

Etiquettes pour les formules

Il est possible dutiliser les titres, appeles tiquettes, figurant en tte des lignes ou des
colonnes. Par dfaut Excel ne reconnat pas les tiquettes dans les formules. Pour cela,
dans Outils/Options/Calcul activer Accepter les tiquettes dans les formules.
Dans notre exemple, supprimons le nom Moyenne et tiquetons la colonne C5.


Figure 16

Excel considre que le Moyenne du Si est encore le nom. La balise active nous claire
sur cette erreur. Il faut ressaisir Moyenne dans le Si.


Figure 17

ISUP - UMPC VBA & EXCEL & ACCESS 1-13
Annick Valibouze 22/01/2010

Figure 18


Une fois la formule propage (voir au-dessus), nous obtenons le tableau suivant :

Moyenne
El Braim 15 18 14,00 15,6666667 Admis
Ulmer 14 8 12,50 11,5 Admis
Morales 3 7 14,00 8 Non Admis
Bledian 5 10 8,00 7,66666667 Non Admis

Notes : - voir aussi Insertion/Nom/Etiquette pour ajouter une plage dtiquettes.
- il est possible de rentrer un nombre en tant que texte ou tiquette.


Les tris prdfinis

Nous avons insr une colonne afin dy rentrer les noms des lves
(Insertion dans menu contextuel de la colonne 1) ; cette opration aurait pu se faire aprs le
tri.
Nous dsirons trier les lves selon la colonne (du haut vers le bas) des moyennes (colonne
5). Nous slectionnons auparavant la zone de tri puis Donnes/Trier. Le tri sopre
automatiquement. Si des notes sont modifies, il sappliquera avec la modification.



Figure 19


Figure 20

Exercice. Trier en fonction de lordre alphabtique des noms dlves.

Les graphiques

Ralisons un histogramme des lves. Pour ce faire, nous utilisons les graphiques.
ISUP VBA & EXCEL & ACCESS 1-14
Annick Valibouze 22/01/2010
Pour quune feuille graphique se ralise automatiquement, il faut slectionner la plage de
cellules puis taper sur la touche F11. Pour obtenir des graphiques personnaliss nous allons
procder comme dcrit par la suite.
Nous allons dans Affichage/Barre doutils/Graphique :


Figure 21

Crons une zone graphique en cliquant sur longlet type graphique et dplaons cette zone
dans la feuille laide du Copier/Coller.


Figure 22

Nous rentrons dans le menu contextuel de cette zone :
ISUP - UMPC VBA & EXCEL & ACCESS 1-15
Annick Valibouze 22/01/2010

Figure 23

Nous choisissons notre type graphique :


Figure 24

Nous slectionnons notre plage de donnes (Donnes Sources) :
ISUP VBA & EXCEL & ACCESS 1-16
Annick Valibouze 22/01/2010

Figure 25


Figure 26

Lorsque la plage de donnes est slectionne (faire Entre), une fentre reprsentant le
graphique apparat. Choisir srie pour slectionner, ventuellement, laxe des abscisses. Si
celui propos par dfaut convient alors faire OK sinon le slectionner (toujours de la mme
manire : la souris ou en rentrant la main ).


Figure 27

ISUP - UMPC VBA & EXCEL & ACCESS 1-17
Annick Valibouze 22/01/2010
Terminer avec OK.

Figure 28

NOTES

1. Copier/Coller : Seules les formules sont copies. Pour copier seulement une valeur, garder
Le clic droit enfonc en vous mettant sur le bord de la cellule, dplacez-vous sur la cellule devant recevoir la valeur, lchez le clic et
choisissez ce que vous voulez copier. Pour dsactiver la cellule que vous avez copie, faites ENTREE.

2. Faire afficher les dpendances : OUTILS/AUDIT DES FORMULES
3. Faire afficher les formules la place des rsultats : dans OUTILS/AUDIT DES FORMULES choisir Mode Audit des formules
(ou bien directement CTRL+ ").
4. Ajuster une colonne : voir FORMAT
5. Se dplacer parmi des cellules slectionnes : TAB ; MAJ + TAB ; ENTREE ; MAJ ENTREE




EXERCICES ( rendre imprativement au prochain cours)



1. Utilisez la propagation pour faire afficher tous les mois de lanne. Attention : avec la propagation, certaines donnes peuvent tre
effaces.
2. Ralisez un histogramme sur la moyenne gnrale des lves.
3. Gnrez dans une colonne des nombres alatoires ; puis dans la colonne suivante calculez -1/2*ln(cellule prcdente). Dans une
cellule, calculer le max des valeurs de la deuxime colonne. Puis recopier cette dernire cellule pour calculer le maximum de
nouvelles valeurs (la fonction alea() est recalcule automatiquement). Que ce passe-t-il ? Que proposez-vous pour y remdier ?
4. Utilisez le cours pour crer les tables daddition et de multiplication dans le corps Z/7Z. Vous utiliserez la propagation pour
inscrire sur une ligne 0,,6 et de mme sur la colonne. Vous utilisez les fonctions (la fonction MOD qui retourne le reste de la
division entire) pour calculer i+j modulo 7 (idem pour *). Vous propagerez ensuite la formule. Vous changerez aussi le Format
des colonnes avec le mode audit des formules. Vous navez donc pas grand-chose faire. Pour laddition vous obtiendrez le
tableau TAB 1.
5. Refaire lexercice prcdent en nommant la ligne des titres et la colonne des titres. La formule sera alors le produit de ces noms
modulo 7.


+ 0 1 2 3 4 5 6
0 0 1 2 3 4 5 6
1 1 2 3 4 5 6 0
2 2 3 4 5 6 0 1
3 3 4 5 6 0 1 2
4 4 5 6 0 1 2 3
5 5 6 0 1 2 3 4
6 6 0 1 2 3 4 5








ISUP VBA & EXCEL & ACCESS 1-18
Annick Valibouze 22/01/2010


















































ISUP - UMPC VBA & EXCEL & ACCESS 2-19
Annick Valibouze 22/01/2010

"FGHIJKL 3 Excel et la statistique

Matrices

Reprenons notre exemple de notes dlves.
Nous recherchons la frquence des notes avec les 7 intervalles :
[0,5],]5,7],]7,10],]10,12],]12,15],]15,18],]18,20].
Nous devons slectionner lespace de cellules o apparatra le rsultat sous forme de vecteur
colonne dans . Nous tapons = dedans car la forme matricielle que nous nous apprtons
calculer est le rsultat dune fonction, la fonction FREQUENCE. Le symbole = a pour effet
de rendre accessibles des fonctions travers la zone nom. La fonction FREQUENCE est une
de celles proposes par dfaut.

Figure 29


Figure 30

Dans la zone nom, slectionnons la fonction FREQUENCE. Nous rentrons le tableau des
donnes (i.e. Tableau_donnes) ; comme elles sont dans la feuille, nous les slectionnons
la souris pour le dterminer. Nous rentrons la Matrice_intervalles la main mais nous
aurions pu utiliser la mme mthode que pour le tableau des donnes si ces valeurs avaient t
celles de cellules adjacentes.
ISUP VBA & EXCEL & ACCESS 2-20
Annick Valibouze 22/01/2010

Figure 31

Pour que cette fonction soit enregistre comme une forme matricielle, il faut valider avec
CTRL + MAJ + ENTREE. Le contenu de la barre des formules est entour daccolades. Il y a
1 note infrieure 5, 1 note dans ]5,7], 3 dans ]7,10],



Figure 32

Notes : - les paramtres des fonctions sont spars par des points virgules.
- nous avions slectionn trop de lignes. Vous ne pourrez plus rien y faire. La dimension restera fixe. Si vous chercher changer une
cellule de la matrice et quExcel vous linterdit, vous serez certainement amen vous servir de la croix rouge de la barre des formules pour
vous dbloquer.

Nous pouvons alors construire lhistogramme. Nous introduisons les valeurs 5,7,10,12,15,18
dans G1 :G6. Nous slectionnons la plage de donnes la souris (i.e. G1 :F7). Avec
Insertion/Graphique (ou bien F11), nous choisissons le premier type dhistogramme. Dans
lassistant, nous choisissons des titres.

ISUP - UMPC VBA & EXCEL & ACCESS 2-21
Annick Valibouze 22/01/2010

Figure 33


Figure 34

Nous slectionnons la srie 1. Nous indexons les intervalles (i.e. en ne prenant que le vecteur
frquence F1 :F7 comme donne) ; puis nous tenons compte des intervalles (en slectionnant
G1 :G6 pour les abscisses). Nous supprimons la srie 2.


Figure 35


ISUP VBA & EXCEL & ACCESS 2-22
Annick Valibouze 22/01/2010


Les diffrents formats de la reprsentation graphique :
Nous dsirons modifier la largeur des intervalles sur le graphique.
Dans la barre graphique, nous slection notre srie : srie 1. Puis nous cliquons sur longlet
Format de la srie de donnes pour faire apparatre son format.



Figure 36

Nous choisissons 0 dans Options/Largeur dintervalle.


Figure 37





Le Solveur

Excel dispose dun solveur permettant de rsoudre des systmes linaires dquations et des
programmes doptimisation. La feuille de calcul doit contenir :
# Des cellules qui contiendront les valeurs des variables en fin de rsolution (les cellules
variables)
# Des cellules fonctions contenant les fonctions des variables ; ce seront soit des
fonctions objectif, soit des contraintes.

Voici donc ce que devra contenir votre feuille de calcul pour rsoudre le systme :
X+3Y= 12 et X+4Y=-1.
ISUP - UMPC VBA & EXCEL & ACCESS 2-23
Annick Valibouze 22/01/2010

Figure 38

Ensuite dans Outils/Solveur dfinissez la cellule cible, les cellules variables et les
contraintes.


Figure 39

Note : Si Solveur nest pas dans Outils, linstaller avec Outils/Macros Complmentaires. Tapez Solveur dans Recherche pour en savoir
plus.

Graphe de dpendances

Un graphe orient est compos de sommets et darcs orients. Si a et b sont des sommets, tels
que a $b soit un arc, a est appel un prdcesseur (i.e. un antcdent) de b et b est appel un
successeur (i.e. un dpendant) de a. Un chemin dans un graphe orient est une suite de
sommets tels quil existe toujours un arc dun lment de la suite vers le suivant.
Un cycle est un chemin dont le premier et le dernier lment sont identiques.

Nous avons vu que des cellules dpendent dautres cellules. Cela peut se traduire par un
graphe de dpendances. Les graphes de dpendances sont orients et heureusement
acycliques.

Pour faire apparatre les cellules dont une cellule dpend et celles qui en dpendent, nous
irons dans Outils/Audit des Formules. Pour simplifier les manipulations, slectionnons
Afficher la barre doutils Audit des formules.

Pour faire afficher toutes les dpendances : entrons = dans une cellule vide puis slectionnons
la zone de cellules pour laquelle doivent safficher les dpendances et terminons en cliquant
autant de fois que ncessaire (pour faire apparatre les dpendances des diffrents niveaux)
sur Reprer les Antcdents.
ISUP VBA & EXCEL & ACCESS 2-24
Annick Valibouze 22/01/2010

Note. Quand on modifie une formule, il faut mettre jour le graphe de dpendance.





Figure 40

Note. Pour afficher un commentaire, dans la barre Audit de formules choisir Nouveau Commentaire ou bien dans le menu contextuel ou
bien avec la touche ALT+F2. Pour afficher ou masquer des commentaires et leurs indicateurs, aller dans Outils/Options/Affichage. Pour
effacer un commentaire, slectionner la cellule puis aller dans Edition/Effacer/commentaire.

Les fonctions statistiques dExcel

Un certain nombre de fonctions ont dj t tudies.
Certaines, comme la somme, sont directement applicables depuis la barre doutil standard
(symbole "), dautres depuis la zone nom (ex. SI, SOMME.SI, FREQUENCE, MOYENNE,
SOMME, Autres fonctions), dautres depuis Outils/Macro (voir plus loin) ou bien
Outils/Macros Complmentaires (voir Complment Solveur). Si la syntaxe de la fonction
est connue, il est toujours possible de la saisir dans la barre des formules.

Voici comment accder aux fonctions prdfinies :
Dans la zone nom slectionner Autres fonctions et dans Insrer une fonction slectionner
La catgorie Statistiques ou Finances :

Figure 41

ISUP - UMPC VBA & EXCEL & ACCESS 2-25
Annick Valibouze 22/01/2010
Figure 42
Les Bases de donnes

Utilisons les donnes dappart.xls. Nous avons la colonne tiquete prix, la colonne tiquete
surface et nous rajoutons une colonne ( calculer avec = A2 /B2) : prix/m^2. Allons dans
Donnes/Formulaire :


Figure 43
Nous passons dune fiche la suivante ; nous pouvons modifier des donnes sauf celles dj
calcules ; balayer les fiches selon des critres :


Figure 44
EN slectionnant Donnes/Filtrer/Filtre automatique, Excel place des flches de liste
droulante sous les tiquettes de la base :


Figure 45
Choisissons avec un filtre personnalis les appartements moins de 21 euros de mtre carr :

ISUP VBA & EXCEL & ACCESS 2-26
Annick Valibouze 22/01/2010

Figure 46
Pour annuler tous les critre la fois : Donnes/Filtrer/Afficher tout.

Pour laborer des filtres plus complexes : recopier la ligne (resp. colonne) des tiquettes
(laisser au moins une ligne despace) ; dfinir les critres en dessous ; cliquer sur une des
cellules de la plages (ici $A$1:$C$29) puis slectionner Donnes/Filtrer/Filtre labor :


Figure 47


Figure 48


Figure 49

Attention : les numios ue lignes n'ont pas changs. Essayons ue calculei la moyenne ues valeuis filties
uans la colonne C en les slectionnant la souiis : nous tiouvons une moyenne 2S euios 68 qui est
supiieuie 21. C'est la moyenne ues cellules CS C24, mme celles non appaientes, qui est faite.

Les tableaux croiss

ISUP - UMPC VBA & EXCEL & ACCESS 2-27
Annick Valibouze 22/01/2010
Ils constituent une mthode dynamique danalyse et dexploitation des donnes saisies.
LAssistant utilise des donnes dune feuille de calcul ou dune liste ou dune liste de donnes
existante ; on peut exploiter des donnes provenant de sources externes (Access, dBase, ).
Les domaines dapplication les plus courants sont : les rapports de suivi de ventes, les
analyses de stock, les statistiques du personnel, lexploitation de relevs statistiques,

Vous pourrez retrouver une partie de ce qui suit dans le livre Excel 2003 de Jack Steiner diter chez Eyrolles.

Soit le tableau suivant :

Rf Client Date Montant HT TVA Total TTC Rgl
1 Al 15/09/2005 1 000,00 ! 5,5% 1 055,00 ! Oui
2 Bm 26/09/2005 200,00 ! 19,6% 239,20 ! Non
3 Cp 26/09/2003 100,00 ! 19,6% 119,60 ! Oui
4 Al 28/09/2003 350,00 ! 19,6% 418,60 ! Oui
5 Wn 29/09/2003 150,00 ! 19,6% 179,40 ! Non
6 Fg 29/09/2003 550,00 ! 19,6% 657,80 ! Oui
7 Rs 29/09/2003 600,00 ! 19,6% 717,60 ! Oui
8 Cp 30/09/2003 700,00 ! 19,6% 837,20 ! Oui
9 Mg 30/09/2003 1 500,00 ! 5,5% 1 582,50 ! Non
10 Am 01/10/2003 820,00 ! 5,5% 865,10 ! Non
11 Rcp 01/10/2003 120,00 ! 5,5% 126,60 ! Oui
12 Wn 01/10/2003 650,00 ! 19,6% 777,40 ! Non
13 Uf 02/10/2005 28,00 ! 5,5% 29,54 ! Non

Avec Donnes/Rapport de tableau crois dynamique, souvre la boite de dialogue


Figure 50

Nous slection Liste ou base de donnes Microsoft Office Excel et Tableau crois
dynamique ; puis nous cliquons sur Suivant.
Dans la boite de dialogue suivante, une plage de cellule est propose par dfaut. Cest notre
tableau qui est propos. Nous choisissons ensuite si le tableau doit tre ralis dans le mme
feuille ou dans une autre. Nous arrivons alors cette tape :

ISUP VBA & EXCEL & ACCESS 2-28
Annick Valibouze 22/01/2010

Figure 51

Si nous cliquons sur Disposition, souvre alors une boite de dialogue reprsentant le
modle du tableau dynamique. Nous faisons glisser les onglets Rgl, Client, Date et
Montant HT, comme ci-dessous :


Figure 52

Note : Quand on slectionne longlet Montant HT et quon le place dans la zone Donnes, nous obtenons automatiquement Somme de
Montant.
Tapons OK ; puis Terminer.
Comme nous lavons spcifi, nous obtenons dans une nouvelle feuille le tableau suivant :


Figure 53

Apparat galement la barre doutils des tableaux croiss dynamiques.


Figure 54

Comme nous le constatons lors du cours, il est impossible de modifier les valeurs dans ce
tableau. Seul le tableau source est modifiable. Cependant, si nous modifions une valeur du
ISUP - UMPC VBA & EXCEL & ACCESS 2-29
Annick Valibouze 22/01/2010
tableau source, ce tableau nest pas actualis. Il faut utiliser longlet Actualiser les donnes
de la boite de dialogue ou par le menu contextuel du tableau dynamique :

Figure 55

On peut faire glisser les champs et trier ainsi autrement (voir dmo en cours) :

Somme de Montant
HT Client
Rgl Date Al Am Bm Cp Fg Mg Rcp Rs Uf Wn Total
Non 29/09/2003 150 150
30/09/2003 1500 1500
01/10/2003 820 650 1470
26/09/2005 200 200
02/10/2005 28 28
Total Non 820 200 1500 28 800 3348
Oui 26/09/2003 100 100
28/09/2003 350 350
29/09/2003 550 600 1150
30/09/2003 700 700
01/10/2003 120 120
15/09/2005 1000 1000
Total Oui 1350 800 550 120 600 3420
Total 1350 820 200 800 550 1500 120 600 28 800 6768

Note : nous verrons en cours que nous pouvons aussi choisir la disposition aprs en avoir terminer avec lassistant.


Les Macros

Excel vous offre la possibilit dutiliser des macros.

En programmation, une macro diffre dune fonction, en ce sens que cest le texte de son
corps qui est dabord valu. Une fonction prend des paramtres rels et selon son processus
de liaison avec les paramtres formels, elle les associe, puis value son corps dans
lenvironnement de cette association. Pour les macros, cest diffrent. Une pr-valuation du
corps est effectue avant la premire excution ; ce qui empche toute association des
paramtres formels aux valeurs des paramtres rels qui ce stade sont inconnus. Selon les
langages, les macros prennent diffrentes formes et respectent diffrentes rgles. Nous les
tudierons dans la prochaine partie de ce cours.


ISUP VBA & EXCEL & ACCESS 2-30
Annick Valibouze 22/01/2010
EXERCICES ( rendre imprativement au prochain cours)

1. Calculer la moyenne, lcart-type avec les modalits {0,1,2,,20} et faire afficher lhistogramme de la frquence pour des
valeurs prises entre 0 et 20.
2. Faire le tour de ces fonctions et en appliquer quelques-unes. En particulier, utiliser DROITEREG(), CROISSANCE() et rendre
des exemples personnels traits (travail individuel ; donc aucun exemple en commun).
3. Utilisez le solveur pour rsoudre le problme : Max((x-y)(z+y)) sous les contraintes x+2y<3 ; x,y,z >0 ; x< 50 ;


Afin de faciliter votre CR dexercices : utiliser Edition/Presse-papier Office permettant de rcuprer des copies dcran dans Word ou des
copies dExcel Word. Pour rogner les images : Affichage/Barres doutils/Image ; cliquer sur limage puis utiliser longlet rogner de la
barre Image en tirant sur les poignes situes aux quatre coins de limage et au centre des cots (poignes dhomothtie de limage si on ne
rogne pas).

Barre d'outils Image






































ISUP - UMPC VBA & EXCEL & ACCESS 3-31
Annick Valibouze 22/01/2010
"FGHIJKL 7 Enregistrer et Modifier des macros



Note. A partir de ce chapitre, certaines parties seront inspires du livre de Mikal Bidault (EXEL & VBA 2003 2000/XP ; CampusPress ;
www.pearsoneducation.fr).

Quest-ce quune macro en programmation ?

En programmation, une macro diffre dune fonction, en ce sens que cest le texte de son
corps qui est dabord valu. Une fonction prend des paramtres rels et selon son processus
de liaison avec les paramtres formels, elle les associe, puis value son corps dans
lenvironnement de cette association. Pour les macros, cest diffrent. Une pr-valuation du
corps est effectue avant la premire excution ; ce qui empche toute association des
paramtres formels aux valeurs des paramtres rels qui ce stade sont inconnus. Selon les
langages, les macros prennent diffrentes formes et respectent diffrentes rgles.

Le code est le texte crit dans le langage de programmation. Le codage est la gnration du
code.

Excel et les macros

Excel vous offre la possibilit dutiliser des macros. Les commandes Excel (lapplication
hte), les barres doutils, les raccourcis clavier, les dplacements dans un classeur, la
modification du classeur peuvent tre enregistres pour coder une macro.

Le codage dune macro Excel est ralisable de deux faons diffrentes :

# Par enregistrement de macros ;
# avec la fentre code de Visual Basic Editor.

Ce chapitre sappliquera vous expliquer lutilisation de lenregistreur de macros.
Nous aborderons VBA (Visual Basic pour Application) dans les chapitres suivants aprs vous
avoir initi la philosophie des langages objets.

Enregistrement de macros

La mthode que nous allons suivre est :
A. Dclenchement de lEnregistreur de macros.
B. Enregistrer le code de la macro.

A. Dclenchement de lEnregistreur de macros

1) Slectionner une cellule (de rfrence) laquelle sera attribue la suite de commandes
(i.e. le codage de la macro).
2) Avec Outil/Macro/Nouvelle Macro (ou bien Alt + F8) ouvrir la boite de dialogue
Enregistrer une macro :
ISUP VBA & EXCEL & ACCESS 3-32
Annick Valibouze 22/01/2010

Figure 56

3) Choisir un nom (qui ait un sens).
4) Ecrire la description.
5) Saisir une lettre pour la Touche de raccourci. Si la lettre est b (resp. B), CTRL b
(resp. B) dclenchera lexcution de la macro. Attention de ne pas craser une touche
de raccourci dj existante ! (on pourra la modifier ultrieurement en slectionnant le
nom de la macro dans Outils/Macro puis en cliquant sur Options)


Figure 57

6) Cliquer sur OK. La barre doutils Arrt de lenregistrement saffiche lcran
indiquant que lenregistrement de la macro est commenc :







Figure 58

B. Enregistrer le code de la macro



Arrt rel/abs
rerel/abs
ISUP - UMPC VBA & EXCEL & ACCESS 3-33
Annick Valibouze 22/01/2010

Figure 59

C. Excuter la macro

Slectionner la cellule laquelle doit sappliquer la macro et excuter la macro dans
Outil/Macro/Macros (ou bien, utiliser le raccourci CRTL b).


Figure 60

Notes
1. Scurit et macros : Outils/Macro/Scurit


Figure 61

Voir le code de la macro en VBA

# Outils/Macro/
# Slectionnez la macro
# Cliquez sur Modifier

Nous ouvrons ainsi Visual Basic et nous avons accs au code de la macro.
ISUP VBA & EXCEL & ACCESS 3-34
Annick Valibouze 22/01/2010

Figure 62
Nous constatons que
- le mode LiCi (RiCi, dans VBA) est repr avec FoimulaR1C1
- AvERAuE (pour Moyenne) est mal appliqu
- Que seule la cellule active (i.e. ActiveCell) peut accepter la macro ce qui nous empche
de lexcuter des plages de cellules slectionnes (i.e. Selection).

Nous modifions simplement le code (voir dmo en cours) pour obtenir le code suivant :

Sub NaxBesNotes()
'
' NaxBesNotes Nacio
' Nacio eniegistie le 11u72uuS pai caio
'
' Touche ue iaccouici uu claviei: Ctil+b
'
Selection.FoimulaR1C1 = "=NAX(AvERAuE(RC|-2j:RC|-1j),RC|-1j)"
Enu Sub

qui sapplique une plage de cellules (voir dmo en cours). Vous serez souvent amens
modifier des macros car elles ne ralisent pas exactement ce que vous attendiez.

Un autre exemple

Nous dfinissons la macro GrasItalique qui par la Touche CTRL+e transforme en gras et
italique le contenu de la cellule slectionne. Nous procdons comme pour la macro
prcdente en cliquant sur le G et le I situs sur la barre doutils standard. Il est possible
dappliquer cette macro toute une plage de cellules slectionnes.

ISUP - UMPC VBA & EXCEL & ACCESS 3-35
Annick Valibouze 22/01/2010

Figure 63

Si nous appliquons cette macro aux cellules L3C1 et L4C1 dun autre format que celui de la
cellule L3C2 de rfrence pour la cration de la macro, leur format nest pas modifi. Sil
ltait, il faudrait modifier des lignes du corps de la macro sous Visual Basic. Voici le corps
de cette macro

Sub uiasItalique()
' uiasItalique Nacio
' Nacio eniegistie le 24u82uuS pai caio
' Touche ue iaccouici uu claviei: Ctil+e
Selection.Font.Bolu = Tiue
Selection.Font.Italic = Tiue
Enu Sub

Enregistrons dsormais une macro appele GrasItalique2 en choisissant Gras Italique dans la
boite de dialogue Format/cellule :


Figure 64
Si nous appliquons cette nouvelle macro la cellule L3C1 dont la taille est de 18 points, sa
taille est rduite 10 points, celle la cellule de rfrence de dfinition de la macro
GrasItalique2. Regardons le corps de cette macro :

ISUP VBA & EXCEL & ACCESS 3-36
Annick Valibouze 22/01/2010


Si nous ne gardons que .FontStyle = "uias italique" comme proprit de lobjet
Selection.Font les tailles ne seront plus modifies.

Note : pas diffrence entre majuscules et minuscules : Font et font, cest idem. VBA remplace automatiquement les initiales dun mot en
majuscule si ce mot est connu.



Accessibilit des macros

Macros personnelles (.xls)

Lors de lenregistrement dune macro, la porte est propose : ce classeur (voir Figure
2). Ce classeur devra tre ouvert pour toute action avec cette macro. Pour que la porte
soit globale, il faut lenregistrer dans un classeur de macros personnelles appel
PERS0.XLS. Ce classeur est cr lors de lenregistrement de la premire macro
personnelle
ou plus exactement aprs avoir quitt Excel (dmonstration durant le cours). Pour le
faire afficher : Afficher/Perso.xls.
Consulter : C:\Documents and Settings\nom_login\Application Data\Microsoft\Excel\XLS-START\

Macros complmentaires (.xla)

Ce type de macros est adapt la distribution. Les classeurs sont chargeables (pas
ouverts) et donc accessibles au lancement de lapplication.

Enregistrement de macros complmentaires
Instructions dclarant (et dlimitant) uiasItalique2 comme un sous-programme de lapplication hte proprit de lobjet Selection.Font

Nom de la mthode (la fonction) liste des paramtres formels
commentaires
Sub uiasItalique2()
' uiasItalique2 Nacio
' Nacio eniegistie le 24u82uuS pai caio
' Touche ue iaccouici uu claviei: Ctil+Naj+E
With Selection.Font
.Name = "Aiial"
.FontStyle = "uias italique"
.Size = 1u
.Stiikethiough = False
.Supeisciipt = False
.Subsciipt = False
.0utlineFont = False
.Shauow = False
.0nueiline = xl0nueilineStyleNone
.ColoiInuex = xlAutomatic
Enu With
Enu Sub
Instructions dsignant lobjet considr

ISUP - UMPC VBA & EXCEL & ACCESS 3-37
Annick Valibouze 22/01/2010

- dans VBA, ouvrir un module projet (ici MaxDesNotes) et choisir
Debogage/CompilerVBAProject
- dans Excel, Fichier/Proprits/Rsum


Figure 65
- choisir Fichier/Enregistrer sous Dans la zone Type de fichier, slectionner
Macro complmentaire Microsoft Excel (*.xla). Le fichier Windows\Application
Data\Microsoft\Macros complmentaires est activ par dfaut.
- Choisir un nom et Enregistrez.

Activer/Dsactiver une macro complmentaire

Dans Outils/Macros complmentaires

Figure 66

Note : si une macro complmentaire intgre Excel nest pas disponible, il faut relancer linstallation dOffice et linstaller. (Windows :
Dmarrer/Programmes/Ajout/Suppressions de programmes/Office/Ajouter/Supprimer des composants).

EXERCICE 1 ( rendre)

Considrons le tableau suivant provenant du livre Mthodes Statistiques en Gestion de
Michel Tenenhaus (Chapitre 4, DUNOD, 1994).

prix surface
650 28
1400 50
ISUP VBA & EXCEL & ACCESS 3-38
Annick Valibouze 22/01/2010
3250 106
4000 196
1340 55
3950 190
2500 110
1600 60
1250 48
1250 35
1750 86
1500 65
775 32
1225 52
1000 40
7500 260
1625 70
4750 117
1890 90
390 30
1875 105
1000 52
1350 80
1475 60
4950 140
425 20
2475 100
425 28


En vous reportant au livre sus-cit, vous rpondrez aux questions suivantes en dtaillant ce
que vous avez fait pour parvenir vos rsultats :
1. Calculez la droite des moindres carrs et comparez votre rsultat celui de la
fonction prdfinie DROITEREG.
2. Calculez (sans macros) les erreurs et les leviers (voir pages 60 et 63).
3. Sortir les graphiques de la figure 2, page 61.
4. Faire afficher le graphe des dpendances.
5. Refaites les questions 1 et 2 en dfinissant des macros et en faisant afficher leur
code.
6. Enregistrez votre macro calculant la droite des moindres carrs comme macro
complmentaire.

Vous afficherez les tableaux sous deux formes : celle sans les formules, celle avec les
formules.

Note : une large utilisation des notions vues dans ce cours sera apprcie par le correcteur.


EXERCICE 2 ( rendre)

Revenons lexercice maximum des -1/2ln(alea()) du premier cours. Nous voulons
automatiser cette action.
1. Enregistrez une macro Copievaleui qui ralise une copie valeur dune cellule
(contenant ventuellement une formule) dans une autre cellule.
2. Modifier le code de la macro afin de retirer tout ce qui est inutile et comprendre ainsi
ce que chaque instruction signifie. Vous obtenez ainsi la macro CopievaleuiNou.
ISUP - UMPC VBA & EXCEL & ACCESS 3-39
Annick Valibouze 22/01/2010
3. Ecrire enfin la macro Copievaleuis qui recopie 20 fois la valeur de la cellule initiale
(i.e. sans la formule) et lappliquer lexercice sur alea() du cours 1. (Note : vous
devrez chercher la syntaxe de la boucle Foi).

































































ISUP VBA & EXCEL & ACCESS 3-40
Annick Valibouze 22/01/2010
















































ISUP - UMPC VBA & EXCEL & ACCESS 4-41
Annick Valibouze 22/01/2010
"FGHIJKL = Etude des premiers programmes


Cette partie commence par un expos introductif aux diffrents types de langages de
programmation (compil, interprt, typ ou non, interactif, objet,) et tout particulirement
introduit les notion de classes, proprits et mthodes des langages objets. Ensuite, nous
abordons VBA travers VB Editor.

Slectionner Affichage/barres doutils/Visual Basic pour faire afficher la barre doutils
Visual Basic :


Etudions les diffrents boutons (dmonstration en cours). Le bouton (Visual Basic
Editor) tant actionn, une fentre de lditeur souvre (voir Figure 7, chapitre 3) (Faire
Alt+F11 pour y accder directement). Dsormais, nous supposons tre dans cette fentre.
Allons dans lexplorateur dobjets (voir Affichage/Explorateur dobjets ou F2 ou bouton
dans la barre Visual Basic).

Lexplorateur dObjets

Voici loutil qui vous vitera dapprendre par cur une documentation complte : les
bibliothques, les classes, les membres et leur chemin (mthodes, proprits, constantes,
vnements associs un objet).

zone de recherche de texte zone Projet/Bibliothque
Liste des classes liste des membres une proprit une mthode

Zone Dtails





ISUP VBA & EXCEL & ACCESS 4-42
Annick Valibouze 22/01/2010


Note : ce qui est cr par lutilisateur apparat en gras.

Slectionnons le membre Range de <globales>:

Daprs la zone Dtails, cest une proprit (Property), un membre, de la classe Excel.global
retournant un objet Range.

Cliquons sur Range (la classe). Dans lespace de description :
Class Range
Nembie ue Excel
Cliquons sur Excel :
Libiaiy Excel
C:\Piogiam Files\Niciosoft 0ffice\0FFICE11\EXCEL.EXE
Niciosoft Excel 11.u 0bject Libiaiy
Cliquons sur ulobal :

Figure 68

En cliquant sur Aide nous obtenons linformation suivante : Pour les afficher, slectionnez
l'option Afficher membres cachs dans le menu contextuel de l'Explorateur d'objets.

Ce menu contextuel est le suivant :

Figure 69
Dsormais nous pouvons obtenir linformation :
Class ulobal
Nembie ue Excel

Si nous spcifions une bibliothque particulire, comme Excel, de nombreuses classes et
mthodes disparaissent.
Demandons, via le menu contextuel, de laide sur la proprit Range slectionne (ou bien
avec F1):


Figure 70
ISUP - UMPC VBA & EXCEL & ACCESS 4-43
Annick Valibouze 22/01/2010
Installons ce composant. La fentre daide est la suivante (nous lexplorerons en cours) :


Figure 71

Note : laide est apporte en fonction de ce qui est slectionn (membre, classe, rien). Si rien nest slectionn, laide indique le chemin
daccs la bibliothque ou au projet affich.
Mettons en application le premier exemple propos. Avec Insertion/Module, nous ouvrons un
nouveau module (Module3) dans lequel, nous tapons notre texte de macro. Nous en savons
dsormais assez pour cela. Voici la fentre Code concerne :



Zone liste des objets Zone liste des procdures

Figure 72

ISUP VBA & EXCEL & ACCESS 4-44
Annick Valibouze 22/01/2010


Nul besoin de valider, de compiler. Ouvrons un nouveau classeur Excel et renommons Test1
la premire feuille. Quelque que soit la feuille de ce classeur dans laquelle est excute cette
macro, la cellule A1 de la feuille Test1 prend la valeur 3.141359. Si, en revanche, nous
excutons cette macro dans un classeur dont aucune feuille se nomme Test1, une erreur est
dclanche (cest normal). Nous pouvons excuter partir de lditeur avec Excution\Ex
Excuter Sub. (Ces tapes seront excutes lors du cours).
Notons la manire donc lditeur VA complte et colore automatiquement lors de la saisie du
code. Nous pouvons encore nous conomiser avec Insertion/Procdure :


Figure 73

Slectionnons la classe Coineis dExcel, puis Select dans la liste de ses membres.
Demandons de laide :

Figure 74

Pour pouvoir utiliser cette mthode, il faut lappliquer une expression retournant un des
objets spcifis (Chait0bject, Chait0bjects, .).

La fentre UserForme

Elle permet dajouter des boites de dialogues dans les projets.

La fentre Code

Nous y avons dj eu accs plusieurs reprises. Une fentre code est attache lun des
modules (standard, module de classe, feuille, document rattach au projet). Pour les faire
afficher, il existe plusieurs moyens. Par exemple, slectionner le module, cliquer avec le
bouton droit et choisir Code dans le menu. Pour accder directement une procdure de la
fentre, utiliser la Zone de liste Procdures.
ISUP - UMPC VBA & EXCEL & ACCESS 4-45
Annick Valibouze 22/01/2010

EXERCICE 1

Dfinir une procdure pour crer une liste des macros complmentaires disponibles avec les
proprits spcifies. Indication : regarder laide de la classe AddIn. Vous navez rien
connatre et vous obtiendrez un tableau ressemblant au suivant :



EXERCICE 2 : Utilisation de la doc en ligne (suite)

Profitez de cette aide pour apprendre comment installer une macro complmentaire en VB et
la structure de la boucle for. Chercher des exemples (avec la classe Chaiacteis, par exemple)
o apparat la structure de contrle IF-THEN-ELSE.

EXERCICE 3 : manipulations de cellules

En utilisant la documentation en ligne, informez-vous sur Range, Cells, Row (et Rows),
Column, ActiveCell, Selection, Offset, Select, Goto, Activate, Resize et Variant. Voir aussi
les proprits CurrentRegion, End de la classe Range et la proprit UsedRange.

Dans les exercices suivant, vous donnerez le code VBA puis le rsultat sur une feuille de
calcul Excel (si une *). Vous pouvez aussi utiliser la construction automatique des macros
pour dcouvrir le code en VBA. Vous prciserez si vous travaillez sur des rfrences relatives
ou bien absolues.

1. Ecrire trois instructions permettant de slectionner les cellules B1 : B4 ; C2 ; C6 puis
dactiver la cellule B3 et enfin de lui affecter votre nom de famille (*).
2. Ecrire deux instructions permettant dactiver la feuille VotrePrnom du classeur
VotreNom puis de slectionner la cellule B3 de cette feuille.
3. Ecrire une instruction qui affecte votre prnom la cellule B2 de la feuille Feuil1 du
Classeur VotreNom (*).
4. Slectionner la cellule situe 2 lignes au dessus et 3 colonnes avant la cellule active.













ISUP VBA & EXCEL & ACCESS 4-46
Annick Valibouze 22/01/2010


















































ISUP - UMPC VBA & EXCEL & ACCESS 5-47
Annick Valibouze 22/01/2010

"FGHIJKL 2 Le Langage Visual Basic





Note : Dans un cours prcdent, les principes gnraux et une partie de la terminologie des langages objets ont t exposs au tableau.
Dsormais, les crans seront encore moins dtaills . Les dmonstrations du cours sont donc indispensables sa comprhension.


Les feuilles

Un projet VBA est constitu de feuilles. A chaque feuille du projet est affect un fichier dans
le dossier Feuilles dans la fentre Projet - VBAProject. Ouvrir une boite de dialogue signifie
ouvrir une feuille. Nous reviendrons sur les feuilles dans la partie 6 de ce cours.

Les modules

Ils forment un programme complet. Le code de linterface est stock dans un fichier
UserForm accessible dans le dossier Feuilles.

Module standard : dossier Module ; code standard (voir Partie 4)
Module de classe : dossier Module de classe ; code dcrivant les objets dvelopps


Crer un module dans un projet actif (activ en cliquant dessus) : avec Insertion dans le menu
contextuel du projet ou dans la barre doutils standard de lditeur.

Supprimer : avec le menu contextuel du module

Modifier son nom : slectionner le module, actionner sa Fentre Proprits (dans Affichage
ou avec la touche clavier F4) et modifier son nom dans cette fentre.

ISUP VBA & EXCEL & ACCESS 5-48
Annick Valibouze 22/01/2010

Figure 75

Chaque module est constitu de procdures.

Les Procdures

Un programme est lensemble des procdures dun projet.

Procdure standard : excute par appel de la procdure par son nom.
Procdure vnementielle : dclanche par un vnement (ex. clic de souris).

Dans un module UserForm, les procdures sont prdtermines : une par vnement pouvant
affecter un contrle (voir Chapitre 6).

Le choix des procdures des modules standards doit tre pens avec modularit (i.e. ne pas
tout mettre dans la mme procdure).

Procdure Sub : ne renvoie pas de valeur

Dfinition :
|Piivate | Publicj |Staticj Sub NomPiocuuie(|PaiametiesFoimelsj)
Coips
Enu Sub
Appel :
Call NomPiocuuie

Les lments de PaiametiesFoimels sont spars par une virgule (cest une srie).

Note : Pour associer un raccourci clavier la macro, la slectionner dans Excel : Outils/Macros, puis cliquer sur
Options. Il est possible galement dassocier une macro un bouton.
ISUP - UMPC VBA & EXCEL & ACCESS 5-49
Annick Valibouze 22/01/2010

Par dfaut, une procdure est publique ; dclare prive sa porte est restreinte au module.

Note : Une procdure vnementielle est, par dfinition, prive car ne peut-tre appele par aucune autre
procdure (voir Chapitre 6).

Les valeurs des variables dune procdure statique sont conserves durant lexcution du
programme (mmo-variables) mme si elles ont une visibilit restreinte la procdure.

Le code dune procdure est constitu dinstructions values squentiellement.
Une instruction est forme de constantes, variables et mots cls (symboles reconnus par le
langage). Il existe trois sortes dinstructions : de dclaration, daffectation, excutables. Nous
les tudierons plus tard.

Procdure Function : Elle peut renvoyer une valeur.

Dfinition :
|Piivate | Publicj |Staticj Function NomFonction
(|PaiametiesFoimelsj) |As Typej
Coips
Enu Function

Pour retourner une valeur valeui (ventuellement rsultat dune expression), le corps de la
fonction devra comporter linstruction suivante :

NomFonction=valeui

Si As Type est donn, la valeur sera du type Type, sinon de type vaiiant. Pour conomiser de
la mmoire, il est prfrable de prciser le type.
Si plusieurs instructions values lors de lexcution de la fonction sont de cette forme, cest
la dernire valeur affecte NomFonction avant la fin de lexcution de la fonction qui est
retourne. Excutons le programme suivant ( lcran en cours) :

Exemple 1 :

Public Sub Test1()
' appel u'une fonction pai une piocuuie

Bim n As Integei
n = 1u
NsgBox "la valeui ue " & n & " est " & Iuentit(n), vbuK0nly & vbInfoimation, " Test1 "
Enu Sub

Function Iuentit(n) As Integei
Iuentit = n
Enu Function

Pour cette excution, nous pouvons utiliser la barre doutils dbogage de lditeur.
Nous remarquons que :
- La fonction Iuentit nest pas dans la liste des macros
ISUP VBA & EXCEL & ACCESS 5-50
Annick Valibouze 22/01/2010
- Elle est dans la liste des fonctions ; nous y accdons rapidement en choisissons la
catgorie personnalises dans la fentre Insrer une fonction dExcel. Nous
pouvons lexcuter.

Nous avons pu aussi constater que nous navions pas savoir si nous devions mettre As Int ou
As Integei. Lintuition des premires lettres a suffit avec laide de lditeur, comme dans
lexemple ci-dessous :

Figure 76

Exemple 2 :

Sub Test2()
Bim n
n = 1u
Woiksheets("Test1").Range("A2").value = n & " est " & EstNul1(n)
Enu Sub

Function EstNul1(n) As Chaiacteis
' piobleme syntaxique
If n=u Then EstNul1 = "nul" Else EstNul1= "non nul" Enu If
Enu Sub

La fonction EstNul1 prsente un problme syntaxique. Nous regardons en cours comment se
passe lexcution de la macro Test2. Voici la correction qui nous montre limportance de la
syntaxe :

Sub TestS()
Bim n As Integei
n = 1u
Woiksheets("Test1").Range("AS").value = n & " est " & EstNul2(n)
NsgBox n & " est " & EstNul2(n), vbuK0nly & vbInfoimation, " TestS "
Enu Sub

Public Function EstNul2(n) As Stiing
If n = u Then
EstNul2 = "nul"
Else
EstNul2 = "non nul"
Enu If
Enu Function

Exemple 3 :
A travers ce dernier exemple, nous constatons que les fonctions de VB supportent la
rcursivit :

ISUP - UMPC VBA & EXCEL & ACCESS 5-51
Annick Valibouze 22/01/2010
Sub Test4()
Bim n As Integei
n = 4
NsgBox n & " ! = " & Fact2(n), vbuK0nly & vbInfoimation, " Test4 "
Enu Sub

Public Function Fact2(n) As Integei
' Le calcul ue 1u! upasse les capacits mais lesquelles .
If n = u Then
Fact2 = 1
Else
Fact2 = n * Fact2(n - 1) ' Fact2 s'appelle icuisivement ; ici la icuision est
embote pai *
Enu If
Enu Function

Pour viter de dpasser les capacits despace mmoire, il faut drcursiver la fonction.
La premire tape consiste transformer la rcursivit en rcursivit terminale. Drcursiver
dans le cas simple dun embotement : crer une variable solution et utiliser la boucle Tant
Que (i.e. while). (Tout ceci sera tudi en cours).

Pour utiliser les fonctions de feuille de calcul Excel, il faut les considrer comme des
mthodes de lobjet WorksheetFunction. Pour en savoir plus, consulter Utilisation des
fonctions de feuille de calcul Microsoft Excel disponibles dans Visual Basic.

Exemple 4. Excutons la procdure Test5 comme une macro ; cette procdure appelle la
procdure paramtre ProcPara qui nest pas excutable comme une macro (voir en cours) et
qui appelle la fonction Excel Fact.

Sub TestS()
Call PiocPaia(1u)
Enu Sub

Sub PiocPaia(n)
NsgBox n & " ! = " & WoiksheetFunction.Fact(n), _
vbuK0nly & vbInfoimation, " TestS "
Enu

Nous en profiterons pour excuter avec
- un point darrt dexcution (cliquer dans la colonne du module devant la ligne
concerne ; un point rouge y apparat et la ligne est colore en rouge)
- et avec la fentre Variables Locales (i.e. Affichage/Fentre Variables Locales).

Procdure Property Get : renvoie la valeur dune proprit

|Piivate | Publicj |Staticj Piopeity uet NomPiocuuie
(|PaiametiesFoimelsj) |As Typej
Coips
Enu Piopeity

ISUP VBA & EXCEL & ACCESS 5-52
Annick Valibouze 22/01/2010
Se comporte comme les fonctions pour la valeur retourne :

NomPiocuuie=expiession
et lappel :
NomPioceuuie(|PaiametiesRelsj)

En cours, nous ferons appel laide VBA : Piopeity uet.

Exemple :

Piopeity uet TestZio(Cellule As Range) As Stiing
Select Case Cellule.value
Case Is < 1u
TestZio = "Pas ieu"
Case Else
TestZio = "ieu"
Enu Piopeity

Sub NonCom()
Bim Cel As Range 'uclaiation ue la vaiiable Cel iepisentant un objet ue la classe
Range
<MK )GNF Cel &O Selection
Cel.AuuComment (TestZio(Cel)) ' mthoue Auu.comment ue Range applique
l'objet Cel
8LPJ Cel
Enu Sub

Voici le rsultat :

Figure 77

Procdure Property Let : dfinie la valeur dune proprit

Dfinition :
|Piivate | Publicj |Staticj Piopeity Let NomPiocuuie
(vaiStockage)
Coips
Enu Piopeity

Appel :

NomPiocuuie = vaiStockage

Procdure Property Set : tablie une rfrence entre un objet et une proprit

Note : Sortir dune procdure, dune fonction : Exit Sub, Exit Piopeity, Exit Function.

ISUP - UMPC VBA & EXCEL & ACCESS 5-53
Annick Valibouze 22/01/2010
VARIABLES

A - Les Paramtres (les arguments)


Dclaration dun paramtre formel PaiametieFoimel :

|0ptionnalj |Byvalj |ByRefj |PaiamAiiayj PaiametieFoimel |As Typej |=
valeuiPaiBfautj

0ptionnal : les arguments optionnels doivent tre dclars en dernier.
Omettre un paramtres rel est donc possible si le paramtre formel est optionnel mais le
remplacer par rien ne signifie pas oublier les virgules (donc deux virgules conscutives).
Savoir si un paramtre formel PaiametieFoimel a ou non une valeur (i.e. le paramtre rel a
t ou non omis) :
IsNissing(PaiametieFoimel)
Retourne Tiue si aucune valeur et False sinon.

Byval : le passage entre paramtres rels et paramtres formels est ralis par valeur. Les
paramtres formels prennent les valeurs des paramtres rels en respectant lordre
dapparition.

ByRef : le passage entre paramtres rels et paramtres formels est ralis par rfrence.
Cest ladresse du paramtre rel qui est passe. Par dfaut, le passage se fait par rfrence.

Exemples :
Bim v1, v2
Public Sub foo1()
v1 = 2
v2 = 2
Call foo2(v1, v2) 'notons Call poui appelei une piocuuie, une fonction
NsgBox " v1 = " & v1 & " et v2 = " & v2, vbuK0nly & vbInfoimation, " Test4 "
Enu Sub

Public Function foo2(v1, Byval v2) ' nous auiions pu mettie ByRef v1
v1 = S
v2 = S
Enu Function

Voici la boite de dialogue rsultat :

Figure 78

Note : Pour les connaisseurs, notez la similitude avec le langage Pascal (langage typ et compil).

ISUP VBA & EXCEL & ACCESS 5-54
Annick Valibouze 22/01/2010
As Type : le type peut tre Byte, Boolean, Integer, Long, Currency, Single, Double, Date,
String, Object, Variant ou un type dfini par lutilisateur. Cela permet le contrle de types.

= valeuiPaiBfaut : utilisable uniquement avec un paramtre optionnel. Ce ne peut tre
quune constante ou une expression constante (3+2, par exemple).

Les arguments nomms
Lors de lappel dune procdure Sub, utiliser laffection PaiametieFoimel :=PaiametieRel
la place de PaiametieRel sert viter les erreurs en cas domission de paramtre rel (cas
des paramtres optionnels) et passer les paramtres formels dans un ordre quelconque.
PaiametieRel est dit un argument nomm. La plupart des fonction intgres de VB
intgrent des arguments nomms.

B- Dclarations des variables

Elles peuvent tre explicites ou implicites. VB Editor permet de forcer les dclarations
explicites avec linstruction : 0ption Explicite dans la section Dclarations de la fentre
Code (cliquer sur la premire ligne de la fentre code et observer la zone liste des
procdures) ou bien Outils/Option/Editeur : Dclaration des variables obligatoire pour
systmatiser.

Implicite : la variable sera de type vaiiant.

Explicite : vite les erreurs de frappe. Recommand en cas de dveloppement important.

Dclarer explicitement une variable : Bim Nomvaiiable |As Typej. Encore une fois, comme
selon le type lespace mmoire rserv est plus ou moins important, la prcision du type
optimise loccupation de lespace mmoire.

Dclaration de plusieurs variables : Bim v1, v2,.,vn |As Typej,w1,.,wm ,|As Typej,..

Les Types
La fonction StrConv : pour convertir un type de donnes de chane en un autre.
En demandant le rsum des types de donnes lAide, nous obtenons le tableau
suivant auquel sont rajoutes quelques prcisions :

Type de donnes Taille d'enregistrement Plage
Byte (petit entier) 1 octet 0 255
Boolean 2 octets True ou False
Integer 2 octets -32 768 32 767
Long (entier long) 4 octets -2 147 483 648 2 147 483 647
Single
( virgule flottante en
simple prcision)
4 octets -3,402823E38 -1,401298E-45 pour les
valeurs ngatives ; 1,401298E-45
3,402823E38 pour les valeurs positives
ISUP - UMPC VBA & EXCEL & ACCESS 5-55
Annick Valibouze 22/01/2010
Double
( virgule flottante en
double prcision)
8 octets -1,79769313486231E308
-4,94065645841247E-324 pour les
valeurs ngatives ; 4,94065645841247E-
324 1,79769313486232E308 pour les
valeurs positives
Currency
(entier dcalage)
8 octets -922 337 203 685 477,5808
922 337 203 685 477,5807
Decimal 14 octets +/-
79 228 162 514 264 337 593 543 950 335
sans sparateur dcimal ;
+/-7,9228162514264337593543950335
avec 28 chiffres droite du sparateur
dcimal ; le plus petit nombre diffrent de
zro est +/-
0.0000000000000000000000000001.
Date 8 octets 1er janvier 100 au 31 dcembre 9999
Object 4 octets Toute rfrence des donnes de type
Object
String (longueur variable) 10 octets + longueur de la chane 0 environ 2 milliards
String (longueur fixe) Longueur de la chane 1 environ 65 400
Variant (nombres) 16 octets Toute valeur numrique, avec la mme
plage de valeurs qu'une donne de type
Double
Variant (caractres) 22 octets + longueur de la chane Mme plage de valeurs qu'une donne de
type String de longueur variable
Type dfini par l'utilisateur
(avec Type)
En fonction des lments La plage de valeurs de chaque lment
correspond celle de son type de
donnes.



Tableaux (Array)
Les tableaux commencent lindice 0. Pour commencer 1, crire 0ption Base 1 dans la
section Dclaration de la fentre Code ou bien dlimiter avec To . En cours, nous
ferons appel laide avec Utilisation des tableaux.

Type nom simple homogne ou htrogne (avec As vaiiant) :

Bim Nomvaiiable(NombieElments) As Type
Bim Nomvaiiable(Bbut To Fin) As Type

Bim Nomvaiiable(B1 To F1, B2 To F2,.,Bn To Fn) As
Type
ISUP VBA & EXCEL & ACCESS 5-56
Annick Valibouze 22/01/2010

Les tableaux deux dimensions sont utilisables pour stocker une feuille de calcul :

Vrification du type : IsAiiay(Nomvaiiable)

Quel que soit le type de donnes, les tableaux ncessitent 20 octets de mmoire, auxquels viennent s'ajouter
quatre octets pour chaque dimension et le nombre d'octets occups par les donnes. L'espace occup en mmoire
par les donnes peut tre calcul en multipliant le nombre d'lments par la taille de chacun d'eux. Par exemple,
les donnes stockes dans un tableau unidimensionnel constitu de quatre lments de type Integer de deux
octets chacun occupent huit octets. Ajouts aux 24 octets d'espace mmoire de base, ces huit octets de donnes
portent la mmoire totale ncessaire pour le tableau 32 octets.

Une variable de type vaiiant contenant un tableau ncessite 12 octets de plus qu'un tableau
seul.

Voir dans la docenligne : 0bounu, LBounu, Eiase (libration de lespace mmoire), }oin.

Exemples :

Sub Bim1()
Bim cuiExpense(S64) As Cuiiency
Bim intI As Integei
Foi intI = u To S64
cuiExpense(intI) = 2u
Cells(intI + 1, S).value = cuiExpense(intI)
Next
Enu Sub

Sub TableauNulti()
Bim intI, Int} As Integei
Bim NultiBim(1 To S, 1 To 1u) As Single
' Remplit le tableau ue valeuis.
Foi intI = 1 To S
Foi Int} = 1 To 1u
NultiBim(intI, Int}) = intI * Int}
Cells(intI + 4, Int} + S).value = NultiBim(intI, Int})
Next Int}
Next intI
Enu Sub


Sub TestTableauxSub()
Bim i As Integei
Bim N2() As vaiiant
Bim NonTableau As vaiiant ' Essayei As Integei
NonTableau = Aiiay(2, S, 6)
' Poui cette boucle, vitei que la cellule active appaitienne une matiice
Foi i = u To 0Bounu(NonTableau)
ActiveCell.value = NonTableau(i)
ActiveCell.0ffset(u, 1).Activate
Next i
ISUP - UMPC VBA & EXCEL & ACCESS 5-57
Annick Valibouze 22/01/2010
ActiveCell.0ffset(u, -0Bounu(NonTableau) - 1).Activate
' 0tilisation ue FoimulaAiiay poui iecopiei ; fonctionne aussi avec .value
Range("A2:C2").FoimulaAiiay = Range(ActiveCell, _
ActiveCell.0ffset(u, 0Bounu(NonTableau))).value
Range("AS:CS").FoimulaAiiay = NonTableau
Range("A4:C4").FoimulaAiiay = Aiiay(11, 12, 1S)
' NsgBox NonTableau(1) & " " & NonTableau(2)
N2 = NonTableau
NsgBox IsAiiay(Range("A4:C4").FoimulaAiiay), _
vbInfoimation, "Est-ce un tableau ."
' FoimulaAiiay poui une matiice
Range("B1:E1").FoimulaAiiay = "=Sum(R1C1:RSCS)"
' Passei un tableau en paiametie
Bim NonTab(2) As Single
NonTab(u) = S.1
NonTab(1) = 7.2
NsgBox NoyenneTableau(NonTab) , vbInfoimation,"moyenne"
Enu Sub

' NoyenneTableau calcule la moyenne ues lments uu tableau NonTab
Public Function NoyenneTableau(NonTab() As Single) As Single
Bim somme As Single
somme = u
Foi i = LBounu(NonTab()) To 0Bounu(NonTab())
somme = somme + NonTab(i)
Next i
NoyenneTableau = somme CSng(0Bounu(NonTab()) - LBounu(NonTab()) + 1)
Enu Function

Ci-dessous, nous retournons un tableau qui sera considr comme une matrice sous Excel.
Pour excuter la fonction Retouinei0neNatiice, Slectionner la zone matricielle (i.e. deux
cellules, ici) avant l'appel de la fonction puis l'excuter avec CTRL+MAJ+ENTREE (voir
Cours 2) ;
les valeurs 24 et 25 seront celles des cellules slectionnes

Function Retouinei0neNatiice()
Retouinei0neNatiice = Aiiay(24, 2S)
Enu Function

Avec un descriptif, ranger la fonction Retouinei0neNatiice du module Tableaux2 dans la
catgorie Fonctions Couis S (sinon elle sera par dfaut dans la catgorie Peisonnalise).

Sub AuuFunctionavb2()
Application.Nacio0ptions _
Nacio:="Tableaux2.Retouinei0neNatiice", _
Besciiption:="Teste ietouinei un tableau en valeui", _
Categoiy:="Fonctions Couis S"
Enu Sub

ISUP VBA & EXCEL & ACCESS 5-58
Annick Valibouze 22/01/2010
Nous excuterons ces fonctions et procdures durant le cours.

Tableaux dynamiques :
Dfinition
Bim Nomvaiiable()
Redimensionner :
ReBim Nomvaiiable(Bbut To Fin)

Entrane la perte de toutes les valeurs stockes. Sinon :

Pieseive ReBim Nomvaiiable(Bbut To Fin)

Avec comme conditions : la dimension du tableau ne peut tre modifie et la taille ne peut
tre quagrandie et seule la dernire dimension de la variable nest redimensionnable.

Tableaux paramtrs :

Exemple :
Sub testTableauPaia()
TableauPaia 1, 2, S, 24
Enu Sub

' si plusieuis aiguments, ueiniei aigument ue la piocuuie
Function TableauPaia(PaiamAiiay NonTableau() As vaiiant)
Bim i As Integei
Foi i = u To 0Bounu(NonTableau())
Cells(i + 1, 1).value = NonTableau(i)
Next
Enu Function

Types Utilisateur (personnalis, comme le stiuct en C ou le Recoiu en Pascal):

Dfinition : Type NonType
Iuent1 As Type1
Iuent2 As Type2
.
Iuentn As Typen
Enu Type

Utilisation :

Bim vai1,vai2 As NonType
vai1.Iuent1 = valeui
With vai2
.Iuent1 = valeui1
.Iuent2 = valeui2
Enu With



ISUP - UMPC VBA & EXCEL & ACCESS 5-59
Annick Valibouze 22/01/2010


Vrification des types : IsAiiay, IsBate, IsNumeiic, Is0bject, IsNissing, IsEmpty, IsNull,
IsEiioi (voir aussi vaiType).
Dterminer le type dune variable : vaiType(Nomvaiiable) (voir aussi TypeName).

Exemple :
Function EntieiBate()
Bo
EntieiBate= InputBox("Entiei une uate", "viification")
Loop 0ntil IsBate(EntieiBate) = Tiue
Enu Function

Conversion de type : CBool(Nomvaiiable), CByte, CCui, CBate,CBbl,
Cuec,CInt,CSng,Cvai,CSti

Les types doivent tre compatibles. Il ny a pas de troncation mais un dclanchement derreur.
Si on veut ramener la partie entire dun dcimal Variable : Int(vaiiable).
Avec laide, nous tudierons les conversions de type : tapons type dans laide et
slectionnons fonctions de conversion de type de donnes.

Exemple de conversion :

Public Sub TestConv()
NsgBox n & CInt("24S") + S & , vbuK0nly & vbInfoimation, " TestConv "
Enu Sub

Les constantes : Donner un nom Nom une valeur val durant toute lexcution du
programme :

Const Nom = val
Les Objets

Une fois une variable objet (linstance dune classe) dfini, il est possible de dfinir ou
dinterroger ses proprits, de lui appliquer les mthodes

Bim Nomvaiiable As NomClasse

Toute classe hritant de la classe 0bjet, il est toujours possible de prendre 0bjet pour
NomClasse. Lobjet est dclar mais pas construit.

La construction de lobjet (dune instance de la classe) se ralise en lui affectant avec Set un
objet de la mme classe dj existant :

Set Nomvaiiable = expiession
Exemple :

Sub vaiiable0bject()
Bim Police As Font 'Bfinition
Set Police = Woikbooks("classeui1.xls").Sheets("Feuil1").Range("a1").Font 'Ciation
ISUP VBA & EXCEL & ACCESS 5-60
Annick Valibouze 22/01/2010
Police.Bolu = Tiue
Enu Sub

On peut utiliser aussi 9LJ:QRLNJ dont les arguments sont nomms :

Set Nomvaiiable = uet0bject(|CheminAccesFichieij , classe)
Ou bien :
Set Nomvaiiable = uet0bject(CheminAccesFichiei)

permettant daccder des tableaux Excel sans que ceux-ci soient ouverts.

Ou bien "KLGJL:QRLNJ :

Set Nomvaiiable = Cieate0bject(classe
|,AuiesseNachineBistantej)
Exemple 1:

Bim NonClasseui1, NonClasseui2 As Woikbook 'ce seiont ues instances ue la classe
Woikbook, i.e. ues classeuis
Set NonClasseui1 = uet0bject("C:\Bocuments anu Settings\cvb\Buieau\classeui1.xls")
Set NonClasseui2 = Cieate0bject("Excel.Woikbook ") ' c'est--uiie application.classe

Librer lespace mmoire occup par une variable objet :

Set Nomvaiiable = Nothing

Exemple 2: si dans Outils/Rfrences de VB Editor, lapplication Niciosoft Woiu 11.u
0bject Libiaiy est slectionne (voir Figure 5), nous avons accs cette application non hte.
(Nous irons dans VBA sous lapplication Word.)

Voici la fentre Rfrences :


Figure 79


Const Chemin As Stiing = "C:\Bocuments anu Settings\cvb\Buieau\NonText.uoc"
ISUP - UMPC VBA & EXCEL & ACCESS 5-61
Annick Valibouze 22/01/2010
Public Sub ExcelEtWoiu()
'Classe Woiu.Bocument uoit tie accessible
Bim NonBoc As Woiu.Bocument

'uestion u'eiieui avec Resume Next
' si une eiieui se piouuit lois u'une instiuction, l'instiuction suivante est value
0n Eiioi Resume Next
Set NonBoc = uet0bject(, "Woiu.Application")
'uestion ue l'eiieui au cas o l'application Woiu ne soit pas accessible
If Eii.Numbei <> u Then Eii.Cleai

'Ciation ue l'instance NonBoc ue la classe Woiu.Bocument
Set NonBoc = uet0bject(Chemin)

' effaons les anciennes uonnes uans NonText.uoc et uans la feuille Excel Active
If NonBoc.Tables.Count > u Then
NonBoc.Tables(1).Belete
Enu If
Excel.Range("A:A").Belete

' ciation u'une table uans Nonuoc
Bim Position As Woiu.Range
Set Position = NonBoc.Range(u, u)
' cieation u'un tableau uans le uocument NonText.uoc paitii ue l'application hte Excel
NonBoc.Tables.Auu Range:=Position, NumRows:=S, NumColumns:=4
' Eciivons uans cette table
' en utilisant les outils ue l'application Woiu
Bim NaTable As Woiu.Table
Set NaTable = NonBoc.Tables(1)
' Eciituie : Si l'application Woiu est feime une eiieui est uclanche et iattiape pai Resume Next
With NaTable
' ciit "c'est ici" uevant le texte existant
.Cell(1, 2).Range.InseitBefoie "c'est ici"
' efface le contenu ue la cellule et ciit "et l"
.Cell(2, S).Range.Text = "et l"
' copie le texte ue NaTable contenu u'une cellule uans une autie
.Cell(1, S).Range.Text = .Cell(2, S).Range.Text
' Lectuie : Si Woiu est feim il n'y pas u'eiieui
' copions uans ues cellules sous Excel, l'application hte
Excel.Range("A1").value = .Cell(1, 2).Range.Text
Range("A2").value = .Cell(2, S).Range.Text
Bim mot As vaiiant
Foi Each mot In .Cell(1, 2).Range.Woius
Excel.Range("AS").value = Range("aS").value & "" & mot.Text
.Cell(S, S).Range.Text = mot.Text
Next mot
' poui se ubaiiassei uu ueiniei mot paiasite
Bim i As Integei
Foi i = 1 To .Cell(2, S).Range.Woius.Count - 1
Excel.Range("a4").value = Range("a4").value & "" & .Cell(2, S).Range.Woius(i)
Next i
Enu With
' sauvegaiue uu fichiei NonText.uoc
NonBoc.Save
Enu Sub

Nous excuterons ce programme en faisant afficher Eii.Numbei selon les cas de figure.
ISUP VBA & EXCEL & ACCESS 5-62
Annick Valibouze 22/01/2010
Nous irons sous VB Editor de lapplication Word. Nous regarderons la classe Table, sa
mthode Cell, la classe Cell, ses mthodes Foimula, Iu, Neige, Range Nous regarderons
Eii0bj, 0nEiioi.
Voir dans la docenligne : Ecriture dinstructions de dclaration, Dclarations de variables

Porte et dure de vie des variables

Variable de niveau procdure : locale une procdure
!"#"$% : variable garde sa valeur dun appel lautre (mmo-variable).

Variable au niveau module : dclares dans la section Dclarations du module
&'()$% : visible par toutes les procdures (et fonctions) du projet
&*$+#", : visible que par les procdures du module (par dfaut)

Les instructions (structures de contrle)

Une instruction est forme de constantes, variables et mots cls (symbole reconnu par le
langage).
Il existe trois sortes dinstructions : de dclaration, daffectation, excutables.

- Bo . Loop et While . Wenu (boucler avec un test darrt ; utiliser pour drcursiver)
- Foi . Next (parcourir un ensemble par indiage born)
- Foi Each . Next (parcourir un ensemble par appartenance)
- If . Then . Else
- Select Case . Case . Case Else . Enu Select
- uoTo Etiquette

Attention aux boucles infinies : CTRL+Espace pour en sortir.

En cours, nous regardons les exemples de laide.



Oprateurs

Dans Excel, consulter laide : a propos des oprateurs de calcul
Dans Visual Basic Editor : laide Rsum des oprateurs fournit le tableau suivant. (Si vous ne le
trouvez pas, allez dans and operator puis cliquez sur Voir aussi.) (Voir aussi : Is et Like.)

Oprateurs Description
Oprateurs arithmtiques Oprateurs permettant d'effectuer des calculs mathmatiques.
Oprateurs de comparaison Oprateurs permettant d'effectuer des comparaisons.
Oprateurs de concatnation Oprateurs permettant de combiner des chanes.
Oprateurs logiques Oprateurs permettant d'effectuer des oprations logiques.

Botes de dialogue
ISUP - UMPC VBA & EXCEL & ACCESS 5-63
Annick Valibouze 22/01/2010

En cours, nous regarderons laide.

Fonction &OHSJ?MP :
vaiiable = InputBox(piompt, title|,uefault, left,top,helpFile, helpContextIu,typej)
La variable rcupre le rsultat tap par lutilisateur. Si lutilisateur annule ou ferme la bote
de dialogue, une chane vide est retourne.

Mthode &OHSJ?MP de lobjet Application dExcel peut aussi tre utilise :

Set vaiiable = Application.InputBox(piompt, title |,uefault,
left,top,helpFile, helpContextIu,typej)

La mthode permet de slectionner une plage de cellules avant de cliquer sur OK.

Fonction .TU?MP :
vaiiable = InputBox(piompt, buttons, title)
o vaiiable est de type Integei.piompt.

Botes de dialogues Excel

Ce sont des objets Bialog (collection Bialogs) ; nous leur appliquons les mthodes Show ou
Bisplay.

Application.Bialogs(Bote).Show
Application.Bialogs(Bote).Bisplay

O Bote est une constante Excel indiquant la bote de dialogue.
Voir aussi : 9LJ:HLO<IVLOGWL et 9LJ/GXL$T<IVLOGWL.

Se Renseigner sur (aide VBA)

Ecriture de donnes dans des fichiers (grandes donnes).
Utilisation efficace des types de donnes.


Exercices :
Les programmes doivent tre largement comments (individuellement bien entendu ) et fournis avec un
jeu dexcutions personnel. Ne pas trop en faire non plus.
1. Ecrire une fonction FactS non rcursive retournant le mme rsultat que Fact2 et comparer les capacits
des deux fonctions en terme de dpassement. Vous ferez appel laide pour trouver la syntaxe de la
boucle while. Vous essaierez de nouveau 10 ! et expliquerez votre rsultat en regardant la
documentation du type Integer. Comparez avec la fonction Fact dExcel. Quen concluez-vous ?
2. Ecrire une fonction Fact4 avec Bo.
3. Donner un trs petit exemple personnel pour la procdure Property Let.
4. Dfinir deux petites sub diffrentes et personnelles publiques et de mme nom dans deux modules
distincts dun mme projet. Essayez avec une prive et de mme nom. Essayez dans deux projets
diffrents (avec les classeurs simultanment ouverts). Faites de mme avec deux fonctions. Quen
concluez-vous ?
5. Ralisez des conversions de type avec des variables et observez ce qui est convertit : la variable ou bien
la valeur de la variable ? Quen concluez-vous ?
ISUP VBA & EXCEL & ACCESS 5-64
Annick Valibouze 22/01/2010
6. Ecrire une macro qui stocke dans un tableau la table des ventes dappartements vue prcdemment et la
recopie trois colonnes plus loin (correction la semaine prochaine dans le classeur appait.xls).
7. Avec la boucle Foi, crire une fonction qui rajoute 1 tous les lments dun tableau bidimensionnel
dentiers.
8. Ecrire votre fonction BioiteReg2 (qui retourne le mme rsultat que la fonction prdfinie BioiteReg).
9. Ecrire une fonction RecFich(NomFichiei) qui recopie les 10 premiers mots dun fichier Word
NomFich dans les cellules A1 A10 de la feuille active du classeur actif dExcel. Excuter cette
fonction partir dune procdure sans paramtres.
10. Ecrire une fonction rcursive qui fait le produit dune matrice dentiers nxm par un vecteur de
dimention n.
11. Soient v et w deux vecteurs de n entiers de coordonnes respectives vi et wi. En utilisant la gestion des
erreurs, crire une fonction qui prend v et w en arguments et qui retourne le vecteur m tel que
mi=vi/wi, si wi est non nul et mi=vi, sinon.







































ISUP - UMPC VBA & EXCEL & ACCESS 6-65
Annick Valibouze 22/01/2010
"FGHIJKL A Interfaces Utilisateur

Elles se ralisent par les feuilles ( ne pas confondre avec les feuilles dun classeur Excel). Ce
sont des zones sur lesquelles se placent les contrles ActiveX (boutons, zones de texte, ).

Ces contrles constituent une interface graphique interactive. Pour associer du code un
vnement : procdures vnementielles :

Piivate Sub Contile_Evenement()
Coips
Enu Sub

Contrles : Label, TextBox, ComboBox, ListBox, CheckBox, 0ptionBox, SpinButton.

Evnements : Aftei0puate, BefoieBiag0vei, BefoieBiop0iPaste, Befoie0puate,
Change,Click, ublClick, BiopButtonClick, Entei, Exit, Initialize, KeyBown, KeyPiess,
Key0p, Nouse Bown, NouseNove, Nouse0p, SpinBown, Spin0p.


Une feuille UserForm

Pour ouvrir une feuille User Form, choisir Insertion/UserForm dans les menu contextuel de
la fentre Explorateur de Projets.


Figure 80


Est ainsi cr une feuille UserForm du Classeur (ici UserForm1 du Classeur2). Cest un objet
de la classe 0seiFoim (une instance) dont on peut modifier les proprits via son menu
contextuel.

En cours, nous irons dans lexplorateur dobjets o nous retrouverons notre objet UserForm1,
nous commenterons la fentre Proprits et la bote outils. En particulier, pour dcouvrir les
contrles, nous utiliserons laide avec la touche F1.

ISUP VBA & EXCEL & ACCESS 6-66
Annick Valibouze 22/01/2010

Figure 81

Le nom (i.e. Name) 0seiFoime1 est celui de cette feuille (cet objet) dans le code des
programmes.
A partir de lexplorateur dobjet, nous pouvons ainsi nous interroger sur la proprit
KeepSciollBaisvisible (voir Figure 2).

Les Contrles

Les proprits de chaque objet contrle sont galement modifiables via son menu contextuel
(en particulier, son nom). Chaque objet contrle possde galement ses mthodes et ses
vnements. Dans lexemple ci-dessous, nous mettrons True la proprit value de lobjet
0ptionButton1 et nous modifierons la proprit Caption des objets de la feuille afin quelles
soient identiques (ce nest pas oblig) aux noms respectifs de chaque objet (Name).

Arranger les contrles

Nous passerons vite sur cette partie car la lecture dune documentation est suffisante.

Outils/Options/Gnral/Aligner les contrles sur la grille


Figure 82




ISUP - UMPC VBA & EXCEL & ACCESS 6-67
Annick Valibouze 22/01/2010
Contrles supplmentaires

Voir aussi quil est possible de rajouter des pages via le menu contextuel de la bote outils.


Figure 83

Afficher une Feuille

Dans la classe 0seiFoim est dfinie la mthode Show quil suffit dappliquer une instance
de cette classe (notre feuille 0seiFoim1) pour que cet objet apparaisse : 0seiFoim1.Show.
Pour masquer une feuille, il y a la mthode iue. Pour dsigner la feuille (i.e. 0seiFoim1)
active, on peut utiliser la proprit Ne. Si UserForm1 est cette feuille active, Ne.Show
affichera la feuille 0seiFoim1. Dans les langages objets, ce genre dastuce est souvent utile
car le nom de lobjet nest pas toujours connu (ici la feuille active) au moment ou le code est
gnr ; qui plus est, ici, ce code sera alors applicable pour chaque feuille active quelque soit
son nom (penser, par exemple, au this de JAVA).

Ouvrons une fentre code (via le menu contextuel de lobjet UserForm1 ou celui du
projetVBA) ; dfinissons la procdure suivante et excutons-l ensuite :


Figure 84

Notre feuille cre une bote de dialogue dans la feuille (Sheet) Excel active.


Figure 85

Linstruction 0seiFoim1.iue pourra tre subtilement introduite dans la procdure
vnementielle associe un bouton de la bote de dialogue actionner afin de fermer la
bote.


ISUP VBA & EXCEL & ACCESS 6-68
Annick Valibouze 22/01/2010
Procdures vnementielles

Nous allons juste traiter un exemple expliquant le principe et chapper une description
fastidieuse et exhaustive. Supposons que la proprit value de 0ptionButton1 soit Tiue
(voir Figure 6).
Double cliquons sur OptionButton1 dans la fentre UserForm1 (voir Figure 3) ; nous
accdons la fentre code et la procdure associe au click nous est propos ; les autres
apparaissent choix sont facilement identifiables (voir Figure 7). Nous mettons linstruction
Range("A1").value = 2S dans le corps de la procdure 0ptionButton1_Click() :


Figure 86

Lorsquon excute, la cellule A1 de la fentre active a pour valeur 23.
Rajoutons deux procdures :

Piivate Sub 0ptionButton2_Click()
Range("A1").value = 24
Enu Sub

Piivate Sub 0ptionButtonS_Click()
Range("A1").value = 2S
Enu Sub

puis observons ce qui se passe sur la feuille de calcul Excel lorsque lon clique dans les
boutons de la boite de dialogue. Nous rajouterons un bouton que nous appellerons OK (avec
sa proprit Caption) et nous crirons sa mthode prive (procdure vnementielle) qui
permet de fermer la boite de dialogue (avec 0seiFoim1.iue) si on le clique.

Dans la zone Liste ues piocuuies de la fentre Code (voir Chapitre 4), nous trouvons les
procdure vnementielles possibles. Cliquons sur lun de ces choix.

Nous pouvons galement rajouter des boutons sur la feuille de calcul Excel avec la Bote
Outil Contrles :



Cliquer sur le bouton dactivation de cette bote (le premier), puis sur le contrle choisi, puis
sur lendroit de la feuille o le bouton doit tre plac. Pour crer une procdure
vnementielle, cliquer sur la zone du bouton sur la feuille.

Nous profiterons de cette dmonstration pour voir le code dans la barre des formules Excel.
ISUP - UMPC VBA & EXCEL & ACCESS 7-69
Annick Valibouze 22/01/2010
"FGHIJKL @ Bases de donnes : ACCESS


Ce chapitre applique ACCESS les notions apprises dans la premire partie du cours
Bases de donnes . Comme pour Excel & VBA, cette partie du cours ddie ACCESS
est interactive.

I. Cration de tables

1- Appelons Access partir de Windows
dmarrer/Programmes/Microsoft Office ACCESS


2- Ouvrons une nouvelle base
Fichier/Nouvelle base de donnes





3- Rentrons en mode cration


ISUP VBA & EXCEL & ACCESS 7-70
Annick Valibouze 22/01/2010

4- Crons une table comportant les champs suivants :

# Compteur Nom
et choisir le type de compteur :
NumroAuto -> Proprit : incrment





# Nom avec le type Texte
# Prnom avec le type Texte
# Date de naissance avec le type Date
# Compteur Profession avec le type Numrique, entier long.



5- Dfinissons la cl primaire (pour acclrer les accs) :
Slectionnons le champs Compteur Nom (qui est unique) puis cliquons sur la cl
situe sur la barre doutil :

ISUP - UMPC VBA & EXCEL & ACCESS 7-71
Annick Valibouze 22/01/2010





6- Rentrons en mode saisie en cliquant sur la premire icne ( gauche) de la barre
doutils (reprsentant une table) ; ACCESS nous demande de sauvegarder ; nus
sauvegardons avec le nom Personne. Remarquons que la premire icne nest plus une
table.




7- Remplissons cette table :





8- Crons une autre table sous le nom Profession :

Profession
Compteur Profession Profession Indice
28 Agriculteur 25
32 Commerant 550
35 Enseignant 121

ISUP VBA & EXCEL & ACCESS 7-72
Annick Valibouze 22/01/2010
II. Vues et Requtes

Une vue est une relation non matrialise dun shma externe calcule partir des relations de
la base par une question. En ACCESS, nous parlerons de requtes.

Soient nos deux tables : Personne et Profession. Nous allons crer une requte partir
de ces deux tables.
Dans la fentre Bases de donnes nous cliquons sur longlet Requtes puis Mode de
cration :






1- Dans le champs conceptuel de Requte 1 : Requte slection, nous avons
slectionn Afficher la table




Puis les tables Personne et Profession :

ISUP - UMPC VBA & EXCEL & ACCESS 7-73
Annick Valibouze 22/01/2010


2- Ralisation des liens la main . Ici le lien Compteur Profession est ralis
automatiquement :



Retirons cette jointure en cliquant dessus puis la remettre en cliquant sur le champs
Compteur Profession de la table Profession et en amenant la souris sur celui de
Personne. Ensuite cliquons sur les champs Nom, Prnom, Date de naissance de la table
Personne et Profession, Indice de la table Profession (nous pouvons aussi rentrer ces donnes
la main ). Nous avons slectionn les attributs de notre requte :




Excutons-la et savons-la (comme pour les tables) dans Requte1 (sinon ACCESS lui
donnera ce nom par dfaut) :



Requte1
Nom Prnom Date de naissance Profession Indice
Dubois Patrick 11/10/1975 Agriculteur 25
Dupont Ameline 20/03/1970 Commerant 550
Azemar Clothilde 12/12/1980 Enseignant 121
Balzac Alain 07/06/1971 Commerant 550


ISUP VBA & EXCEL & ACCESS 7-74
Annick Valibouze 22/01/2010

3- Requte avec contrainte

Nous voulons crer une nouvelle requte appele Requte2 qui comporte les tuples de
Requte1 tels que les indices soient infrieurs 300 ; cest une restriction. Dans le
tableau de la Requte2, copie de Requte1 pour le moment, rajouter < 300
lintersection de la ligne critre et de la colonne indice. Excutons avec ! ou en cliquant
sur le menu droulant de la premire case gauche de la barre doutils (choisir Mode
Feuille de donnes).



Requte2
Nom Prnom Date de naissance Profession Indice
Dubois Patrick 11/10/1975 Agriculteur 25
Azemar Clothilde 12/12/1980 Enseignant 121

4- Dfinition des relations entre les tables.
Lobjectif est de pour avoir automatiquement des jointures. Allons dans
Outils/Relations et ajouter les tables concernes. Faisons le lien entre les attributs
concerns par la jointure (ici Compteur Profession) comme en 3-. La fentre
suivante souvre :


Cliquons sur Appliquer lintgrit rfrentielle puis sur crer puis
fermer relations.



Dsormais en ajoutant les tables, le lien sera automatiquement mis.

5- Les oprations sur les requtes

ISUP - UMPC VBA & EXCEL & ACCESS 7-75
Annick Valibouze 22/01/2010
Nous cherchons une requte qui nous donne le nombre de personnes par profession.
Cliquer qui nous donne le nombre de personnes par profession. Crons une nouvelle
requte. Ajoutons les tables Personnes et Profession et slectionnons les champs
Professions et Compteur Nom. Rajouter dans la requte la ligne Opration en
slectionnant Totaux dans Afficher. Regroupement est mis par dfaut. Choisir
Regroupement pour lattribut Profession et Compte pour lattribut Compteur
Nom. Puis excuter la requte.






Excutons notre requte :

Requte3
Profession CompteDeCompteur Nom
Agriculteur 1
Commerant 2
Enseignant 1

III. Utilisation des fonctions dans les champs


Nous cherchons raliser une nouvelle requte dans laquelle la date de naissance est
remplace par lge.

1- Crons une nouvelle requte avec lattribut Date de naissance de la table
Personne et lattribut Profession de la table Profession.
2- Cliquons sur le champs Date de naissance puis sur Crer, la baguette magique .

ISUP VBA & EXCEL & ACCESS 7-76
Annick Valibouze 22/01/2010


Choisissons (double cliquer sur DiffDate)
Fonction -> Fonctions intgres -> Date/Heure -> DiffDate.



Dans la zone Expression, saffiche un modle de programme dans la fentre o nous
pouvons taper le ntre.

3- Tapons :

Age : DiffDate(''aaaa" ; Personne![Date de naissance] ;Date())

Dans la zone Expression.
Pour vrifier le rsultat, dans deux autres colonnes, nous demandons dafficher la date de
naissance et celle du jour.






ISUP - UMPC VBA & EXCEL & ACCESS 7-77
Annick Valibouze 22/01/2010


Il ne reste plus qu donner un nom la base de donnes.







IV. Liens avec Word et Excel



Nous essayerons en cours.


V. Passage SQL

Choisissons Affichage/Mode SQL :

Pour Requte1, nous obtenons :





Pour Requte2 :

SELECT Personne.Nom, Personne.Prnom, Personne.[Date de naissance],
Profession.Profession, Profession.Indice
FROM Personne INNER JOIN Profession ON Personne.[Compteur Profession] =
Profession.[Compteur Profession]
WHERE (((Profession.Indice)<300));

Pour Requte3 :

SELECT Profession.Profession, Count(Personne.[Compteur Nom]) AS
[CompteDeCompteur Nom]
FROM Profession INNER JOIN Personne ON Profession.[Compteur Profession] =
Personne.[Compteur Profession]
GROUP BY Profession.Profession;

Pour Requte4 :

ISUP VBA & EXCEL & ACCESS 7-78
Annick Valibouze 22/01/2010
SELECT DateDiff("yyyy",[Personne]![Date de naissance],Date()) AS Age,
Profession.Profession, Personne.[Date de naissance], Date() AS [Date du
jour]
FROM Profession INNER JOIN Personne ON Profession.[Compteur Profession] =
Personne.[Compteur Profession];


VI. Et VBA ?


Slectionnons Modules dans la base de donnes :


Nous nous retrouvons sous VBA (voir aussi Affichage/Volet Office ou bien
Affichage/Barres doutils/Volet Office ou CTRL+F1) :

ISUP - UMPC VBA & EXCEL & ACCESS 7-79
Annick Valibouze 22/01/2010


Avec lexplorateur dobjet, nous consultons la documentation sur la classe
DataBase , membre de la classe DA0 (voir explorateur de projets), contenant en particulier :

Utilisez la mthode CreateDatabase pour crer un objet Database permanent
automatiquement ajout la collection Databases, ce qui permet de l'enregistrer sur le disque
dur.

Pour en savoir plus sur CreateDatabase consultons DA0 :



Nous slectionnons CreateDataBase :

Function CreateDatabase(Name As String, Locale As String, [Option]) As Database
Membre de DAO.DBEngine

Nous regardons la mthode comme membre de Workspace :

Function CreateDatabase(Name As String, Connect As String, [Option]) As Database
Membre de DAO.Workspace






ISUP VBA & EXCEL & ACCESS 7-80
Annick Valibouze 22/01/2010
Dans laide de CreateDataBase, nous trouvons :

CreateDatabase, mthode
Cre un objet Database, enregistre la base de donnes sur disque et
renvoie un objet Database ouvert (espaces de travail Microsoft Jet
uniquement).
Syntaxe
Set database = workspace.CreateDatabase (name, locale, options)
La syntaxe de la mthode CreateDatabase comprend les lments
suivants :
lment Description
database Variable objet reprsentant l'objet Database crer.
workspace Variable objet reprsentant l'objet Workspace existant qui va contenir
la base de donnes. Si vous omettez workspace, la mthode
CreateDatabase utilise l'objet Workspace par dfaut.
name Donne de type String d'une longueur maximale de 255 caractres,
indiquant le nom du fichier de base de donnes crer. Cet argument
peut prciser le chemin et le nom de fichier complets, comme
"C:\db1.mdb". Si vous ne prcisez aucune extension, .mdb est
automatiquement ajout. Vous pouvez galement indiquer un chemin
d'accs rseau, si votre rseau le permet, par exemple,
"\\server1\share1\dir1\db1". Cette mthode ne permet de crer
que des fichiers .mdb.
locale Expression de chane indiquant l'ordre de tri utilis lors de la cration
d'une base de donnes, comme indiqu dans Valeurs. Si vous omettez
cet argument, une erreur se produit.


Et encore :

La mthode CreateDatabase permet de crer et d'ouvrir une base de donnes vierge,
puis renvoie l'objet Database. Il vous faut complter sa structure et son contenu l'aide
d'objets DAO supplmentaires. Pour crer une copie complte ou partielle d'une base de
donnes, vous pouvez utiliser la mthode CompactDatabase, qui permet de crer une
copie personnalise.


ISUP - UMPC VBA & EXCEL & ACCESS 7-81
Annick Valibouze 22/01/2010



Essayons :



Sur le Bureau, cette BD nomme BDCreateVBA est effectivement cre et nous pouvons
lappeler partir dACCESS.


Comme pour les classes sous Excel, nous constatons que lexplorateur dobjets est loutil
indispensable au dveloppement des applications sous ACCESS via VBA.

A vous de continuer !


























ISUP VBA & EXCEL & ACCESS 8-82
Annick Valibouze 22/01/2010
"FGHIJKL B Langages Objets : quelques notions


Classe (Class) : Dfinition commune dun ensemble
Sous-classe : un chien et un chat sont des animaux
Objet dune classe : instance de cette classe
Collection : ensemble des objets dune classe

Un objet possde lensemble des mthodes et proprits dfinies dans la classe dont il est une
instance.

Application hte : Excel, Word , Access, .
Nous travaillerons sous lapplication Excel, mais nous pourrons faire appel aux objets des
autres applications.

Sommet du modle objet : Application
Sous lobjet Application : collection Woikbooks englobant les objets Woikbook (classeurs
ouverts)
Sous lobjet Woikbook : collection Woiksheets des feuilles de calcul du classeur, les objets
Woiksheet (voir aussi Sheet).


Accder un Objet : les objets dune collection sont reprables par leur indice dans cette
collection ou par leur nom : NomCollections("Nom0bjet") o NomCollections est en fait
une proprit de la classe NomCollection (i.e. de mme nom sans s) retournant lobjet
dsign en paramtre.

Appliquer une mthode, une proprit un objet : 0bjet.mthoue ou 0bjet.piopiit.

Exemple : Application.Woikbooks.("Classeui1").Sheets("Feuil1").Activate

Si Application.Woikbooks.("Classeui1") est le classeur actif alors
Sheets("Feuil1").Activate suffit.


Proprits (attributs) : modifications, interrogations. Types : chane de caractres,
numrique, boolen, constante.

Mthodes : actions que lobjet peut excuter.

dinstance : 0bjet.Nthoue , 0bjet.Piopiit
de classe : Classe. Nthoue , Classe.Piopiit

Exemple : fermer tous les classeurs : Woikbooks.Close.
Crer un nouveau classeur : Woikbooks.Auu.

Evnements : actions reconnues par les objets. Ils dclanchent des programmes
appels procdures vnementielles.

ISUP - UMPC VBA & EXCEL & ACCESS 8-83
Annick Valibouze 22/01/2010
Fonctions : valuation de leur corps dans un environnement dans lequel les paramtres
formels sont associs aux paramtres rels et pouvant retourner un rsultat.

Nous aborderons galement lhritage, le polymorphisme,

Cration dun classeur et Polymorphisme sous VBA




Je copie le code dans le module dun projet (en loccurrence le module 1 du projet
TestDocenligne) et jexcute. Le classeur ClasseurViaVBA est alors cr.



Nous poursuivrons cette docenligne en cours. En particulier, le cours 5 portera sur la partie
Visual Basic/Rubriques Conceptuelles .
ISUP VBA & EXCEL & ACCESS 8-84
Annick Valibouze 22/01/2010



























ISUP - UMPC VBA & EXCEL & ACCESS 8-85
Annick Valibouze 22/01/2010


















































ISUP VBA & EXCEL & ACCESS 9-86
Annick Valibouze 22/01/2010

"FGHIJKL 6 Cellules en VBA sous lhte Excel


Range : constructeur de la classe Range (Voir Chapitre 4)

Cells : proprit
Cet exemple montre comment affecter une taille de caractres de 14 points la cellule C5 dans la feuille Sheet1.
Worksheets("Sheet1").Cells(5, 3).Font.Size = 14

Cet exemple montre comment supprimer la formule dans la cellule 1 de la feuille Sheet1.
Worksheets("Sheet1").Cells(1).ClearContents

Cet exemple montre comment affecter une police de caractres Arial et une taille de 8 points pour toutes les
cellules dans la feuille Sheet1.
With Worksheets("Sheet1").Cells.Font
.Name = "Arial"
.Size = 8
End With


Cet exemple montre comment affecter le style italique aux cellules A1:C5 dans la feuille Sheet1.
Worksheets("Sheet1").Activate
Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True

Cet exemple montre comment balayer une colonne de donnes intitule myRange . Si une cellule contient la
mme valeur que celle situe immdiatement au-dessus, l'adresse de la cellule contenant le doublon est affiche.
Set r = Range("myRange")
For n = 1 To r.Rows.Count
If r.Cells(n, 1) = r.Cells(n + 1, 1) Then
MsgBox "Duplicate data in " & r.Cells(n + 1, 1).Address
End If

Cet exemple montre comment effectuer une boucle sur les cellules A1:J4 dans la feuille Sheet1. Si une cellule
contient une valeur infrieure 0,001, la valeur est remplace par 0 (zro).
For rwIndex = 1 to 4
For colIndex = 1 to 10
With Worksheets("Sheet1").Cells(rwIndex, colIndex)
If .Value < .001 Then .Value = 0
End With
Next colIndex
Next rwIndex

ISUP - UMPC VBA & EXCEL & ACCESS 9-87
Annick Valibouze 22/01/2010
Row : proprit
Cette proprit renvoie le numro de la premire ligne de la premire zone de la plage. Type de donnes Long en
lecture seule.
Cet exemple montre comment affecter une hauteur de 4 points toutes les autres lignes de la feuille Sheet1.
For Each rw In Worksheets("Sheet1").Rows
If rw.Row Mod 2 = 0 Then
rw.RowHeight = 4
End If
Next rw


Rows : proprits qui renvoie un objet Range
Cet exemple montre comment supprimer la ligne 3 dans Sheet1.
Worksheets("Sheet1").Rows(3).Delete

Column et Column : idem Row

ActiveCell : proprit, construit un objet Range representant la cellule active de la feuille de calcul (voir
Chapitre 3).

Selection : renvoie lobjet slectionn dans la feuille de calcul (voir Chapitre 3).

Cette proprit renvoie l'objet slectionn dans la fentre active pour un objet Application, et dans une fentre
spcifie pour un objet Windows.
Notes
Le type de l'objet renvoy dpend de la slection en cours (par exemple, si une cellule est slectionne, cette
proprit renvoie un objet Range). La proprit Selection renvoie Nothing si rien n'est slectionn.
Utiliser cette proprit sans identificateur d'objet quivaut utiliser Application.Selection.
Exemples
Cet exemple montre comment effacer la slection effectue dans la feuille Sheet1 (en supposant que cette
slection concerne une plage de cellules).
Worksheets("Sheet1").Activate
Selection.Clear

Cet exemple montre comment afficher le type d'objet Visual Basic de la slection.
Worksheets("Sheet1").Activate
MsgBox "The selection object type is " & TypeName(Selection)

Offset : renvoie un objet Range qui reprsente un objet dcal par rapport la feuille de calcul (voir Exercice 2
Chapitre 3).

Cette proprit renvoie un objet Range qui reprsente une plage dcale de la plage spcifie. En lecture seule.
ISUP VBA & EXCEL & ACCESS 9-88
Annick Valibouze 22/01/2010
expression.Offset(RowOffset, ColumnOffset)
expression Obligatoire. Expression qui renvoie un objet Range.
RowOffset Argument de type Variant facultatif. Nombre de lignes (valeur positive, ngative ou gale 0
(zro)) de dcalage appliquer la plage. Les valeurs positives correspondent un dcalage vers le bas et les
valeurs ngatives un dcalage vers le haut. La valeur par dfaut est 0.
ColumnOffset Argument de type Variant facultatif. Nombre de colonnes (valeur positive, ngative ou gale
0 (zro)) de dcalage appliquer la plage. Les valeurs positives correspondent un dcalage vers la droite et
les valeurs ngatives un dcalage vers la gauche. La valeur par dfaut est 0.
Exemples
Cet exemple montre comment appliquer un dcalage de cellule de trois colonnes vers la droite et de trois lignes
vers le bas la cellule active de la feuille Sheet1 .
Worksheets("Sheet1").Activate
ActiveCell.Offset(rowOffset:=3, columnOffset:=3).Activate

Cet exemple suppose que la feuille Sheet1 contient un tableau dot d'une ligne d'en-tte. L'exemple montre
comment slectionner le tableau sans slectionner la ligne d'en-tte. La cellule active doit se situer un endroit
quelconque du tableau avant l'excution de l'exemple.
Set tbl = ActiveCell.CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, _
tbl.Columns.Count).Select


Select : Slectionner lobjet spcifi, mthode

Exemple
Cet exemple montre comment slectionner les cellules A1:B3 dans la feuille Sheet1 .
Worksheets("Sheet1").Activate
Range("A1:B3").Select

Pour slectionner une cellule ou une plage de cellules, utilisez la mthode Select. Pour activer une seule cellule,
utilisez la mthode Activate.
Goto : Slectionner lobjet spcifi, mthode

Cette mthode slectionne une plage ou une procdure Visual Basic quelconque dans n'importe quel classeur et
active celui-ci s'il ne l'est pas.
expression.Goto(Reference, Scroll)
expression Obligatoire. Expression qui renvoie un objet Application.
Reference Argument de type Variant facultatif. La destination. Il peut s'agir d'un objet Range, d'une chane
de caractres comportant une rfrence de cellule en notation de type R1C1 ou d'une chane de caractres
ISUP - UMPC VBA & EXCEL & ACCESS 9-89
Annick Valibouze 22/01/2010
contenant un nom de procdure Visual Basic. Si vous ne spcifiez pas cet argument, la destination est la dernire
plage que vous avez slectionne l'aide de la mthode Goto.
Scroll Argument de type Variant facultatif. Affectez-lui la valeur True pour faire dfiler la fentre de telle
sorte que le coin suprieur gauche de la plage apparaisse dans le coin suprieur gauche de la fentre. Affectez-lui
la valeur False pour ne pas faire dfiler la fentre. La valeur par dfaut est False.
Notes
Cette mthode diffre de la mthode Select des faons suivantes :
Si vous spcifiez une plage situe dans une feuille qui ne se trouve pas au premier plan, Microsoft Excel
bascule vers cette feuille avant de procder la slection. (En revanche, si vous utilisez la mthode
Select pour slectionner une plage situe dans une feuille qui ne se trouve pas au premier plan, la plage
est slectionne mais la feuille n'est pas active.)
Cette mthode utilise un argument Scroll qui vous permet de faire dfiler la fentre de destination.
Lorsque vous utilisez la mthode Goto, la slection prcdente (celle qui prcde l'excution de la
mthode Goto) est ajoute dans le tableau des slections prcdentes (pour plus d'informations,
consultez la rubrique relative la proprit PreviousSelections). Vous pouvez utiliser cette
caractristique pour basculer rapidement entre quatre slections au maximum.
La mthode Select utilise un argument Replace, ce qui n'est pas le cas de la mthode Goto.
Exemple
Cet exemple montre comment slectionner la cellule A154 de la feuille Sheet1, puis faire dfiler la feuille de
calcul pour afficher la plage.
Application.Goto Reference:=Worksheets("Sheet1").Range("A154"), _
scroll:=True


Resize : modifie lampleur dune plage de cellules

Cette proprit redimensionne la plage spcifie. Cette proprit renvoie un objet Range qui reprsente la plage
redimensionne.
expression.Resize(RowSize, ColumnSize)
expression Obligatoire. Expression qui renvoie un objet Range redimensionner.
RowSize Argument de type Variant facultatif. Nombre de lignes de la nouvelle plage. Si vous n'avez pas
spcifi cet argument, le nombre de lignes de la plage demeure inchang.
ColumnSize Argument de type Variant facultatif. Nombre de colonnes de la nouvelle plage. Si vous n'avez
pas spcifi cet argument, le nombre de colonnes de la plage demeure inchang.
Exemples
Cet exemple montre comment tendre d'une ligne et d'une colonne la slection effectue dans la feuille
Sheet1 .
Worksheets("Sheet1").Activate
numRows = Selection.Rows.Count
numColumns = Selection.Columns.Count
Selection.Resize(numRows + 1, numColumns + 1).Select

ISUP VBA & EXCEL & ACCESS 9-90
Annick Valibouze 22/01/2010
Cet exemple suppose que vous disposez d'un tableau avec ligne d'en-tte dans Sheet1 . L'exemple montre
comment slectionner le tableau sans slectionner la ligne d'en-tte. La cellule active doit se trouver quelque part
dans le tableau avant d'excuter l'exemple.
Set tbl = ActiveCell.CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, _
tbl.Columns.Count).Select













































ISUP - UMPC VBA & EXCEL & ACCESS 10-91
Annick Valibouze 22/01/2010

"FGHIJKL *E Calcul Formel sous Excel

Lors du cours 2, nous avons constat notre insatisfaction face lutilisation du solveur sous
Excel. Dsormais, le systme de calcul formel Maple est utilisable dans les feuilles de calcul
Excel. Cest assez simple. Voyons ensemble de quelle manire.

Tout dabord, voici comment aller chercher la macro complmentaire ncessaire
linterfaage.

1. Ouvrir la boite de dialogues Outils/Macros complmentaires.
2. Choisir Parcourir pour vous rendre dans le rpertoire Maple 10. Par exemple
C:/Program Files/Maple 10/Excel/.
3. Slectionner le fichier WMIMPLEX pour linsrer comme une macro complmentaire
dans Excel. Observer les icnes Maple apparatre dans la feuille de calcul (voir Figure
ci-aprs).

Regardons maintenant comment utiliser Maple.

1. Taper
=Naple("sin(x)")
Dans une cellule (ou dans la barre des formule).


Figure 87
2. Essayer galement
=Naple("plot(cos(x),x=1..1u)")

Maintenant utiliser le mode cration automatique de macros pour voir le code sous VBA.
Il est dsormais possible de faire du Maple sous VBA avec Excel comme Application.

Pour en savoir plus, utiliser la documentation Maple en tapant : Excel.

Il est galement possible dutiliser des tableurs sous Maple (voir Documentation Maple).