Vous êtes sur la page 1sur 42

Master 1re Anne Mickael BUCHET

Anne 2006-2007 Facult Dconomie-Droit

Visual Basic
v 6.0
CHAPITRE 1 : PRESENTATION DE LINTERFACE VBA ..................................... 4

1. Introduction ................................................................................................................................................... 4

1.1 Lancement de VBA .................................................................................................................................... 5

2. Menu Contextuel Affichage .......................................................................................................................... 6

3. Menu Contextuel Insertion........................................................................................................................... 8

4. Menu Contextuel Dboguage ....................................................................................................................... 8

5. Le menu Contextuel outil ............................................................................................................................. 9

CHAPITRE2 LES OBJETS EXCEL ..................................................................... 10

1 - Lobjet Application .................................................................................................................................... 10

2. Les objects Workbooks ............................................................................................................................... 10

3 Les objects Sheet .......................................................................................................................................... 11

4 Les Cellules .................................................................................................................................................. 12

CHAPITRE 3 : LES VARIABLES ET CONSTANTES .......................................... 14

1. Les chanes de caractres (variable de type String) ................................................................................ 15

2. Les valeurs de type numriques :.............................................................................................................. 16

3. Les variables de type Date .......................................................................................................................... 17

4. Les variables Boolennes et constantes ..................................................................................................... 17

5. Les variables de type Variant ..................................................................................................................... 18

6. Les variables de types Object .................................................................................................................... 18

7. Les variables de type tableaux ................................................................................................................... 18

8. Les variables de type personnalises ......................................................................................................... 19

9. Conversion de type de donne entre elles .................................................................................................. 19

10. Porte et dure de vie des variables ......................................................................................................... 20

CHAPITRE 4 PROGRAMMATION SEQUENTIELLE ET BOUCLE


DITERATIONS ..................................................................................................... 21

1. Les diffrents types de procdures ............................................................................................................ 21

2. Les Structures de contrle VBA ................................................................................................................ 23

CHAPITRE 5 LES TABLEAUX CROISES DYNAMIQUE : LES PIVOT TABLES26


1. Premire approche ...................................................................................................................................... 26

Modlisation de lconomie et de la Finance Internationales


-2-
2. Mthodes et proprits des pivotTables .................................................................................................... 28

3 Les Graphiques (Charts) et les Objets Graphiques (ChartsObjects) ..................................................... 30

CHAPITRE 6 : LES FEUILLES VBA OU USERFORMS ...................................... 32

1 - Prsentation de la Fentre des UserForms .............................................................................................. 32

2 .La Boite outils ........................................................................................................................................... 33

3 Utilisation des userforms ............................................................................................................................. 35

CHAPITRE 7 : LES QUERYTABLES ET OBJET ADODB.................................. 37

1 Rfrence des objets ADO .......................................................................................................................... 37

2. Les tapes des requtes ............................................................................................................................... 38

3. Utilisation des donnes ................................................................................................................................ 39

4. Fin des objets cres ..................................................................................................................................... 40

5. Les proprits des connections et les transformations de tables ............................................................. 40

6. Les QueryTables ......................................................................................................................................... 41

Modlisation de lconomie et de la Finance Internationales


-3-
Chapitre 1 : Prsentation de linterface VBA

1. Introduction

Je vais commencer par donner un descriptif assez schmatique des diffrentes fentres et
proprits utiles pour une bonne apprhension de loutil VBA dans son ensemble. Ce
descriptif nest videmment pas exhaustif et je laisse le soin chacun de dcouvrir par lui-
mme cet environnement.

Zone Objet Zone procdure Evnement


pour une feuille ou un
contrle. Affiche pour le
module slectionn ses
Fentre de Projet procdures et fonctions

Fentre de Code (F7)

Fentre des Proprits


dobjets

Modlisation de lconomie et de la Finance Internationales


-4-
1.1 Lancement de VBA

Modlisation de lconomie et de la Finance Internationales


-5-
2. Menu Contextuel Affichage

2.1 Fentre dexplorateur de projet (Ctrl+R)


Cette fentre permet de visualiser larchitecture du projet dans lequel nous sommes, cest--
dire sa composition (Sheets, worksheets, xla, module, module de classe, rfrence,
Userform,etc.)
Nous verrons ces diffrents lments un peu plus loin.

2.2 Fentre de proprits (F4)


Chaque objet est dfini par un ensemble de proprits qui lui confre un comportement
particulier, cest grce cette fentre que nous allons pouvoir directement attribuer
certaines particularits un objet.

2.3 Fentre de code (F7)


Cest dans cette partie que nous allons implmenter notre code.

2.4 Fentre espions


Cette fentre est trs utile pour connatre ltat de nos variables en cours dexcution, elle
nous prsente son type, sa valeur et le contexte dans lequel cette variable se trouve ainsi que
ses attributs, un simple glisser/dplacer dans cette fentre permet daccder ces
informations ou clic droit /ajouter un espions.

Modlisation de lconomie et de la Finance Internationales


-6-
2.5 Fentre Variables locales
A linstar de la fentre espion elle recense toutes les variables qui composent le module ou
nous nous trouvons.

2.6 Fentre Pile des appels


Trs utile lorsquon est perdu, on peut dire que cest le GPS de VBA, cela nous indique le
cheminement des fonctions appelantes et appeles.

2.7 Fentre Explorateur dobjet (F2)

Zone projet Afficher/Masquer les


rsultat de la recherche

Affiche la dfinition

Volet Dtail Liste Membres des


Liste Classe classes.

Cette fentre nous renseigne sur le types de variables qui sont renvoys par les proprits et
mthodes et surtout sur son appartenance une classe car comme nous le verrons tous les
objets Excel sont contenus dans une collection qui elle-mme est une sous partie dun autre
objet jusqu lapplication entire Excel (principe des vases communicants)

Modlisation de lconomie et de la Finance Internationales


-7-
2.8 Fentre dexcution

Cette fentre est utile pour vrifier la syntaxe dune variable string par exemple en cas
derreur, car dans certains cas la variable string peut tre une combinaison de variable et de
dclaration fixe qui doivent rpondre un protocole bien dfini (par exemple cest le cas
dune requte dynamique dans une base Access)
Pour accder cette information il faut faire prcder la dclaration de cette variable dun
point dinterrogation. De plus si lon souhaite tablir des traces dune variable MaVariable
travers tout le code pour sassurer du bon droulement, il suffit de placer dans notre code
la syntaxe suivante debug.print MaVariable.

3. Menu Contextuel Insertion

Permet dintroduire des modules, des modules de classe et des Userforms dans vote projet
(un simple clic droit dans la fentre dexplorateur de projet fait trs bien laffaire)

4. Menu Contextuel Dboguage

Modlisation de lconomie et de la Finance Internationales


-8-
4.1 Compile VBA Project
Le premier sous-menu est la compilation. Ce nest quune traduction en langage machine
de votre code afin que la machine puisse linterprter. Une compilation russie ne veut pas
dire que le code nest pas rempli dimperfection.

4.2 Pas Pas dtaille (F8)


Cest le plus utilis des modes de dboguage car cela permet de bien contrler son code est
de visualiser chaque tape les valeurs des variables en cours (excution pas pas).

4.3 Dboguage basculer les points darrts (F9)


Permet de stopper lexcution sur une ligne de code bien dtermine et donc de passer des
tapes et ne vrifier que les zones o est susceptible de se trouver lerreur.

Les autres sous menus ne sont que des redondances de ce qui prcde.

5. Le menu Contextuel outil

5.1 Rfrences
Ce sous menu prsente toutes les rfrences associes a votre projet, par exemple si vous
avez besoin dutiliser des connexions une table Access il vous faudra cocher Microsoft
ADO Ext 2.8 for DLL and Library afin de pouvoir utiliser laide express et les outils
relatifs au base Access. Il est important de noter que sil manque une rfrence votre
projet le dbogueur vous prsentera une fausse erreur dinterprtation sur nimporte quelle
partie du code (non comprhension de la variable de type string par exemple). Dans ce cas
il faut juste aller dans les rfrences et rajouter celle manquante.

5.2 Options
Permet de dfinir des choix pour le paramtrage de quelques fentres, Mode ancrage des
fentres de code ou autres, utilisation de linfo express, info bulle automatique, etc
Il peut tre judicieux de cocher dans longlet diteur la case Dclaration des variables
obligatoires mais on peut aussi rajouter en tout dbut de code lexpression Option
explicit qui aura les mmes consquences

5.3 Proprits de VBAProject


La seule utilisation vraiment intressante est de pouvoir mettre un mot de passe votre
code VBA dans longlet Protection

Et enfin laide en ligne, la touche reine par excellence : F1.

Modlisation de lconomie et de la Finance Internationales


-9-
Chapitre2 Les objets Excel
Il faut se souvenir dune rgle dor, vous ne pouvez influer une proprit dun objet que si
vous avez slectionn cet objet, sinon VB vous affichera des erreurs pas toujours facilement
interprtable. Larborescence des objets Excel se prsente de la manire suivante :
lapplication Excel comporte une collections de classeurs, chaque classeur comporte une
collection de feuilles qui elle-mme rassemble une collections de cellules.

1 - Lobjet Application
Le principal problme de VBA et sa rapidit mais il existe quelques proprits et mthodes
qui permettent damliorer cet inconvnient.

ScreenUpdating=false
Pour des raisons essentiellement de rapidit il peut tre intressant de figer lcran
lorsquon est amen slectionner plusieurs feuilles dans un mme classeur cela permet
dviter les scintillements dus aux changements de feuilles de calcul.

DisplayAlerts = false
Cette proprit permet de supprimer les messages dalertes dExcel tel que ceux renvoys
par Excel lors de la suppression dune feuille par exemple (fentre de validation des
actions).

StatusBar = Message lattention des utilisateur


Lorsque les traitements sont lourds et prennent du temps, il peut tre intressant de laisser
des messages pour signaler aux utilisateurs ce que fait le programme actuellement.

Calculation= xlCalculationAutomatic, ou xlCalculationManual ou


CalculationSemiAutomatic
Cela permet encore dacclrer le processus car il vite que Excel recalcule chaque
rafrachissement les formules toutes les cellules.
.
Dialogs(xlDialogOpen).Show
Permet dafficher toutes les boites de dialogues dExcel (la formulation ci-dessus affiche la
boite de dialogue ouvrir aux utilisateurs.

Run( NomdeMacro , Argument1 de la macro, Argument2 de la macro)


Cette mthode sert excuter une macro ou appelle une fonction. Elle peut tre utilise
pour excuter une macro crite en VBA ou une DLL ou XLL. Nous verrons plus loin quil
existe une autre faon de procder pour activer un code externe dans les macros (fonction
SHELL).

2. Les objects Workbooks

Ce qui faut immdiatement retenir cest que gnralement les noms qui se termine par un
s signifie que cet objet reprsente la collection dobjet et non pas lobjet lui-mme.
Workbooks reprsente donc la collection des classeurs ouverts. Lordre des classeurs dans
la collection est lordre douverture des classeurs. Il ne faut pas confondre lappel

Modlisation de lconomie et de la Finance Internationales


- 10 -
ThisWorkbook et Workbook. Workbook reprsente un classeur actif il faut donc spcifier
celui dont on parle alors que thisworkbook reprsente le classeur actif, cest travers ce
fichier que lon peut grer les procdures vnementielles

2. 1 Les mthodes

Add
Permet dajouter un nouveau classeur la collection. Le classeur cre devient le classeur
actif. On accde aux membres de la collection par un indice workbooks(index) ou le nom
workbooks( Nom du classeur )

Close
Si on ne spcifie pas un classeur alors tous les classeurs composant cette collection seront
ferms.

Open
Ouvre un classeur Excel
Workbook.open(FileNAme,UpdateLink,readonly,Format,Password,WriteResPassword,Ign
oreReadOnlyrecommended, Origin, Delimiter,Editable, Notify, Converter, AddtoMRU)
Seul Filename est obligatoire.

OpenText
Permet douvrir un fichier text

2.2 Les proprits

Lappel des fonctions se fait travers laffectation des variables.

Names
Cest une collection de name cest--dire que cette collection contient toutes les cellules
types contenues dans le classeur actif. Pour accder aux noms de lobjet name, on dclare
une variable MaVariable de type name et on crit MaVariable.name.

FullName
Permet dafficher ou de connatre le chemin du classeur actif

3 Les objects Sheet

La collection Sheets est une collection regroupant tous les onglets dun classeur quelque
soit son type : feuille de calcul (objet worksheet), feuille graphique (objet Chart), etc.
Cest travers cette collection que lon pourra ajouter, supprimer, comptabiliser, dplacer,
cacher, activer des feuilles de tout genre.

3.1 Les mthodes

Add(Before, After, count, type)


Before/after permet de prciser la position o la feuille doit tre ajoute. Largument count
dtermine le nombre de feuilles ajouter.
Vous pouvez aussi ajouter et nommer directement une sheet dans la mme expression
Sheets.Add.Name = NomDeSheet

Modlisation de lconomie et de la Finance Internationales


- 11 -
Delete
Supprime longlet slectionn.

Move(Before, After)
Dplace la feuille en question ( noter que lexpression correcte est : Sheets(index ou
NomDeSheet).Move Before:=Sheets(position voulue)

Visble=xlsheethidden
Masque la sheet dans lobjet workbook mais lutilisateur peut encore la voir dans
Format\Feuille\Afficher\ alors que la formule suivante
Visble=xlsheetveryhidden
Masque la sheet pour lutilisateur, elle nest visible que par le code on peut la faire
rapparatre par Visble=xlsheetvisible

3.2 Fonctions intressantes des objets Sheet :

UsedRange : .rows.count ou .columns.count : indique aussi le numro de la dernire ligne


et de la dernire colonne utilise dans la sheet

4 Les Cellules

4.1 Les fonctions intressantes

Row, Column
Renvoie le numro de ligne ou de colonne de la cellule

End(xlDown, xlUp).row
Indique par exemple la dernire (resp la premire) ligne de la cellule non vide en dessous
(au-dessus) de la cellule slectionne.

End(xlToRight,xlToLeft).column
Indique la dernire colonne non vide droite (resp gauche) de la cellule slectionne.

Le typage des cellules est trs utilis lui aussi car il permet de situer lobjet uniquement
avec le nom associ la cellule. Vous devez slectionner une cellule puis dans la Zone
Zone nom donner un nom votre cellule.

Modlisation de lconomie et de la Finance Internationales


- 12 -
Cette zone permet de
dfinir un nom pour la
cellule slectionne

Ensuite pour accder cette cellule vous devez utiliser soit Range( NomDeCellule )
Ou [NomDeCellule]

CurrentRegion
Indique la zone non disjointe autour dune range de rfrence (ici Macell)
Trs utile si vous voulez travailler dans une zone dfinie ou pour dlimiter une zone de
travail

La zone surligne est la


zone qui correspond
linstruction
MaCell.CurrentRegion

Address
Renvoie ladresse de lobjet slectionn. Ceci simplifie parfois beaucoup les choses et
permet de situer entirement lobjet avec une seule variable.

Offset (Ligne,Colonne)
On se dcale de Ligne et colonne par rapport la range de rfrence.

AutoFit
Ajuste la largeur de colonne et la hauteur en fonction du contenu. Si lon veut
redimensionner la feuille entire il suffit dcrire Cells.Columns.Autofit.

Find et FindNext(what, After, LookIn, LookAt, SearchOrder, SearchDirection,


MatchCase, MatchByte)
Permet de faire des recherches sur llment recherch qui est What, si lon veut que la
recherche soit exhaustive il faut mettre la proprit LookAt xlwhole)

Modlisation de lconomie et de la Finance Internationales


- 13 -
Chapitre 3 : Les variables et constantes
Les variables sont un lment important de la programmation. Elles permettent de stocker
les informations dont vous avez besoin tout au long de votre programme. Dans des
programmes consquents il faut faire attention aux types de donnes choisis car cela est
directement li lespace mmoire allou la machine. Si vous utilisez beaucoup despace
mmoire inutilement cela se rpercutera sur la rapidit de votre programme. Il faut
videmment quil y ait une concordance entre le type de variable dclar et le type de
variable stock.
Je vous conseille de toujours dclarer toutes vos variables car cest la base dun
programme robuste. Pour cela vous devez avant chaque dveloppement faire apparatre la
mention Option Explicit sur la premire ligne en dehors de toute mthode ou fonction.
Ces mots cls de VB impliquent la dclaration explicite de toutes les variables sinon VB
gnrera des erreurs lors de la compilation ou mme lors dune excution partielle.
Une deuxime solution est daller sous Outil/Options et de cocher Dclaration
des variables obligatoires , et de vrifier si les autres options daide la programmation
sont bien rfrences (complment automatique des instructions et info express
automatique par exemple).

Modlisation de lconomie et de la Finance Internationales


- 14 -
1. Les chanes de caractres (variable de type String)

Dim MaVariable as string

Pour affecter une expression qui ne rsulte pas dune fonction ou dune proprit une
variable de type string il faut la placer entre guillemets (chane de caractre constante)
MaVariable = Facult, Paris XIII
Sinon on peut directement laffecter celle-ci (proprit name dune feuille ou dun
classeur)
MaVariable = Activeworkbook.name
Il est possible de mixer les expressions et les variables dans une mme expression de type
string avec loprateur de concatnation & de la faon suivante :
MaVariable = Ce Classeur est enregistr sous : & Activeworkbook.path
On peut aussi utiliser loprateur + mais je le dconseille.

Ces variables sont dites de longueur variable et peuvent tre constitues denviron deux
milliards de caractres, dans un souci dconomie de mmoire et donc de performance il est
possible de limiter le nombre de caractres (de 1 65 400 exactement) par la syntaxe :
Din Mavariable as string * longueur avec longueur = nombre de caractres voulus

Si Mavariable reoit une chane de caractre suprieur longueur, les lments partir de
longueur +1 ne seront pas pris en compte, celle-ci sera rogne. Si Mavariable reoit une
chane de caractre infrieur longueur alors VBA comblera la chane de caractres avec
des espaces vides.

Il y a beaucoup de fonctions ou de mthodes relatives la manipulation des variables de


type String, les plus usuelles sont les suivantes :

Trim(MaVariable)
Supprime les espaces vides de MaVariable trs utile si MaVariable est insre lintrieur
dun Select Case.

Ucase(MaVariable)
Met Mavariable en majuscule, cela permet de se dlester du problme de la casse rentr par
lutilisateur.

Len(Mavariable)
Permet de connatre la longueur dune chane de caractres, cette fonction retourne une
valeur numrique de type Long.

Mid(Mavariable, dbut, longueur)


Permet de connatre les caractres qui se situent entre dbut et longueur dans la chane
Mavariable, retourne une valeur de type variant (string).

Instr(Dbut,String1,String2,TypeComparaison)
Permet de savoir si string2 est compris dans string1 en commenant par le debut ime
caractre, cette fonction retourne une variable de type Long.(= 0 signifie que String2
nappartient pas String1

Modlisation de lconomie et de la Finance Internationales


- 15 -
Left (MaVariable, longueur)
Retourne une variable de type variant contenant tous les caractres de la string MaVariable
en partant sur la gauche jusqu longueur.

Right (MaVariable, longueur)


Retourne une variable de type variant contenant tous les caractres de la string MaVariable
en partant de la droite jusqu longueur.

StrComp(String1, String2, TypeComparaison)


Permet de savoir si la string1 est alphabtiquement suprieur ou infrieur la string2.
Attention : Cette fonction ne rpond pas la nomenclature internationale ASCII mais la
nomenclature Microsoft (par exemple Microsoft place le underscore avant la lettre A alors
que selon la norme ASCII il est situ aprs). Permet de faire des recherches acclres dans
des listes tries au pralable.

2. Les valeurs de type numriques :

Type de Donnes Valeur acceptes Mmoire


Byte Nombre entier compris entre 0 et 255 1 octet
Integer Nombre entier compris entre -32768 et 32 767 2 octets

Long Compris entre -2.147 M et 2 147 M 4 octets


Single Nombre virgule flottante compris entre 4 octets
E(-45) et E(38)
Double Nombre virgule flottante compris entre 8 octets
E(-324) et E(308)

Au mme titre que les variables de type string vous pouvez affecter une variable de type
numrique des rsultats de fonctions ou de proprit ainsi que des formules.
VB intgre de nombreuses fonctions permettant de manipuler des valeurs numriques, en
voici quelques unes :

Abs(nombre) :
Renvoie la valeur absolue dun nombre

Int(nombre) :
Renvoie la partie entire dun nombre

RoundUp(nombre,prcision)
Arrondie le nombre au nombre suprieur prcision chiffre aprs la virgule
Si nombre = 12.137, RoundUp(12.137,2)=12.14. Il existe la mme fonction avec
RoundDown.

Gnralement nous pouvons accder toutes les fonctions excel VB en utilisant


WorkSheetFunction.(Min, Max, etc..)

Modlisation de lconomie et de la Finance Internationales


- 16 -
3. Les variables de type Date

Syntaxe
Dim MyDate as date

Ce type de variable peut recevoir des dates comprises entre le 1er janvier 100 et le 31
dcembre 99999 Elles sont stockes sous 8 octets.
La aussi il existe de nombreuses fonctions permettant de manipuler des dates.

Year(MyDate), Month(MyDate), Day(MyDate)


Retourne respectivement lanne de date, le mois et le jour.

Now() ou today()
Retourne la date daujourdhui.

DateDiff(intervalle, date1, date2)


Permet de connatre le nombre dintervalles entre date1 et date2. Lintervalle correspond
lunit de temps utilis pour calculer la diffrence entre date1 et date2. Par exemple si on
souhaite le nombre de jour DateDiff(d,date1,date2)

Weekday(MyDate)
Renvoie un variant qui correspond au jour de la semaine
Weekday(MyDate)=1 , signifie que Mydate est un dimanche et ainsi de suite jusquau
samedi. On peut se servir de cette fonction pour viter de comptabiliser les weekends
Mydate = if(weekday(today()-1=1 ; today()-3 ;today()-1) on exclut de mydate les samedi et
dimanche.

DateAdd(Intervalle, nombre, Mydate)


Permet dajouter la variable Mydate, le nombre sur lunit intervalle choisi, renvoie une
variable de type Date.
Par exemple DateDiff(d,3, 12/25/2006 ) = 12/28/2006

4. Les variables Boolennes et constantes

Ce type de variables est utilis pour stocker le rsultat dexpression logique. Elle renvoie
donc les valeur true ou false
Dim Mavariable as boolean

Elle peut tre aussi le rsultat dune fonction qui renvoie une variable de type integer dans
ce cas 0 sera la valeur false et 1 la valeur true. Gnralement ces variables sont utilises
dans les boucles de rptition while

La syntaxe pour les dclarations de constantes est un peu diffrente, il faut noter que par
exemple les tableaux nacceptent pas dautres types pour la dfinition de la dimension.
Const Mavariable as Integer = 5
Une fois quune valeur a t dfinie une constante celle-ci ne peut-tre modifie

Modlisation de lconomie et de la Finance Internationales


- 17 -
5. Les variables de type Variant

Elles remplacent nimporte quelles types de donnes et peuvent tre converties


automatiquement dun type lautre, tant que sa valeur est compatible avec le type vers
lequel sopre la conversion. Elles sont donc trs pratiques puisquelles sont par nature
multi types mais linconvnient cest quelles sont trs gourmandes en matire de mmoire
(16 octets pour les valeurs numriques et 22 pour les valeurs de chanes). Dans la syntaxe
de dclaration vous pouvez omettre le type associ mais je vous le dconseille.
Dim MaVariable
Syntaxe correcte : Dim MaVariable as variant

6. Les variables de types Object

Elles font rfrence un objet que vous pouvez spcifier et occupent 4 octets en mmoire.
La syntaxe est un peu diffrente car en plus de la dclaration de type il faut lui affecter un
objet prcis par lusage du mot cl Set
Dim MaVariable as object
Set MaVariable = Expression
O expression est une expression renvoyant un objet de lapplication.
Pour annuler laffectation un objet et librer la mmoire alloue cet objet, il faut affecter
cette variable objet la valeur nothing avec linstruction suivante :

Set MaVariable = Nothing

7. Les variables de type tableaux

Les tableaux ne sont que des vecteurs de donnes. On peut donc vectoriser toutes variables
y compris des tableaux.
A noter que lon ne peut pas dfinir les variables tableaux dans les modules de classe en
proprit public, il faut dans ce cas dfinir des objets de type Collection. Il existe une
contrainte dans lutilisation de tableaux, cest que la dimension des tableaux doit tre
exprime par une constante, ce qui en cas de non connaissance au pralable du nombre
dobjets peut-tre prjudiciable. Normalement la dimension des tableaux est initialise
zro mais lon peut modifier cette rgle en plaant en dehors de toute procdures
lexpression
Option base 1
La syntaxe est la suivante

Dim Montableau (10) as string, variant, Types Personnaliss, etc


Ce tableau contiendra donc 11 lments.

Si lon ne connat pas le nombre dlments, la premire solution est dans un premier temps
de comptabiliser et stocker cette information dans une variable et de redimensionner le
tableau avec linstruction :

Redim MonTableau(n) as String

Modlisation de lconomie et de la Finance Internationales


- 18 -
Nous pouvons faire des tableaux dimension dynamique mais ATTENTION seule la
dernire dimension du tableau peut-tre redimensionne sinon on perd les informations
contenues dans le tableau (tableau 3 dimensions, seules la 3ime dimension peut-tre
redimensionne).

La syntaxe est la suivante :


Dim Montableau() as integer : Tableau de type entier. Les parenthses signifient que cest
un tableau

Redim Preserve MonTableau(i) : on peut redimensionner la dernire dimension du tableau


chaque itrations laide de la variable i

8. Les variables de type personnalises

Ces variables sont intressantes car elles permettent de regrouper diffrents types de
donnes sous un mme objet. Ces variables sadaptent bien dans le cas ou lon souhaite
dfinir un objet dont les composantes peuvent avoir plusieurs formes. Lexemple
gnralement utilis est celui relatif une personne. A travers lobjet Personne de type
Type. On peut dfinir son adresse (string), son ge (integer), sa couleur de cheveux, etc
Attention : On ne peut pas dfinir ce type de variable dans un module de classe ou dans
une procdure, on doit le dclarer dans la section des dclarations d'un module. Tout code
situ en dehors d'une procdure est dit de niveau module . Les dclarations doivent
apparatre avant les procdures.

La syntaxe est la suivante :


Type Personne
MonAge as Byte
MonAdresse as string
End type

Pour accder aux proprits de ce type il suffit de dclarer la syntaxe suivante


Dim MaVariable as Personne
Donc pour modifier lge dune personne, on crira MavAriable.MyAge =20 et
MaVariable.adresse = monAdresse.. .
On touche un peu la programmation de type objet,
A signaler quil existe une fonction permettant de savoir le type dune variable mais elle
na que trs peu dutilit (TypeName(MaVariable))

9. Conversion de type de donne entre elles


On peut tre oblig de forcer le mode de donne des variables pour que le systme ne les
rejette pas.

Fonctions Dfinition
CByte(mavar) Convertit mavar en une variable de type Byte
CDate(mavar) La variable mavar sera de type Date
CDbl(mavar) Convertit mavar en une variable de type Double
CStr(mavar) Convertit mavar en une variable de type String

Modlisation de lconomie et de la Finance Internationales


- 19 -
Il en existe dautres mais je laisse le soin aux personnes intresses de consulter laide en
ligne de VB

10. Porte et dure de vie des variables

Les variables sont caractrises par leur accessibilit dans le programme ce que lon appelle
leur porte et leur dure de vie. En effet une variable peut conserver sa valeur tant quune
procdure sexcute et tre rinitialise lorsque la procdure est termine ou conserver sa
valeur entre les diffrents appels de procdures.

10.1 Porte de niveau procdure


Ce sont les variables dclares lintrieur dune procdure sans autres formes de
dclarations que celle-ci :
Dim Mavariable as TypeChoisi

10.2 Variables Static


Une variable conserve sa valeur tant que le programme sexcute dans son champ de
porte. Si le programme sort de la procdure les variables propres celles-ci sont
automatiquement rinitialises, sauf si on a plac le mot cl Static avant la dclaration de
celle-ci :
Static MaVariable as type
Elle conserve sa valeur entre chaque appel

10.3 Porte de niveau Module

Elles doivent tre dclares lextrieur de toutes fonctions ou procdures, dans la section
dclaration dun module. Elles peuvent tre prives ou publiques. Si on les dclare de
niveau module avec le mot cl Private elles ne seront lisibles que par les procdures du
module, si on les dclare par le mot cl Public cela signifie qu'elles seront disponibles pour
toutes les procdures de tous les modules de toutes les applications.

Public/Private MaVariable as Type.

Modlisation de lconomie et de la Finance Internationales


- 20 -
Chapitre 4 Programmation Squentielle et boucle
ditrations
Un programme est compos de module, de module de classe permettant de structurer des
objets et des Userforms. (click droit sur ThisWorkbook dans la fentre vierge de
lexplorateur de projet)

Il faut savoir que ce nest pas absolument ncessaire de connatre la syntaxe dun appel de
fonction car il y a toujours laide en ligne et lenregistreur de macro (Outil/Macro/Nouvelle
Macro) pour nous tirer dun mauvais pas mais le code issu dun enregistrement nest jamais
trs efficient il faut ladapter la situation.
Dans un premier temps nous allons voir lutilisation du code dans un module

1. Les diffrents types de procdures

Il y a trois formes de dclarations


Les procdures de types Sub
Les procdures de types Function
Les procdures de types Property

1. 1 Les procdures Sub

Les procdures Sub sont une srie dinstructions entoures des mots cls
Sub NomDeMaProcedure([ByVal] | [ByRef] arg1 as type, [ByVal] | [ByRef] |
[Optional]arg2 as type)
Instructions
End sub

On peut passer des arguments toutes ces procdures en valeur ou en rfrence ou en


mode optionnel, si on ne spcifie rien le mode par dfaut est le mode ByRef .Le mode
ByVal signifie que largument pass la procdure pourra prendre diffrentes valeurs
lintrieur de celle-ci mais il sera rinitialis lors de sa sortie sa valeur dappel. En fait

Modlisation de lconomie et de la Finance Internationales


- 21 -
lors dun passage par valeur cest la copie de largument qui est passe et non pas ladresse
et comme la porte de cette copie nest effective qu lintrieur de la procdure il est
normal que cette variable ne soit pas affecte dans la procdure appelante.

Exemple de passage de paramtre une fonction


Sub essai
Dim i as integer
i=2
Call passageparametre(i) OU passageparametre i
Msgbox i
End sub

Sub passageparametre( ByVal u as integer)


u=u+3
end sub

Si vous excutez lexemple ci-dessus, la valeur retourne par msgbox sera 2, alors que si
vous omettez linstruction ByVal elle sera de 5.
Le mode Optional signifie que cette valeur lors de lappel de la procdure peut-tre omis,
mais il doit tre situ en dernire position dans la liste des arguments. Cela permet de
surcharger une procdure. Lappel de cette procdure se fait grce lemploi du mot cl
Call et la liste des arguments doit tre mis en parenthse OU Call peut tre omis mais dans
ce cas les arguments ne doivent pas tre mis entre parenthses
Les fonctions Sub ne retournent pas de valeur, ni dobjet elles sont faites pour
excuter une tche.

1.2 Les procdures Functions

Ces procdures sont une srie dinstructions excutant une tche dtermine au sein du
projet et renvoyant une valeur ou un objet qui sera ensuite exploit au sein du programme.
Elle est structure de la faon suivante

Dclaration dune fonction


Function NomDeFonction( Liste darguments) as type
Instructions
NomDeFonction = expression
End function

Dans le cas de passage dobjet par une fonction il faut prcder celle-ci du mot cl SET.
Function() as type permet de spcifier le type de la valeur retourne par la fonction, mme
remarque que prcdemment pour la liste darguments et donc mme consquences. On
pourra aussi lutiliser comme nimporte quel fonction Excel en faisant
Insertion/functions/Liste personalise

La fonction ci-dessous aura les mmes consquences que la procdure ci-dessus.

Utilisation dune fonction


Function passageparametre( ByVal u as integer)
u=u+3
passageparametre =u

Modlisation de lconomie et de la Finance Internationales


- 22 -
End Function
Je ne dvelopperai pas les fonctions Property Get,Set et Let dans cette partie car ce sont des
fonctions majoritairement utilises dans les modules de classe. Pour rsumer se sont des
fonctions qui permettent de dfinir des proprits en mode de lecture, criture.et de
retourner la valeur de la proprit en question, cest ce quon appelle lencapsulation.

2. Les Structures de contrle VBA

2.1 Les boucles

Les boucles dinstructions servent amliorer la lisibilit de votre code et rpter une
srie dinstruction. Il en existe plusieurs

La boucle While Condition .Instructions .Wend


Cette structure permet de rpter une srie dinstruction tant quune condition spcifique est
remplie, cest--dire tant que la condition est vraie. Il nest pas possible de sortir de cette
instruction tant que la condition nest pas remplie. A noter que dans cette structure de
rptition les instructions peuvent ne pas tre effectues

While Condition instruction Next


While Condition
Instructions
Wend

La boucle For .. Instruction Next


Cette structure est utile lorsquon connat le nombre dlments de rptition. A noter quil
existe une instruction permettant de sortir dune boucle for prmaturment Exit For

For instruction Next


For i = 1 to N step Pas
Instructions
Next i

La variable i (appele variable dincrment) est chaque passage dans la boucle augmente
de Pas. Si largument Step Pas est omis la variable est incrmente de 1 par dfaut.

La boucle Do..Loop
Mme chose que pour linstruction While mais dans ce cas il existe une instruction qui
permet de sortir de cette Loop, il sagit de Exit Do

Il existe plusieurs dclarations

Instructions Do ..Loop pouvant ne pas tre effectues


Do until condition Do while Condition
Instructions Instructions
Loop Loop

Modlisation de lconomie et de la Finance Internationales


- 23 -
Instructions Do.Loop effectues au moins une fois
Do Do
Instructions. Instructions
Loop while condition Loop until Condition

La boucle For Each element In Collection .. Instructions Next


Cette structure permet de se dplacer lintrieur dune collection
Le code ci-dessous permet dappliquer une police de couleur rouge lensemble des
cellules composant la slection

Exemple
Dim MyRange as range

[celluleType].CurrentRegion.Select
For each MyRange in Selection
MyRange.Font.ColorIndex=3
Next

2.2 Les boucles Conditionnelles

La boucle If Then Else


Cette structure permet de spcifier diffrentes options dexcution dans une procdure en
fonction de ltat des variables ou de lapplication

Exemple
If Condition Then
Srie dinstructions1
Else
Srie dinstructions2
End if

Les boucles conditionnelles indtermines

If .Then.elseif then.end if

Exemple
If Condition1 then
Instruction1
Elseif condition2 then
Instruction2
Else
Instruction3
End if

Modlisation de lconomie et de la Finance Internationales


- 24 -
Linstruction else dans ce cas ne porte pas de condition car cest instruction3 qui agira
comme instruction de dfaut.

Select Case
Cette structure permet denvisager diffrentes valeurs pour une mme expression et de
spcifier les instructions selon chaque cas envisag.

Exemple dinstruction Select Case


Select Case Expression
Case valeur1
Instruction1
Case valeur2
Instruction2
Case valeur3
Instrcution3
Case else
Instruction4
End Select

Modlisation de lconomie et de la Finance Internationales


- 25 -
Chapitre 5 Les Tableaux croiss dynamique : Les pivot
Tables
Lorsque vous avez des tches effectuer il est prfrable de travailler directement avec les
outils Excel plutt que de faire des choses bricoles dans son coin avec des boucles
dinstructions dans tous les sens. Cest le cas lorsque vous avez beaucoup de donnes
manipuler en un minimum de temps, les pivot tables en terme dorganisation et de rapidit
sont trs performantes mais le souci nous le verrons cest que les pivot tables ne sont pas
exempts de bugs et de contre sens.

1. Premire approche

Si vous essayez de passer par lactivateur de macro automatique, voici ce que donnera le
code gnr par Excel, ce code nest pas trs efficient mais il permet au moins de visualiser
les objets utiles pour lutilisation dune pivot table (PivotFields, AddDataFields,
CurrentPage,etc). Lennui cest que lon ne peut pas crer ce tableau crois dynamique
facilement en tant quobjet lui-mme et il ny a pas de variables dclares.

Macro vue par le gnrateur de code automatique


Sub PremiereMacro()

Range("A1").Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Datas!R1C1:R1408C20").CreatePivotTable TableDestination:="", TableName:= _
"Tableau crois dynamique1", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
With ActiveSheet.PivotTables("Tableau crois dynamique1").PivotFields( _
"Portfolios")
.Orientation = xlRowField
.position = 1
End With
ActiveWindow.SmallScroll Down:=-27
With ActiveSheet.PivotTables("Tableau crois dynamique1").PivotFields( _
"Nominal Activity")
.Orientation = xlPageField
.position = 1
End With
With ActiveSheet.PivotTables("Tableau crois dynamique1").PivotFields("Center")
.Orientation = xlPageField
.position = 1
End With
ActiveSheet.PivotTables("Tableau crois dynamique1").AddDataField ActiveSheet. _
PivotTables("Tableau crois dynamique1").PivotFields("Delta"), "Somme de Delta" _
, xlSum
ActiveSheet.PivotTables("Tableau crois dynamique1").PivotFields("Center"). _
CurrentPage = "KM"

End Sub

Modlisation de lconomie et de la Finance Internationales


- 26 -
Voici le rsultat de la macro du code ci-dessus

PivotCaches (Mthode des workbooks)


Cet objet est une collection qui reprsente le cache de mmoire des rapports de tableau
crois dynamique d'un classeur. Chaque cache de mmoire est reprsent par un objet
PivotCache. Personnellement je nutilise pas cette mthode pour crer des tableaux croiss
dynamique car ensuite il faut savoir manipuler cette donne dans le cache de mmoire si on
veut modifier des paramtres.

PivotTableWizard (Mthode des feuilles de calculs)


Elle doit recevoir plusieurs paramtres
SourceType Argument facultatif cela reprsente la source des donnes du rapport, il en
existe de plusieurs types :

xlConsolidation. Plusieurs plages de consolidation


xlDatabase. Liste ou base de donnes Microsoft Excel
xlExternal. Donnes d'une autre application
xlPivotTable. Mme source qu'un autre tableau crois dynamique

SourceData : argument de type variant facultatif Il peut s'agir d'un objet Range, d'un
tableau de plages ou d'une constante de texte reprsentant le nom d'un autre rapport. Pour
une base de donnes externe, SourceData est un tableau de chanes contenant la chane de
requte SQL.

TableDestination : objet de type variant facultatif, sil nest pas spcifi celui-ci sera la
cellule active.

TableName : Facultatif, elle indique le nom du rapport crois dynamique.

Dans lexemple ci-dessous, DataSheet est une worksheet, ZoneTable est un objet Range
(ensemble de cellules spcifies) et Mytable sera le nom de mon tableau

Exemple de Tableau crois dynamique


DatasSheet.PivotTableWizard SourceType:=xlDatabase, SourceData:=ZoneTable,
TableDestination:=tempsheet.Range("A3"), TableName:="MyTable"

Modlisation de lconomie et de la Finance Internationales


- 27 -
PivotTable
Cet objet reprsente un rapport de tableau crois dynamique dans une feuille de calcul, il
est membre de la collection PivotTables

Pour associer le nom choisi Mytable une pivot table on doit dfinir la syntaxe ci-dessous :

Dclaration de Tableau crois dynamique


Dim Mytable as PivotTable
Set Mytable = tempsheet.PivotTables( MyTable )

Car MyTable est une pivotTable appartenant la collection PivotTables de la sheet


TempSheet.
Et ensuite pour retrouver toutes les proprits dune pivotTable, ou dun objet en gnral on
encadre le nom de lobjet avec les mots cls With et End with
With Mytable
Instructions
End with

2. Mthodes et proprits des pivotTables

Pour construire une pivot Table, il faut bien sr que la zone qui a servi de point de dpart
possde des noms den-tte de colonne. Une fois la pivotTable dfinie il faut bien sr lui
donner des attributs avec laide de quelques proprits et mthodes.

PivotFields(nameChamp)
Cette mthode renvoie un objet qui reprsente soit un seul champ de tableau crois
dynamique, soit une collection de champ visibles et masqus. Cela permet en quelque sorte
de spcifier au pralable le champ sur lequel nous allons travailler.

.Orientation=xlPivotFieldOrientation
Cela rajoute le champ NameChamp la pivotTable lendroit spcifi, il en exist de
quatres types principaux.
xlPageField : rajout en en-tte de Pivot
xlRowField : rajout en ligne
xlColonneField : rajout en colonne
xlDataField : rajout dans le zone Data

AddFields RowFields :=Array(Name1 , Name2 ), ColumnFields:=Array(C1,C2),


PageFields :=Array(P1,P2)
Cette mthode permet de structurer toute la pivotTable sur une seule ligne dinstruction

AddDataField (PivotFields(NomChamp), Caption(=titre), fonction associe ce champ)


Cette mthode permet dassocier la PivotTable un champ dans la zone Data. Il faut lui
dfinir un champ, un titre associ et une fonction qui sera applique aux donnes : Sum,
Max, min etc

Modlisation de lconomie et de la Finance Internationales


- 28 -
Mais nous pouvons aussi crire :

DataPivotField.Calculation = xlPivotFieldCalculation , ce champ peut prendre toutes les


valeurs rfrences ci-dessous :

xlDifferenceFrom
xlIndex
xlNoAdditionalCalculation
xlPercentDifferenceFrom
xlPercentOf
xlPercentOfColumn
xlPercentOfRow
xlPercentOfTotal
xlRunningTotal

Il est important de noter que ces proprits ne sont valides que pour des champs de
donnes (Zone Data)

Pour naviguer dans ces champs, il faut dfinir maintenant des objets PivotItem avec la
syntaxe suivante :
Dim MyPvtItem as PivotItem

Si lon veut naviguer par exemple dans le champ ChampName il faut utiliser :

Syntaxe utilise
For each MyPvtItem in .PivotFields(ChampName).PivotItems
Instructions
Next MyPvtItem

Nous pouvons aussi utiliser une autre mthode qui consiste se servir des proprits
RowRange, ColumnRange, PageRange
Ces proprits permettent de naviguer respectivement dans les lignes, les colonnes et les
en-ttes de page du tableau crois dynamique. Elles possdent toutes des proprits propres
comme la fonction Count qui donne le nombre de ligne, de colonne et den-tte.

ATTENTION les proprits VisibleItems et HiddenItems sur les pivotFields ne semblent


pas fonctionner, lorsquon les utilise elles nous retournent les mmes valeurs que pour la
proprit PivotItems.

ColumnGrand
Cette proprit a la valeur True si le rapport de tableau crois dynamique affiche des totaux
gnraux de colonnes, le type de donne est un boolean (true, false)

RowGrand
Cette proprit a la valeur True si le rapport de tableau crois dynamique affiche des totaux
gnraux de lignes, le type de donne est un boolean (true, false)

Modlisation de lconomie et de la Finance Internationales


- 29 -
PivotSelect NomChamp , xlLabelOnly
Cette mthode slectionne une partie d'un rapport de tableau crois dynamique

GetData Et GetPivotData
Ces deux mthodes permettent de rapatrier des donnes dans la pivot Table par rapport
des critres de slections choisis. La syntaxe est la suivante :
GetPivotData(Caption,, champ1 , donne1, champ2 ,donne2)

ASTUCE
Si vous ne voulez pas avoir des sous totaux de ligne dans votre tableau crois dynamique, il
faut pour chaque Champ mettre dans la proprit SubTotals 12 fois false . Le code pourrait
tre le suivant :

Astuce
With MyTable
.PivotFields("Champ1").Subtotals = Array(False, False, False, False, False, False,
False, False, False, False, False, False)
End With

3 Les Graphiques (Charts) et les Objets Graphiques


(ChartsObjects)

Les objets Charts sont des feuilles graphiques (alors que les WorkSheets sont des feuilles
de calculs Excel). Pour ajouter une feuille graphique votre classeur actif, il suffit comme
pour le cas des feuilles de calcul de se servir de la mthode Add sur lobjet Workbook.

Rajout dun graphique


Activeworkbook.Charts.Add

Alors quun objet ChartObjects est aussi un graphique mais il est incorpor dans une
feuille de calcul (il appartient donc lobjet Worksheet). Nous allons voir que nous
pouvons passer de lun lautre par lusage dune mthode. Les objets Charts sont dfinis
principalement par lobjet SriesCollection qui contient toutes les Sries du graphique et les
Sries sont elles-mmes dfinies par la collection Points .

3.1 La mthode principale:

La mthode ci-dessous permet de fabriquer de toute pice un graphique, elle est issue dun
objet Chart. Par cette mthode on ne matrise pas les SriesCollection.

.ChartWizard(Source, Gallery, Format, PlotBy, CategoryLabels, SeriesLabels,


HasLegend, Title, CategoryTitle, ValueTitle, ExtraTitle)

Source : Elle spcifie la plage de donne ncessaire llaboration du graphique. Il vaut


mieux mettre au pralable cette donne dans une variable Range. A noter que lon peut
aussi dfinir la plage de donne source du graphique par la mthode SetSourceData

Modlisation de lconomie et de la Finance Internationales


- 30 -
Gallery dfinit le style de graphe que lon souhaite.(xlChartType)
PlotBy : Permet de spcifier si les donnes prendre en compte sont en lignes ou en
colonnes xlRows ou xlColumns

Title : Titre du graphique


CategoryTitle : Titre de laxe des abscisses
ValueTitle : Titre de laxe des ordonnes
ExtraTitle : Titre de laxe des sries pour les graphiques 3D

SetSourceData(Source, PlotBy)
Voir la dfinition prcdente.

Location(Where, Name)
Permet de passer dun objet ChartsObject un objet Charts et vice-versa.

Srie et SriesCollection
Cest lobjet principal des graphes. La collection SeriesCollection reprsente toutes les
sries du graphique. On peut donc ajouter une srie laide de la mthode Add.

NewSeries
Cette mthode permet de rajouter une srie la Collection SriesCollection. A mon sens
cette mthode est privilgier par rapport aux autres.

Extend (Source, RowCol :=xlrows/xlcolumns, CategoryLabel :=true/False)


Cette mthode permet de rajouter des points la SriesCollection
RowCol spcifie si les nouvelles valeurs se situent dans les lignes ou dans les colonnes de
la plage source indique.
CategoryLabel = True signifie que la premire ligne ou colonne contient le nom des
tiquettes de catgorie

Modlisation de lconomie et de la Finance Internationales


- 31 -
Chapitre 6 : Les Feuilles VBA ou UserForms

Les feuilles VBA sont un point de programmation na pas ngliger car elles donnent une
allure plus professionnelle vos dveloppements et permettent une interaction entre
lutilisateur final et le code. En effet les feuilles sont des zones dans lequel vous pouvez
mettre des activeX tels que des cases cocher, des zones de texte ou des boutons de
commande. Lutilisation des feuilles VBA savre utile dans le cas o lon souhaite passer
des informations avec un certain formalisme notre code, par exemple laide dune
Listbox nous pouvons dlimiter le choix des utilisateurs ou par lintermdiaire de cases
cocher dont nous matrisons les effets.

1 - Prsentation de la Fentre des UserForms

Nous retrouvons nouveau lorganisation habituelle, savoir la fentre de projet, de


proprit mais ce qui est nouveau cest que nous navons plus la fentre de code mais la
UserForm ainsi que la boite outil qui accompagne linitialisation de la userform. Pour
linstant la fentre ci-dessous est vide, nous devons lui donner un nom physique (proprit
Name) qui sera repris par la suite dans le code pour faire rfrence celle-ci et un nom
usuel qui est la proprit Caption tel que le visualiserons les utilisateurs.

Modlisation de lconomie et de la Finance Internationales


- 32 -
2 .La Boite outils

Outil Slection Contrle Label

Contrle TextBox Contrle ComboBox

Contrle ListBox Contrle CheckBox

Contrle OptionButton Contrle ToggleButton

Contrle Frame Contrle Commande Button

Contrle TabStrip Contrle MultiPage

Contrle ScrollBar Contrle SpinButton

Contrle Picture Contrle RefEdit

Je ne vais pas numrer tous les types ci-dessus, seulement les plus usuels

2.1 Le contrle Label (intitul)


Il permet de placer un intitul sur la feuille. Il sert gnralement placer une tiquette
ct dun contrle ne possdant pas cet attribut

2.2 Le contrle TextBox


Ce contrle permet de placer sur la feuille une zone de texte ou lutilisateur pourra saisir
des informations, cest en quelque sorte lquivalent de la fonction Inputbox .Cette fonction
permet une interaction dynamique avec lutilisateur, la valeur renvoye est de type String..

InputBox "Rentrer l'information", "utilsation"

Modlisation de lconomie et de la Finance Internationales


- 33 -
La fonction Msgbox permet de laisser des messages varis aux utilisateurs, la valeur
retourne par les diffrents boutons est de type Integer.

MsgBox "essai de la fonction msgbox", vbCritical, "Avertissement"

2.3 Contrle Button


Permet une mise en action de votre userforms.

2.3 Contrle ListBox


Cette zone de liste permet dafficher des options parmi lesquelles lutilisateur peut effectuer
des slections (les proprits dune liste box permet deffectuer une ou plusieurs slections)

2.4 Contrle ComboBox


Ce contrle est trs proche dune ListBox puisquil permet lutilisateur de faire un choix
parmi un ensemble de slection mais il peut aussi rentrer une valeur de son choix.

2.5 Les contrles Options button


Les contrles OptionButton permettent de proposer lutilisateur un choix parmi plusieurs
options. Lorsque plusieurs contrles OptionButton sont associs, seul lun dentre eux
peuttre activ, lactivation dun bouton entrane linactivation des autres.

2.6 Les Contrles frames


Le contrle Frame permet de placer un cadre prsentant un intitul sur une feuille afin dy
placer des contrles. Il permet de faire une distinction harmonieuse entre les catgories de
contrles

Modlisation de lconomie et de la Finance Internationales


- 34 -
2.7 Exemple
Les feuilles Excel ne sont que des userform optimises avec des contrles et du code
rpondant aux tches de lutilisateur.

Contrle TextBox Contrle MultiPage

Case cocher

Contrle Frame

Contrle Label

Option button

Contrle Commande
Bouton

3 Utilisation des userforms

3.1 Procdure dutilisation

Je ne vais donner ici que les principales fonctions ncessaires lutilisation des userforms.
Cest un schma de procdure dutilisation de ce genre de feuilles personnalises. Il faut
avant toute chose donner un nom notre feuille personnalise (proprit (name) de la
userform par exemple MyFeuillePerso), ensuite il faut placer les contrles souhaits dans
notre feuille et leur attribuer le code ncessaire leur utilisation.

Load MaFeuillePerso
Permet une mise en mmoire de la feuille dans notre projet

MaFeuillePerso.Show
Permet de visualiser lcran la feuille finie

Modlisation de lconomie et de la Finance Internationales


- 35 -
MaFeuillePerso.Hide
Permet de cacher la feuille lutilisateur mais ne libre pas la mmoire alloue la feuille

Unload MyFeuillePerso
Cette fonction libre la mmoire de lordinateur. Une fois cette mthode invoque il nous
est plus possible de faire apparatre nouveau cette feuille moins de la recharger en
mmoire, cette fonction est invoquer uniquement en fin de procdure.

3.2 Fonction dune ListBox

De nombreuses fonctions permettent de manipuler les lments dune listbox.

.AddItem Moi ou NomDeVariable


Cette fonction peut-tre utilise si on a pris soin au pralable dtre dans la ListBox, on y
accde avec la syntaxe suivante :
MaFeuille.MaListeBox.AddItem Moi

ListCount
Renvoie le nombre d'entres de liste d'un contrle. Si aucun lment n'est slectionn, la
valeur de la proprit ListCount est 0.

ListIndex
La proprit ListIndex contient un index de la ligne slectionne dans la liste. Les valeurs
de la proprit ListIndex sont comprises entre 1 et le nombre total de lignes de la liste
moins 1 (c'est--dire, ListCount 1).

RemoveItem
Permet de retirer un membre de la listBox partir de son ListIdex, si vous avez incrment
une variable i qui parcourt lensemble des lments de votre ListBox alors la syntaxe global
est :
MaUserForm.MaListBox.RemoveItem i

RowSource
Permet de spcifier une source dans un fichier Excel mais cette source nadmet pas lobjet
Range, il faut slectionner la feuille Excel o se trouve les donnes au pralable et ensuite
lui affecter les valeurs
RowSource = A1 :A3
Ou directement dans la fentre Proprit RowSource Feuil1 !a1 :a3

Selected
Renvoie ou dfinit l'tat de slection des lments dans un contrle ListBox
Si vous avez incrment une variable i qui parcours lensemble des lments de votre
ListBox alors la syntaxe global est : MaUserForm.MaListBox.Selected (i)

Modlisation de lconomie et de la Finance Internationales


- 36 -
Chapitre 7 : Les QueryTables et objet ADODB

Dans ce chapitre je ne vais pas rfrencer toutes les fonctionnalits des objets DAO (Data
Access Object) ou ADODB (ActiveX Data Object) car ce serait trop long mais juste vous
donner des bases afin dexploiter des donnes contenues dans des bases ACCESS et de
savoir les exporter sous Excel.
Nous verrons les tapes successives effectuer afin dobtenir des informations contenues
dans une table :
- Il faut avant tout tablir la rfrence avec les objets ADO
- Il faut tablir une connexion avec la table
- Dfinir un objet recordset qui va contenir les informations

1 Rfrence des objets ADO

Nous en avons dj parl en prambule de ce cours, lorsque nous souhaitons faire des
dveloppements avec une source externe il faut tablir une rfrence (ou un lien) entre ces
objets et Excel. Celui-ci se fait travers le champ Outils\Rfrences (ici il sagit de cocher
Microsoft ActiveX Data Objects 2.8 library ou une version antrieure)

Modlisation de lconomie et de la Finance Internationales


- 37 -
2. Les tapes des requtes

Maintenant que la rfrence t ajoute nous allons pouvoir avoir accs toutes les
fonctionnalits des objets ADO et notamment les connexions.

2.1 Dclarations des variables pour la connexion

La dclaration se fait de la manire suivante


Dim Myconnect as ADODB.connection
Set MyConnect = New ADODB.connection

Le mot cl New signifie que nous avons cre un pointeur sur un objet ADODB.connection
et que la place en mmoire lui a t alloue.

Il faut prsent lui dfinir le chemin de connexion, ici nous allons attaquer la base exemple
dACCESS : FPWIND

MyConnect.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\Program Files\Microsoft
Office\Office10\1036\FPNWIND.mdb"

Le chemin peut-tre mis dans une variable chane de caractre et bien sr tre affect la
proprit ConnectionString de lobjet ADODB.Connection

Et enfin tablissement de la connexion avec la mthode Open


MyConnect.Open

2.2. Construction dune requte SQL

Une fois la connexion avec la table ACCESS active il faut tablir le dialogue avec elle et
ceci se fait par lintermdiaire de la requte SQL (Structured Query Language)

Dim MySQL as string


MySQL = SELECT * FROM Clients WHERE Ville=Mexico D.F

Explications: La table Clients est compose de diffrents champs dont Ville. Ltoile
signifie que lon souhaite faire remonter tous les champs de cette table Clients. Mais on
pourrait trs bien ne spcifier que certains champs de la table avec une variable ou une
chane de caractres. La dclaration aurait t :
MySQL = SELECT Champ1, Champ2, Champ3 FROM Clients Ville=Mexico D.F
Ou
Mavariable = Champ1, Champ2, Champ3 de type string
MySQL = SELECT & Mavariable & FROM Clients Ville=Mexico D.F

De plus les lments slectionns doivent se mettre entre simple cte si cest une constante.
Ville=Mexico D.F
Dans le cas dune variable on doit rajouter des doubles ctes :
Ville= & Mavariable &

Modlisation de lconomie et de la Finance Internationales


- 38 -
2.3. Construction dun objet Recordset

Afin de pouvoir stocker les informations renvoyes par la requte nous avons besoin de
dclarer un objet recordset :

Dim Myrs as ADODB.recordset


Set Myrs = New ADODB.recordset

Un recordset est un ensemble d'enregistrements. Chaque entre de cet ensemble contient les
donnes relatives un enregistrement. L'illustration suivant schmatique une telle entit

Pour vous dplacer dans cette structure, une notion de curseur vous est fournie. Le
curseur est une entit que vous pouvez, via diffrentes mthodes, balader sur les
enregistrements. Ces mthodes sont au nombre de cinq : MoveFirst, MovePrevious,
MoveNext, MoveLast et enfin Move (qui dplace le curseur sur un enregistrement bien
particulier). Attention, deux cases du RecordSet sont particulires : la premire et la
dernire, respectivement appeles "Begin Of File" et "End Of File". Elles permettent de
savoir si oui, ou non, nous sommes en dehors des lments retourns par la requte de
slection.

Ensuite nous devons faire le lien entre la requte et la table avec la fonction OPEN
Myrs.Open MySQL, MyConnect

3. Utilisation des donnes

Maintenant il nous reste plus qu nous balader dans notre recordset qui est un vhicule
contenant toutes les informations dont nous avons besoin, nous y accdons par
lintermdiaire des champs (Fields). Les champs sont accessibles soient par leur nom soient
par leur numro. Les champs disponibles sont lists de zro Fields.Count-1 (count est
une proprit de Fields)

Syntaxe pour rcuprer les noms des champs


For i = 0 To myrs.Fields.Count 1
MySheet.Cells(1, i + 1) = myrs.Fields(i).Name
Next i

Syntaxe pour rcuprer les valeurs des champs


For i = 0 To myrs.Fields.Count - 1
.Cells(irow, i + 1) = myrs.Fields(i).Value
Next i

Modlisation de lconomie et de la Finance Internationales


- 39 -
Evidemment afin davoir lexhaustivit des donnes il est prfrable dinclure ceci dans une
boucle dont la sortie sera spcifie si on rencontre loprateur EOF (End of File) et de
passer dun enregistrement un autre par la mthode MoveNext de lobjet Recordset

4. Fin des objets cres

Lorsque le processus est fini il faut imprativement fermer nos variables objets et les
effacer aussi en mmoire.

MyConnect.Close (fermeture de la connexion)


Set MyConnect = Nothing (effacement en mmoire)

Myrs.close
Set Myrs = Nothing

5. Les proprits des connections et les transformations de tables

5.1 Les transformations : Insertion et Mise jour

Vous serez peut-tre amens vouloir introduire dans votre table des donnes de manire
dynamique ou de modifier des donnes pour mettre jour par exemple ladresse dun de
vos clients ou son changement de tlphone

5.1.1 La fonction Insertion

Il y a deux faons dinsrer des donnes dans une table, soit avec la mthode AddNew
dconseiller car si vous avez une table qui contient plusieurs millions ou quelques milliers
de records celle-ci sera trs lente mais la syntaxe est la suivante :

Syntaxe dinsertion
With Myrs
.AddNew
for i =0 to .Fields.Count-1
.Fields(i) = MaValeur
Next i
End With

Sinon une mthode plus lgante et beaucoup plus rapide consiste utiliser la mthode
INSERT
MySQL = "INSERT INTO Clients (Champ1, Champ2, Champ3,, ChampN) VALUES
(""Valeur1"",""Valeur2",""Valeur3"",,""ValeurN"")"

Ensuite la prise en compte de cette requte se fait par lintermdiaire de la fonction Excute
de la connexion

MyConnect.Execute MySQL, recordsetAffected

Modlisation de lconomie et de la Finance Internationales


- 40 -
La requte INSERT ... SELECT permet de rapidement insrer dans une table un grand
nombre de lignes d'une ou plusieurs autres tables
INSERT INTO TABLE2 (champ1, Champ2, .., ChampN) SELECT * FROM TABLE1
WHERE Conditions.

5.1.2 La fonction Update (Mise jour)

Lorsque vous souhaitez mettre jour un champ de la table seulement vous devez utiliser
soit la mthode de lobjet Recordset Update soit la mthode Excute de la connexion
explicite ci-dessous

MySQL ="UPDATE Clients SET Champ1 = "NouvelleValue1",


Champ2="NouvelleValue2" WHERE Conditions

Si on ne spcifie pas les conditions alors tous les enregistrements de la table subiront cette
mise jour.

5.2 Les proprits de la connexion

Si vous effectuez des changements dans votre table, notamment avec les mthodes insert et
updates (mise jour) vous devez valider cette transformation car sinon celle-ci ne sera pas
prise en compte dans la table. La validation se fait par lintermdiaire de la mthode
CommitTrans de votre objet Connexion

MyConnect.CommitTrans

Si on contraire vous souhaitez annuler la transformation parce que par exemple vous ntes
pas satisfait du retour de votre macro ou si vous avez dtect une erreur, vous pouvez le
faire par la mthode RollBackTrans

MyConnect.RollBackTrans

6. Les QueryTables

Les Querytables sont des requtes pour importer des donnes externes (Web, base de
donnes, etc..) vers Excel. Il me semble que cette mthode est un peu plus rapide que la
prcdente mais je ne lai pas expertise sur des bases de donnes importantes, elle rpond
une syntaxe bien particulire :
Vous devez au pralable avoir dclarer un objet ADODB.recordset, et bien videmment
une instruction SQL pour la requte. Ensuite avec la connexion que vous avez dclare
vous devez excuter votre requte

With MyConnect
MyConnect.ConnectionString = " Chane de connexion"
MyConnect.Open
Set MyRecordset = .Execute(MySQL)
End with

Modlisation de lconomie et de la Finance Internationales


- 41 -
Ensuite vous devez dclarer une variable de type QueryTable et utiliser la mthode Add de
la collection QueryTables, celle-ci renvoyant un objet QueryTable.

Dim MyQueryT as QueryTable


Set MyQueryT = MySheet.QueryTables.Add(MyRecordset, DestinationRange)

O DestinationRange est la Range o vous souhaitez positionner votre QueryTable

Ensuite pour rcuprer les donnes il ne vous reste plus qu invoquer la mthode Refresh
de lobjet QueryTable
MyQueryT.Refresh

A noter que le rsultat de cette QueryTable peut aussi tre la source dautres QueryTable ou
PivotTable dans ce cas il est prfrable de mettre la proprit BackGroundQuery False
pour passer la main la procdure qu'une fois toutes les donnes rcupres dans la feuille
de calcul.

Modlisation de lconomie et de la Finance Internationales


- 42 -