Escolar Documentos
Profissional Documentos
Cultura Documentos
Visual Basic
v 6.0
CHAPITRE 1 : PRESENTATION DE LINTERFACE VBA ..................................... 4
1. Introduction ................................................................................................................................................... 4
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.
Affiche la dfinition
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)
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.
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)
Les autres sous menus ne sont que des redondances de ce qui prcde.
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
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).
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
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
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
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.
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
4 Les Cellules
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.
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
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.
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.
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.
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
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.
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.
Now() ou today()
Retourne la date daujourdhui.
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.
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
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 :
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
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 :
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.
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
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.
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.
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
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
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.
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
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
Les boucles dinstructions servent amliorer la lisibilit de votre code et rpter une
srie dinstruction. Il en existe plusieurs
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
Exemple
Dim MyRange as range
[celluleType].CurrentRegion.Select
For each MyRange in Selection
MyRange.Font.ColorIndex=3
Next
Exemple
If Condition Then
Srie dinstructions1
Else
Srie dinstructions2
End if
If .Then.elseif then.end if
Exemple
If Condition1 then
Instruction1
Elseif condition2 then
Instruction2
Else
Instruction3
End if
Select Case
Cette structure permet denvisager diffrentes valeurs pour une mme expression et de
spcifier les instructions selon chaque cas envisag.
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.
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
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.
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
Pour associer le nom choisi Mytable une pivot table on doit dfinir la syntaxe ci-dessous :
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
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.
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)
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
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.
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 .
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.
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.
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.
Je ne vais pas numrer tous les types ci-dessus, seulement les plus usuels
Case cocher
Contrle Frame
Contrle Label
Option button
Contrle Commande
Bouton
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
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.
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)
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
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)
Maintenant que la rfrence t ajoute nous allons pouvoir avoir accs toutes les
fonctionnalits des objets ADO et notamment les connexions.
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
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)
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 &
Afin de pouvoir stocker les informations renvoyes par la requte nous avons besoin de
dclarer un objet 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
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)
Lorsque le processus est fini il faut imprativement fermer nos variables objets et les
effacer aussi en mmoire.
Myrs.close
Set Myrs = Nothing
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
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
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
Si on ne spcifie pas les conditions alors tous les enregistrements de la table subiront cette
mise jour.
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
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.