Professional Documents
Culture Documents
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
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