Vous êtes sur la page 1sur 6

TP1:prsentationduVBA(enutilisantlelogicielACCESS)

objectif:l'objectifdecetpestdevousprsenterlelangageVBA

1. Dfinitionsimportantes:VBA
Visualbasic:basic(beginner'sallpurposesymbolicinstructioncode:code
d'instructionsgnriquessymboliquespourdbutant:l'inversedefortranetcobol
sesdbuts);puismicrosoftacrVBA(visualbasicforapplications)
Danslalittraturesurcelangageonfaitladiffrenceentre:
Module:emplacementosetrouvelecodeVBA
Moduledeformulaireetd'tat:codeassociuntatouunformulaire
Modulestandard:codeassociunobjetdebase(casgnral)
Procdure:chaquemoduleestdivisenprocdures(sub)etenfonctions
Onremarquequelesmodulessontdescodesdistinctsdel'applicationACCESSou
associsunformulaire,untatouunobjetdebase.LorsdeceTps,onsecontente
deraliserdesmodulesdebasesansinteractionsavecdesobjetsACCESS.

2. Exercice1:prsentationdelasyntaxeduVBA
Dansunebasededonnesvide,prendrel'diteurVisualBasic
[outilsdebasededonnes][VisualBasic]insrerunnouveaumodule
[insertion][module]
ou
[Crer]/[macro]/[modules]
rajouterlecodesuivant(onnes'occupepasdelapremirelignepourlemoment)
Subtp1_procedure1()'commentaire:dclarationd'uneprocdure
Debug.Print"testpourunepremireprocdure"
EndSub

afficherlafentred'excution:
affichage/Fentred'excution
affichage/variablelocale
Dbogage/paspasdtaill=>F8
Testerlecodesuivant:(exempledeprocdure)
Subtp1_procedure1()
DimprenomAsString'declarationdesvariables
DimnomAsString'commentaire
DimnomCompletAsString
prenom="jean"
nom="dujardin"
nomComplet=prenom&""&nom
Debug.PrintnomComplet
EndSub

VBA_ACCESS_TP1_01_12.odt

29/01/12

A la suite de la procdure, tester le code suivant : (exemple de fonction )


Functiontp1_fonction1()
DimprenomAsString'declarationdesvariables
DimnomAsString'commentaire
DimnomCompletAsString
prenom="jean"
nom="dujardin2"
nomComplet=prenom&""&nom
tp1_fonction1=nomComplet
EndFunction

Rajouter cette instruction dans la procdure


Debug.Printtp1_fonction1()

rappel:
affichage/Fentred'excution
affichage/variablelocale
Dbogage/paspasdtaill=>F8

3. programmationVBA
OptioncompareDatabase:onutilisemmeordredetriqueceluiquiestemploy
danslabasededonnesitself,ilexisteaussiOptioncompareBinary(triparordre
binairepourleschainesdecaractres),OptioncompareText(trisansfairela
diffrenceentremajusculeetminusculepourunechainedecaractres)
OptionExplicit
obligel'utilisateurdclarerdefaonformelletouteslesvariables
(idemdansoutilsoptiondel'diteurVBA)
3.1. typesdevariables
Objet:objetentantquevariablepouruneutilisationultrieure
Variant:typedfinidefaonimplicite(maDonnee=12oumaDonnee="texte"
boolean:boolen
Currency:montaire
Date:stockeladateetl'heure,lesannesvontde1009999
exemple:maDate=#30/10/03#(valeurentre#)
String:chainedecaractres
entier:Integer:entier32768>32768,Long:enierlong+/2147483648,Byte:
octet0>255
rel:SingleetDouble
constante:ConstconNombreAsInteger
3.2. oprateurslogiques
Addition:+
soustraction:
Divisionetrenvoieunnombrevirguleflottante:
Divisionetrenvoieunnombreentier:
\
Restedeladivisionentire(modulo):
mod
lvationlapuissance:
^

VBA_ACCESS_TP1_01_12.odt

multiplication:*
/

29/01/12

3.3. oprateursdecomparaison
>>=<<=<>(diffrent)
3.4. oprateurs logiques
AND OR NOT XOR(ouexclusif) Eqv(equivalent:galitd'expression
logique)
3.5. oprateurs de concatnation
& concatnation de chaine de caractres (+ fonctionne aussi mais est viter pour ne pas
faire la confusion avec l'addition)
3.6. structuredecontrle
sialors.sinonfsi
ifthenelseendif
ifa>=10then'=:estgal;<>:n'estpasgal;>;<;>=;<=
message="aplusgrandougal10"
else
message="apluspetitque10"
endif

testerl'exemplecidessusetafficherlemessage,rajouter
a=InputBox("saisissezunpremiernombre")

expressioncomposedansletest:utiliserANDORNOT
exemple:
ifa>=100Anda<200

Selonque
SelectCaseintSomme
Case1
msg="lenombreest1"
Case15,16
msg="lenombreest15ou16"
Case19To23
msg="lenombreestcomprisentre19et23"
CaseElse
msg="lenombreestdiffrentde1,15,16,19>23"
EndSelect
MsgBoxmsg

testerl'exemplecidessusetafficherlemessage
autrecodepossiblepour
sialorssinon
msg=IIf(a>10,"nombresuprieur10","nombreinfrieur10")

exemple:
SubajouteNombre()
DimintNombre1AsInteger
DimintNombre2AsInteger
DimintSommeAsInteger
intNombre1=InputBox("saisissezunpremiernombre")
intNombre2=InputBox("saisissezundeuximenombre")
intSomme=intNombre1+intNombre2
Debug.Print"Lesnombressaisistaient"&intNombre1&"+"&intNombre2&"="&intSomme
EndSub

3.7. Boucles
Pouride1Nparpas
...
FinPour

VBA_ACCESS_TP1_01_12.odt

Fori=1toNSteppas
..
Next

29/01/12

'boucles
ForintCompteur=1To100Step3
If(intCompteurMod2)=0Then
Debug.PrintintCompteur&"estunnombrepair"
Else
Debug.PrintintCompteur&"estunnombreimpair"
EndIf
NextintCompteur
SubtestBoucle()
DimaAsInteger
'
a=0
DoWhilea<3
a=a+1
Debug.Printa
Loop
'
a=0
Do'bouclequis'excuteaumoins1fois
a=a+1
Debug.Printa
LoopWhilea<3
'
a=0
DoUntila>=3'complmentdutest
a=a+1
Debug.Printa
Loop
'
EndSub

A faire valider
exercice1
Raliserunprogrammequilitunnombreetaffichesatabledemultiplication.
exercice2
Raliserunprogrammequicalculelasommedesnombresdivisiblespar3etdontla
sommeestinfrieure2000;prcisercettesommeenaffichantlachainede
caractres:1+3+6+9+..+?=?<2000
3.8. Pourlesplusrapides:tableaux
Testerlescodescidessous;raliserunprogrammequilit6valeursdansuntableau
puisquicalculelamoyennedeces6valeurs.
DimTableau1(10)AsInteger
Fori=0To10
Tableau1(i)=i*10
Debug.Print"element"&i&":"&Tableau1(i)
Next

ou
DimTableau1()AsInteger
ReDimTableau1(10)
Fori=0To10
Tableau1(i)=i*10
Debug.Print"element"&i&":"&Tableau1(i)
Next
ReDimTableau1(20)
Debug.Print"element"&2&":"&Tableau1(2)
Tableau1(2)=200
ReDimPreserveTableau1(30)'Preservepermetdeconserverlecontenu
Debug.Print"element"&2&":"&Tableau1(2)&IsArray(Tableau1)
EraseTableau1

VBA_ACCESS_TP1_01_12.odt

29/01/12

VBA_ACCESS_TP1_01_12.odt

29/01/12

exempledesolutions:

VBA_ACCESS_TP1_01_12.odt

29/01/12