Vous êtes sur la page 1sur 28

Tovnnvon c.cncncncc /1 1.

^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
1.5 Environnement de Dveloppement Visual Basic

Bote Outils
Barre dOutils
Explorateur de projets
Fentre Proprits
Fentre Prsentation des Feuilles
Fentre du Projet
Feuille de lapplication
Tovnnvon c.cncncncc 10/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Chapitre 2 : Le langage Visual Basic
2.1 Dclaration des variables
2.1.1 Types de donnes
Type de donnes Taille Dsignation
Byte 1 octet Entier de 0 255
Boolean 2 octets True ou False
Integer 2 octets Entier de -32 768 32 767
Long 4 octets Entier long de -2 147 483 648 2 147 483 647
Single 4 octets Rel en simple prcision
Valeurs ngatives : -3,402823 * 10
38
-1,401298 * 10
-45
Valeurs positives : 1,401298 * 10
-45
3,402823 * 10
38
Double 8 octets Rel en double prcision
Date 8 octets Type date du 01/01/100 au 31/12/9999
String Chane de caractres de longueur non fixe pouvant contenir
jusqu environ 2 milliards de caractres.
String * N Chane de caractres de longueur fixe prcise laide de la
constante N pouvant aller jusqu environ 65 400 caractres.
Variant Cest un type passe par tout pouvant contenir diffrents
types de valeur : numriques, chanes, etc.
Object 4 octets Cest aussi un type passe par tout, mais il permet de dclarer
des variables dynamiques pouvant rfrencer en suite des
objets de diffrentes classes.
2.1.2 Dclaration des variables
La dclaration des variables peut tre ralise laide de lun des mots cls suivants :
Dim, Private, Public, Global, Static. (Dim tant le mot cl le plus utilis).
Syntaxe de dclaration :
Dim | Private | Public | global | Static V1 As Type1, V2 As Type2,
Exemples :
Dim x As Integer, y As Single
Public S1 As String
Private S2 As String * 20
La diffrence entre les diffrents mots cls est explique dans le tableau suivant :
Mot cl Dsignation
Dim Dclaration dune variable globale ou locale une procdure. Une variable
globale dclare avec Dim nest pas accessible partir des autres modules du
projet (elle est prive).
Tovnnvon c.cncncncc 11/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Private Dclaration dune variable globale prive cd inaccessible partir des autres
modules du projet. Private agit comme Dim, seulement on ne peut pas dclarer
une variable locale laide de Private.
Public Dclaration dune variable globale publique cd accessible depuis les autres
modules du projet. On ne dclare pas une variable locale avec Public.
Global Le mot cl Global a le mme effet que public, seulement il nest utilis que
dans les modules (fichiers .bas)
Static Utilis dans une procdure ou une fonction pour dclarer une variable locale
statique, cd qui garde ses valeurs dun appel lautre.
2.1.3 Dclaration Implicite
On peut utiliser une variable sans dclaration. Elle prend alors le type Variant. Dans
ce cas on peut lui affecter des valeurs de diffrents types.
Exemple :
V = "chane"
V = 20
V = "20" + "30" V = "2030"
V = "20" + 30 V = 50
V = "20" & 30 V = "2030"
V = "6" * "3" V = 18
On remarque que les conversions Chane Numrique sont automatiques condition que
lun des lments de lexpression est numrique et loprateur utilis est un oprateur
arithmtique. Le symbole + est la fois un oprateur de concatnation de chanes et un
oprateur daddition.
On remarque aussi que les conversions inverses (numrique chane) sont automatiques. En
effet puisque le symbole & est aussi un oprateur de concatnation de chanes : lexpression
"20" & 30 est considre comme une concatnation de deux chanes.
2.1.4 Imposer la dclaration Explicite
Il est parfois prfrable dexiger la dclaration de toutes les variables du programme.
Pour cela on utilise linstruction suivante au dbut du programme :
Option Explicit
De cette manire le compilateur signale une erreur pour toute utilisation de variable non
dclare explicitement.
2.1.5 Dfinition des constantes
Const C1 [As type1] = Val1, C2 [As type2] = Val2,
La prcision du type des constantes est optionnelle.
Exemple :
Const CX = 20
Const Pi As Single = 3.14, S = "Message : "
Remarque :
Tovnnvon c.cncncncc 12/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Une constante peut aussi tre dfinie prive ou public en faisant prcder le mot cl
Const par lun des mots cls Private ou Public.
Exemple :
Public Const CP = 359
2.1.6 Dclaration des tableaux
Dim NomduTableau ([dbut1 To] fin1, [dbut2 To] fin2, ) As Type1,
Remarque :
Le mot cl Dim est utilis ici comme reprsentant de tous les mots cls de
dclaration :
Dim | Private | Public | global | Static
Avec :
dbut
i
est lindice du premier lment de la i
me
dimension du tableau.
fin
i
est lindice du dernier lment de la i
me
dimension.
Si on ne prcise pas lindice de dbut, il prend par dfaut la valeur 0.
dbut
i
et fin
i
peuvent prendre des valeurs ngatives.
Exemples :
Dim Matrice (9, 19) As Integer
matrice dentiers de 10 lignes (0 9) et 20 colonnes (0 19)
Dim T (1 to 50)
un tableau de variants index de 1 50
Dim TT (1 To 3, 9, -10 To 10) As Single
dclaration dun tableau tridimensionnel
Remarque :
Laccs aux lments dun tableau T est ralis par la notation T(i). Sil sagit dun
tableau multidimensionnel, laccs est ralis avec : T(i, j, ..)
Exemple :
T(1) = 30
TT(1, 5, 0) = 6.5
2.1.7 Dfinition dun type enregistrement
La dfinition dun enregistrement est ralise laide du mot cl Type :
Type NonDuTypeEnegistrement
Champ1 As Type1
Champ2 As Type2

ChampN As TypeN
End Type
La dclaration ensuite dune variable de ce type peut tre ralise comme suit :
Dim E As NonDuTypeEnegistrement
Remarques :
Tovnnvon c.cncncncc 11/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
1- Si on dfinit dans un module (fichier .bas) un type enregistrement, il devient
accessible dans tous les autres modules (ou feuilles) de lapplication.
2- Dans une feuille la dfinition dun type enregistrement doit obligatoirement tre
ralise dune manire prive en faisant prcder le mot cl Type par Private :
Private Type NomDuTypeEnegistrement
Champ1 As Type1
Champ2 As Type2

ChampN As TypeN
End Type
Exemple :
Private Type Personne
CIN As String * 12
Nom As String * 30
Prenom As String * 20
DN As Date
End Type
Dim P As Personne
Remarque :
Laccs un champ denregistrement est ralis par lintermdiaire du slecteur . :
Enregistrement.Champ
Exemple :
P.DN = #10/03/1980#
2.1.8 Dfinition des types numrs
La dfinition dun type numr consiste dfinir un ensemble de constantes dont les
valeurs commencent par dfaut partir de 0. la valeur de chaque constante est gale la
valeur de la constante prcdente + 1.
La dfinition dun type numr est ralise laide du mot cl Enum :
Enum NomDuTypeEnmr
Constante 1 [ = valeur 1]
Constante 2 [ = valeur 1]

End Enum
Si on ne prcise pas de valeur pour une constante Constante
i
, sa valeur est alors gale 0
si elle est la premire constante, sinon elle prend la valeur Constante
i-1
+ 1.
Exemple :
Enum Couleurs
Black
Blue
Green
Cyan
Tovnnvon c.cncncncc 1!/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Yellow = 14
White
End Enum
Les constantes auront alors respectivement les valeurs : 0, 1, 2, 3, 14 et 15
Remarque :
Un type numr peut tre public ou priv.
2.2 Instructions Basic
(1) Le langage Visual Basic utilise une instruction par ligne. Si on veut dcomposer
une mme instruction sur deux lignes, on utilise le blanc soulign ( _ ) la fin de la premire
ligne pour indiquer quil y a une suite sur la ligne suivante.
Exemple :
X = Y + Z + T _
+ 20 W
(2) La dernire instruction excute en Visual Basic est le mot cl End. L ou on
rencontre cette instruction (mme dans une procdure), le programme est arrt :
End
(3) Visual Basic donne la possibilit dinsrer des commentaires dans le programme. En
effet un commentaire est une suite de caractre qui dbute par le symbole quote ()
et qui se termine la fin de la ligne :
Exemple :
... ceci est un commentaire
2.3 Les Oprateurs
2.3.1 Oprateurs arithmtiques
+ Addition
soustraction
* Multiplication
/ Division relle
\ Division entire
^ Puissance
Mod Reste dune division entire
2.3.2 Oprateurs Logiques
And Et logique
Or Ou logique
Xor Ou bien
Not Non logique
2.3.3 Oprateurs de relation
< Infrieur
<= Infrieur ou gal
>
Suprieur
Tovnnvon c.cncncncc 1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
>= Suprieur ou gal
<> Diffrent
= Egal
2.3.4 Oprateur daffectation
On utilise le symbole =
2.3.5 Oprateurs de concatnation de chanes
On utilise le symbole &
2.4 Structures de Choix
2.4.1 Instruction If
- Cas N 1 :
If condition Then instruction1 [Else instruction2]
- Cas N 2 :
If condition-1 Then
Instruction-1
[ElseIf condition-2 Then
instruction-2
ElseIf ... ]
[Else
instruction-n]
End If
2.4.2 Instruction Select Case
Select Case Expression
Case cas1
instruction1 ...
Case cas2
instruction2
...
[Case Else
instruction-n ]
End Select
Avec Cas
i
pouvant tre :
- une valeur
- squence de valeurs : v1, v2,
- un intervalle de valeurs : v1 To v2
- une comparaison : Is
Exemple :
Case 1 To 4, 7 To 9, 11, 13, Is > 100
Tovnnvon c.cncncncc 1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
2.4.3 Fonction IIF
R = IIF(ExpLog, SiVrai, SiFaux)
La fonction IIF retourne la valeur du deuxime paramtre SiVrai dans le cas ou
lexpression logique ExpLog est vrifie sinon elle retourne la valeur du 3
me
paramtre
SiFaux .
2.4.4 Fonction Choose
R = Choose (Indice (1 ou 2), Choix1, Choix2, )
Si Indice a la valeur 1, la fonction Choose retourne Choix1,
Sinon, Si Indice a la valeur 2, la fonction Choose retourne Choix2, etc...
Exemple :
Dim T (1 to 5) as integer
...
X = Choose (i, T(1), T(2), T(3), T(4), T(5) )
Cette criture est quivalente
X = T(i)
2.4.5 Fonction Switch
R = Switch(Condition1, Val1, Condition2, Val2, )
La fonction Switch reoit une suite de paramtres par paires.
Si la condition1 est vrifie alors la fonction retourne Val1 ,
Sinon, si la condition2 est vrifie alors la fonction retourne Val2 ,
etc.
2.5 Structures de boucles
2.5.1 La boucle For
For compteur = debut To fin [Step pas]
instruction1
instruction2

[Exit For]

instruction-n
Next
Le compteur est une variable numrique utilise comme un compteur de boucle. Il est
incrment la fin de chaque itration de la boucle par pas (compteur = compteur + pas).
Si on ne prcise pas le pas dincrmentation, le compteur est incrment par 1. Linstruction
Exit For peut tre utilise pour forcer la sortie de la boucle si une condition particulire
est ralise.
Exemples :
Dim S As String
For i = 0 To 4
S = S & i
Next
Tovnnvon c.cncncncc 1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
S = "01234"
Dim S As Variant
For i = 0 To 4
S = S + i
Next
S = 10
2.5.2 La boucle While
While condition
instruction1
instruction2

instruction-n
Wend
Exemple :
La boule suivante dtermine la premire puissance de 2 suprieure ou gale 1000
X = 1
While X < 1000
X = X * 2
Wend
2.5.3 La boucle Do While | Until [Exit Do] Loop
- Cas N 1 : Tant quune condition est vraie on rpte les instructions
Do While condition
instruction1

[Exit Do]

instruction-n
Loop
- Cas N 2 : Les instructions sont rptes jusqu ce quune condition soit vraie. Et on
commence par le test de la condition.
Do Until condition
instruction1

[Exit Do]

instruction-n
Loop
2.5.4 La boucle Do [Exit Do] Loop While | Until
- Cas N 1 : On rpte les instructions tant quune condition est vraie. Le test est ralis cette
fois-ci la fin et non au dbut. Cd la boucle est excute au moins une fois.
Do
instruction1
Tovnnvon c.cncncncc 1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I

[Exit Do]

instruction-n
Loop While condition
- Cas N 2 : Les instructions sont rptes jusqu ce quune condition soit vraie. De la mme
manire, le test est ralis la fin et non au dbut. Cd aussi que la boucle est excute au
moins une fois.
Do
instruction1

[Exit Do]

instruction-n
Loop Until condition
2.5.5 La boucle For Each
For Each lment In groupe
instruction1
instruction2

[Exit For]

instruction-n
Next
Les instructions sont rptes pour chaque lment du groupe. Le groupe peut tre un tableau
ou une collection (voir plus loin dans le cours). La variable lment permet de parcourir la
liste des lments du groupe. A chaque itration elle prend la valeur du prochain lment du
groupe.
Exemple :
Dim T(5) As Integer
Dim S as Integer
For i = 0 To 5
T(i) = i * 2
Next
For Each X In T
S = S + X
Next
2.6 Fonctions de gestion des chanes de caractres
Fonction ou oprateur
Dsignation et Exemples
Tovnnvon c.cncncncc 1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
&, + Oprateurs de Concatnation. Il est prfrable dutiliser le symbole
&.
S = "Visual " & "Basic" S = "Visual Basic"
Asc(C) Retourne le code Ascii du caractre C.
Code = Asc("A") Code = 65
Chr(N) Retourne le caractre de code Ascii N.
C = Chr(65) C = "A"
InStr(S1, S2) , ou encore
InStr(Pos, S1, S2 [, Maj])
Teste si la chane S2 est incluse dans S1 et retourne la position de
la premire occurrence de S2 dans S1 ( partir de 1). Si aucune,
alors elle retourne 0 ou Null si lune des chanes a la valeur Null.
Pos indique la position de dbut de recherche dans la chane S1
(pos doit tre >=1).
Maj est un paramtre optionnel ayant une valeur par dfaut gale
0. Si on veut une recherche sans faire de distinction entre
majuscule et minuscule on utilise ce paramtre avec la valeur 1.
Pos = Instr(3, "ABCDEFGE", "e", 1) Pos = 5
Pos = Instr(1, "ABCDEFGE","e", 0) Pos = 0
Pos = Instr("ABCDEFGE","W") Pos = 0
LCase(S) Convertit une chane de caractres S en minuscule
S1 = "Visual BASIC"
S2 = Lcase(S1) S2 = "visual basic"
Left(S,N) Extrait la sous chane gauche de S de longueur N.
S1 = "Visual Basic"
S2 = Left(S1, 6) S2 = "Visual"
Len(S) Dtermine la longueur de la chane S
S1 = "Visual BASIC"
L = Len(S1) L = 12
LSet S2 = S1 Aligne les caractres de la chane S1 gauche dans S2 et complte
par des espaces droite suivant la longueur de S2. Si S2 est une
chane de longueur non fixe ou non dclare (Variant) alors elle
doit obligatoirement avoir t initialise une chane qui fixe sa
longueur. Si ce nest pas le cas le rsultat est une chane vide.
Dim S1 as String * 10, S2 as String
LSet S1 = "abc" S1 = "abc "
LSet S2 = "abc" S2 = ""
S2 = "12345678"
LSet S2 = "abc" S2 = "abc "
LTrim(S) Construit et retourne une copie de la chane S sans les espaces
gauche.
S1 = " Visual Basic "
S2 = LTrim(S1) S2 = "Visual Basic "
Mid(S, Pos) = Remplace dans la chane S partir du caractre numro Pos.
Tovnnvon c.cncncncc 20/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
S = "Bonjour"
Mid(S, 4) = "soir" S = Bonsoir
Mid(S, 4) = "S" S = BonSoir
Mid(S, Pos, [N]) Extrait une sous chane de longueur N partir de la position Pos
de la chane S. Si on ne prcise pas N ou si le nombre de
caractres de S partir de Pos est infrieur N, alors tous les
caractres de S partir de Pos jusqu' la fin sont extraits.
S1 = "Bonjour"
S2 = Mid(S1, 4, 2) S2 = "jo"
S3 = Mid(S1, 4) S3 = "jour"
Right(S,N) Extrait la sous chane droite de S de longueur N.
S1 = "Visual Basic"
S2 = Left(S1, 5) S2 = "Basic"
RSet S2 = S1 Aligne les caractres de la chane S1 droite dans S2 et complte
par des espaces gauche suivant la longueur de S2. Si S2 est une
chane de longueur non fixe ou non dclare (Variant) alors elle
doit obligatoirement avoir t initialise une chane qui fixe sa
longueur. Si ce nest pas le cas le rsultat est une chane vide.
Dim S1 as String * 10, S2 as String
RSet S1 = "abc" S1 = " abc"
LSet S2 = "abc" S2 = ""
S2 = "12345678"
LSet S2 = "abc" S2 = " abc"
RTrim(S) Construit et retourne une copie de la chane S sans les espaces
droite.
S1 = " Visual Basic "
S2 = RTrim(S1) S2 = " Visual Basic"
Space(N) Construit une chane de N espaces
S = Space(10) S = " "
Str(N) Convertit le nombre N (entier ou rel) en une chane de caractres.
Si le nombre N est positif, la chane renvoye contient un espace
supplmentaire gauche.
S = Str(256) S = " 256"
String(N, C) Construit une chane contenant N fois le caractre C.
S = String(10, "A") S = "AAAAAAAAAA"
Trim(S) Construit et retourne une copie de la chane S sans les espaces
gauche et droite (limine les espaces gauche et droite).
S1 = " Visual Basic "
S2 = Trim(S1) S2 = "Visual Basic"
UCase(S) Convertit une chane de caractres S en majuscule
S1 = "Visual Basic"
S2 = Ucase(S1) S2 = "VISUAL BASIC"
Tovnnvon c.cncncncc 21/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Val(S) Retourne la valeur numrique contenue dans la chane S. la
fonction Val arrte la traduction au premier caractre de la chane
ne faisant pas partie des nombres.
La virgule nest pas reconnue comme lments des nombres.
Cependant les reprsentation Octales (&O) et Hexadcimales
(&H) sont acceptes.
X1 = Val("20.5") X1 = 20,5
X2 = Val(" 20.5 ") X2 = 20,5
X3 = Val("20,5") X3 = 20
X4 = Val("2abc") X4 = 2
X5 = Val("abc") X5 = 0
X6 = Val("&H00FF") X6 = 255
2.7 Les Tableaux
2.7.1 Tableaux statiques
Nous avons dj vu comment dclarer un tableau statique. Cd les dimensions ainsi
que le nombre dlments sont fix :
Dim NomDuTableau ([D1 To] F1, , [Dn to] Fn) As TypeDesElements
Le mot cl Dim pouvant tre remplac par lun des mot : Private | Public | global | Static
Laccs un lment du tableau est ralis laide de lcriture suivante :
NomDuTableau (i
1
, i
2
, , i
n
)
Exemples :
T(1) = 20 Pour un tableau dentiers une dimension
T(2, 3) = 53.6 Pour un tableau de rels deux dimensions
Cependant, il est possible en Visual Basic de dclarer des tableaux dynamiques. La
rservation de la mmoire ncessaire sera ralise au fur et mesure des besoins.
2.7.2 Tableaux dynamiques
Lutilisation dun tableau dynamique ncessite deux tapes :
1- Pendant une premire tape on dclare un tableau sans prciser le nombre de dimensions
ou celui des lments. Cette opration est ralise de la manire suivante :
Dim NomDuTableau ( ) [ as TypeDesElements ]
Si on ne prcise pas le type des lments, ils seront alors Variant
Cette instruction dclare un tableau, mais elle ne lui rserve aucun espace mmoire.
2- Dans la deuxime tape, on a une ide sur le nombre de dimensions et celui des lments
dont on a besoin. On peut alors faire une allocation suivant nos besoins. Il sagit dune
opration de redimensionnement ralise de la manire suivante :
ReDim [Preserve] NomDuTableau ([D1 To] F1, [D2 To] F2, ..., [Dn To] Fn)
Cette fois-ci on prcise les dimensions et le nombre dlments de chaque dimension.
Le mot cl optionnel Preserve est utilis si on veut conserver les donnes dj existantes
dans le tableau. Cela signifie quon a dj fait un appel Redim auparavant.
Les contraintes dutilisation du mot cl Preserve sont les suivantes :
- On ne peut changer que la borne suprieure (lindice maximal) :
Tovnnvon c.cncncncc 22/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Exemple :
Dim T() as Integer
ReDim T(5)

ReDim Preserve T(3) correcte

ReDim Preserve T(9) correcte

ReDim Preserve T(1 to 5) incorrecte
- On ne peut pas modifier le nombre de dimensions :
Dim T() as Integer
ReDim T(5,6)

ReDim Preserve T(5, 6, 3) incorrecte
- Dans le cas dun tableau plusieurs dimensions, on ne peut modifier que le nombre
dlments de la dernire dimension
Dim T() as Integer
ReDim T(5, 6)

ReDim Preserve T(5, 12) correcte

ReDim Preserve T(7, 15) incorrecte
Remarques :
1- lorsquon termine de se servir dun tableau dynamique T, on peut librer lespace
mmoire qui lui a t alloue la dernire fois laide de linstruction Erase :
Erase(T)
2- Il est toujours possible aprs un appel Erase de redimensionner de nouveau le
tableau dynamique.
3- Pour connatre lindice minimal (respectivement maximal) dun tableau dynamique
(ou aussi statique) on utilise la fonction LBound (respectivement UBound) :
Min = LBound(T [, dimension])
Max = UBound(T [, dimension])
Le deuxime paramtre nest utilis que si le tableau a plus quune dimension. Il sera alors
utilis pour dterminer lindice minimal ou maximal dune dimension bien prcise :
Exemple :
Redim T1(5)
Redim T2(4, 6)
X1 = UBound (T1) X1 = 5
X2 = UBound (T2, 2) X2 = 6
M2 = LBound (T2, 1) M2 = 0
2.7.3 Variant contenant un Tableau
Il est possible de remplir une variable de type Variant par des lments dun tableau.
La variable devient alors comme un tableau. Cette opration est ralise laide de la fonction
Array :
Dim T As Variant
Tovnnvon c.cncncncc 21/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
T = Array (V1, V2, , Vn)
V1, V2, et Vn sont les lments du tableau. Il peuvent tre de nimporte quel type et de
types varis.
Exemples :
Dim T1, T2, T3
T1 = Array(10, 20, 30, 40, 50) Tableau dentiers
T2 = Array(20, "abd", 2.5, #12/20/68#) Tableau dlments de
types varis
T3 = Array(Text1, Text2, Text3) Tableau dlments de
type TextBox
For i = LBound(T1) To UBound(T1)
S = S + T1(i) Somme des lments du tableau
Next
For i = LBound(T3) To UBound(T3)
Text4.Text = Text4.Text & T3(i).Text Concatnation des
textes
Next
2.8 Oprateurs supplmentaires
2.8.1 Loprateur Like
Utilis pour comparer une chane avec un modle :
If (chane Like modle) then
Le modle est une chane de caractre contenant des symboles gnriques tels que ?, *, #,
permettant ainsi de dcrire un modle pour un ensemble de chanes bien dtermin. Par
exemple pour dcrire une suite de caractres qui commence par une lettre majuscule on utilise
le modle : "[A-Z]*"
Les symboles pouvant tre utiliss dans le modle sont les suivants :
Symbole dsignation
? Reprsente un caractre quelconque.
* Reprsente 0, 1 ou plusieurs caractres .
# Signifie un chiffre.
[C
1
C
2
C
n
]
Signifie lun des caractres : C
1
ou C
2
ou C
n
.
Exemple : Tester si S est une chane de 3 caractres qui commence par lune
des lettres : A, B ou C :
If (S Like "[ABC]??") then ...
[!C
1
C
2
C
n
] Signifie tous caractre sauf lun des caractres : C
1
ou C
2
ou
C
n
.
Exemple : Tester si S est une chane qui ne commence pas par lune des
lettres : X, Y, Z ou T :
If (S Like "[!XYZT]*") then ...
[C
1
C
2
]
Dsigne la plage des caractres compris entre C
1
et C
2
. On peut
spcifier plusieurs plages de caractres dans le mme groupe
Tovnnvon c.cncncncc 2!/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
entre crochets sans utiliser de dlimiteurs entre les plages. Pour
reprsenter lensemble des caractres majuscules et minuscules
plus les caractres on utilise la notation suivante :
"[A-Za-Z]"
Si on commence lensemble par un point dexclamation : "[!A-Za-Z]",
cela signifie tous les caractres nappartenant pas lensemble
"[A-Za-Z]".
Remarque :
Si on veut utiliser lun des caractres spciaux ( ?, #, *, [ ) comme caractre ordinaire
dans le masque, il suffit de lentourer par des crochets (exemple : [*]). Le crochet fermant (])
ne peut pas tre entour de crochets, mais il peut tre utilis l'extrieur. pour le cas du point
dexclamation, il na de fonction spciale qu lintrieur des crochets. Si on lutilise
lextrieur il est lu comme caractre ordinaire. Le trait d'union () peut tre utilis au dbut
dun ensemble entre crochet ou la fin pour correspondre lui-mme.
Exemple :
"[-a-z]" : signifie toutes les lettres minuscules ou le trait dunion.
2.8.2 Dtermination du type dune variable
2.8.2.1 Loprateur TypeOf
Loprateur TypeOf est utilis pour dterminer le type dun objet et non dune variable
ordinaire.
If (TypeOf Objet is TypeObjet) then
Exemple 1 :
If (TypeOf X is TextBox) then
X.Text = "ceci est du texte"
End If
Exemple 2 :
Compter le nombre de boutons dune feuille (Form1) :
Dim x As Object, cb as Integer
cb = 0
For Each x In Form1.Controls
If TypeOf x Is CommandButton Then cb = cb + 1
Next
2.8.2.2 La fonction TypeName
Cest une fonction qui retourne sous forme de chane de caractresle type dun objet
ou dune variable quelconque :
S = TypeName (Variable)
Exemple :
Dim x As Integer
S = TypeName(x) "Integer"
Tovnnvon c.cncncncc 2/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
2.8.3 Fonction Format
Retourne une chane de caractres contenant une expression formate en fonction des
instructions contenues dans l'expression de mise en forme.
Syntaxe gnrale :
Rsultat = Format (Expression [, "Chane de mise en forme"] )
Remarque :
Si on nutilise pas la chane de mise en forme, la fonction se comporte comme str
lorsquelle est applique une expression numrique. Seulement elle najoute pas comme str
lespace gauche et elle convertit e point dcimal des rels en une virgule :
Exemple :
S = Format(20.5) S = "20,5"
La chane de mise en forme contient un ensemble de Formateurs permettant de configurer
lexpression. Certains de ces formateurs sont les suivants :
dd , mm , yy , hh , mm , ss , \ , < , > , # , . , %
Formateur
Dsignation
h ou hh Signifie heure
m ou mm Signifie Minutes lorsquil est utilis avec une expression de type heure
(Time). Avec une date, il signifie mois.
s ou ss Secondes
Exemple :
S = Format(Time, "h:m:s") "22:5:8".
S = Format(Time, "hh:mm:ss") "22:05:08".
d, dd, ddd, dddd Signifient jour (day) :
d : donne les jours (< 10) sur un caractre. Exemple : 4
dd : sur deux caractres en compltant par 0 gauche. Exemple : 04
ddd : jour de la semaine en abrg. Exemple : mar (au lieu de mardi)
dddd : jour de la semaine complet. Exemple : mardi
m, mm, mmm,
mmmm
m et mm : donnent le mois respectivement sur 1 ou 2 caractres en
compltant par un 0 gauche.
mmm : donne la dsignation du mois en abrg : avr (pour avril)
mmmm : donne la dsignation complete du mois : avril
yy ou yyyy Donnent lanne sur 2 ou 4 caractres.
# Reprsente un chiffre.
Exemple :
Format(52.442, "####.##") 52,44
Format(52.442, "0####.##") 00052,44 en compltant
gauche par des 0.
Format(52.4, "##,##.##") 52,4
Format(52.4, "##,##.#0") 52,40
La virgule , L ou en met la virgule au milieu, elle signifie de dcomposer les
Tovnnvon c.cncncncc 2/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
nombre en milliers (3 chiffres par 3 espacs)
Format(5852.442, "##,##.##") 5 852,44
% Convertie un nombre en pourcentage :
Exemple :
S = Format(0.2, "0.00%") "20,00%".
< Convertit une chane en minuscule :
Exemple :
S = Format("VISUAL BASIC", "<") "visual basic"
> Convertit une chane en majuscule :
Exemple :
S = Format(" bientt", ">") " BIENTT"
2.9 Procdures et Fonctions
2.9.1 Les procdures
2.9.1.1 Dfinition dune procdure
Syntaxe :
Sub NomProcedure ( [P1 As type1, P2 As Type2, ] )
Instruction-1
[Exit Sub]
Instruction-n
End Sub
Remarque :
Sub peut tre prcd par lun des mots cls [Private | Public] et aussi par [Static].
Private : La procdure est inaccessible depuis les autres modules
Public : La procdure est accessible depuis tous les autre modules de lapplication. il sagit
du mode par dfaut lorsquon ne met rien gauche de Sub.
Static : Signifie que toutes les variables locales de la procdure sont statiques.
Exemple :
Private Static Sub Plus ()
Dim X As Integer
X = X + 1
Text1.Text = X
End Sub
La procdure Plus est inaccessible depuis les autres modules. A chaque fois quelle
est appele une nouvelle valeur est affiche dans le TextBox (1, 2, 3 )
2.9.1.2 Appel une procdure
Une procdure P n paramtres est appel laide de linstruction suivante :
P arg
1
, arg
2
, , arg
n
arg1, arg2, sont les arguments dappel
Tovnnvon c.cncncncc 2/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
si la procdure est sans paramtres. Lappel est ralis comme suit :
P
On remarque que les parenthses ne sont pas utiliss pour lappel des procdures en
Visual Basic
2.9.2 Les fonctions
2.9.2.1 Dfinition dune fonction
Syntaxe :
Function NomFonction ( [P1 As type1, P2 As Type2, ] ) As TypeFonction
Instruction-1

NomFonction = Expression
[Exit Function]
Instruction-n
End Function
Remarques :
1- De la mme manire que pour les procdure, le mot cl Function peut tre prcd
par lun des mots cls [Private | Public] et aussi par [Static].
2- Le type de la fonction est le type de la valeur de lexpression retourne par la
fonction.
Exemple :
Function Suc (X As Integer) As Integer
Suc = X + 1
End Sub
2.9.2.2 Appel une fonction
Une fonction F n paramtres est appele laide de linstruction suivante :
X = F(arg
1
, arg
2
, , arg
n
)
arg1, arg2, sont les arguments dappel
si la fonction est sans paramtres. Lappel est ralis comme suit :
X = F() ou X = F
2.9.3 Passage des paramtres
2.9.3.1 Passage par adresse
Afin de sortir de la procdure ou de la fonction avec les changements appliques aux
paramtres il est ncessaire de faire un passage par adresse ou par rfrence. Le type de
passage des paramtres par dfaut de Visual Basic est le passage par adresse. Celui-ci peut
tre obtenu explicitement par le mot cl ByRef qui prcde le nom du paramtre :
Dim | Function NomPF( , ByRef Pi As Type
i
, )
Instruction-1
Tovnnvon c.cncncncc 2/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I

Instruction-n
End Sub | Function
Tout changement du paramtre Pi sera alors rcupr lextrieur.
Exemple :
Sub Inc(ByRef x As Integer)
x = x + 1
End Sub

Sub Inc(x As Integer)


x = x + 1
End Sub
Dim a as Integer
a = 20
Inc a a = 21
2.9.3.2 Passage par valeur
Lorsquon utilise un passage par valeur pour un paramtre dune fonction ou un
procdure, la valeur dentre du paramtre est conserve aprs lexcution.
Le passage par valeur en Visual Basic doit tre spcifi explicitement par lntermediaire du
mot cl ByVal.
Dim | Function NomPF( , ByVal Pi As Type
i
, )
Instruction-1

Instruction-n
End Sub | Function
Exemple :
Sub Inc(ByVal x As Integer)
x = x + 1
End Sub
Dim a as Integer
a = 20
Inc a a est toujours = 20
2.9.4 Paramtres optionnels
Il est possible de raliser des procdures ou des fonctions pour lesquelles certains
paramtres ont des valeurs par dfaut. Lors de lappel, il devient possible domettre ces
paramtres qui prendront alors leurs valeurs par dfaut. Ce type de paramtre peut tre ralis
laide du mot cl Optional :
Dim | Function NomPF( , Optional Pi As Type
i
= Valeur
i
, )
Instruction-1

Instruction-n
End Sub | Function
Valeur
i
tant la valeur par dfaut du paramtre Pi dans le cas ou il manque lors de lappel.
Tovnnvon c.cncncncc 2/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Remarques :
1- On ne peut pas mettre un paramtre optionnel entre deux paramtres non optionnels
ou inversement. Lorsquon dfinie un paramtre optionnel, tous les paramtres
suivants doivent obligatoirement tre optionnels.
2- Il est possible de combiner Optional avec lun des mots cls ByRef ou ByVal.
Exemple :
Function Dupliquer(S As String, Optional N As Integer = 2,_
Optional Majuscule As Boolean = False) As
String
Dim R As String
R = ""
For i = 1 To N
R = R & S
Next
If Majuscule Then
Dupliquer = UCase(R)
Else
Dupliquer = R
End If
End Function
Sub Appels()
S1 = Dupliquer("abCd") ' abCdabCd
S2 = Dupliquer("abCd", 3) ' abCdabCdabCd
S3 = Dupliquer("abCd", 1, True) ' ABCD
S4 = Dupliquer("abCd", , True) ' ABCDABCD
End Sub
2.9.5 Liste darguments variables
Les procdures (ou fonctions) avec liste darguments variables sont des procdures qui
peuvent tre appel chaque fois avec un nombre de paramtre diffrents. Le nombre de
paramtres nest alors pas limit. A chaque appel, suivant le besoin on appelle la procdure
avec le nombre de paramtres ncessaire. Ce type de procdures peut tre ralis avec le mot
cl ParamArray laide de la syntaxe suivante :
Dim | Function NomPF( , ParamArray P
i
() )
Instruction-1

Instruction-n
End Sub | Function
Remarques :
1- Le paramtre Pi est obligatoirement un tableau de Variant.
2- Aucun paramtre ne doit tre dclar aprs le paramtre Pi.
Exemple :
Function Somme(ParamArray t()) As Integer
Dim S As Integer
Tovnnvon c.cncncncc 10/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
n1 = LBound(t)
n2 = UBound(t)
For i = n1 To n2
S = S + t(i)
Next
Somme = S
End Function
Les appels la fonction peuvent tre raliss comme suit :
S1 = Somme(1, 2, 3) S1 = 6
S2 = Somme(10, 20) S2 = 30
S3 = Somme(10, 11, 12, 13, 14, 15, 16, 17, 18) S3 = 116
2.9.6 La rcursivit
La rcursivit est ralise lorsquune procdure ou une fonction fait appel elle mme
pour rpter un mme travail plusieurs fois.
Exemple :
Function Fact(n As Integer) As Integer
If n = 1 Then
Fact = 1
Else
Fact = n * Fact(n - 1)
End If
End Function
2.10 Les Contrles ActiveX personnaliss
2.10.1. Introduction
Les contrles sont des objets rutilisables comprenant des lments visuels et du code.
Dans Visual Basic, ils permettent de crer rapidement des feuilles et des botes de dialogue.
Visual Basic comprend des contrles intgrs qu'il affiche dans la bote outils de contrles
au dmarrage, ainsi que des contrles ActiveX quon peut ajouter la bote outils (exemple :
MSFlexGrid). Depuis la version 5.0 de Visual Basic, on a la possibilit de crer des contrles
ActiveX personnaliss. On peut placer les contrles dans un type quelconque de conteneur,
une feuille ou une application, par exemple.
2.10.2. Projet de contrle ActiveX
Un projet de contrle ActiveX Visual Basic peut contenir plusieurs fichiers .ctl ,
chacun d'eux dfinissant une classe de contrle distincte. Lorsquon compile un projet de
contrle, un fichier .ocx est cr : il contient tous les contrles du projet, comme le montre
la figure ci-dessous.
Tovnnvon c.cncncncc 11/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
2.10.3. Diffrentes tapes de la cration dun contrle ActiveX
personnalis
Pour crer un contrle ActiveX, procdez comme suit :
1. Crez un projet de contrle ActiveX.
2. Crez l'interface utilisateur du contrle.
Les contrles ActiveX sont gnralement constitus de plusieurs contrles. Ces contrles,
dits constitutifs, sont des contrles existants, fournis par Visual Basic (une zone de texte ou un
bouton de commande, par exemple).
3. Crez les proprits et les mthodes du contrle.
4. Crez des procdures d'vnement pour les contrles constitutifs de votre
contrle.
5. Prsentez des vnements du contrle.
6. Crez des pages de proprits pour le contrle.
7. Dboguez et testez le contrle.
2.10.4. Objet UserControl
L'objet UserControl est la base de tout contrle ActiveX que vous crez l'aide de
Visual Basic. Ce type d'objet contient des modules de code et des concepteurs visuels.
Lorsque vous ouvrez un objet UserControl en mode cration, l'objet s'affiche dans un
concepteur visuel. Celui-ci vous permet de placer les contrles constitutifs (n'importe quel
contrle Visual Basic standard l'exception du contrle conteneur OLE.) dans l'objet
UserControl comme vous le feriez sur une feuille Visual Basic.
2.11 Les Fichiers
2.11.1 Fichiers textes
2.11.1.1 Ouverture en Ecriture
Open Nom_physique for Output as [#]Numro
Cre le fichier si inexistant, sinon elle lcrase.
Tovnnvon c.cncncncc 12/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Exemple :
Open "test01.txt" for Output as 1
ou Open "test01.txt" for Output as #1
2.11.1.2 Ouverture en Lecture
Open Nom_physique for Input as [#]Numro
Exemple :
Open "c:\autoexec.bat" for Input as 2
ou Open "c:\autoexec.bat" for Input as #2
2.11.1.3 Ouverture en Ajout
Open Nom_physique for Append as [#]Numro
Exemple :
Open "c:\autoexec.bat" for Append as 3
2.11.1.4 Fermeture
Close [#]Numro1, [#]Numro2,
Exemple :
Close 1, 2
2.11.1.5 Procdures dEcriture
2.11.1.5.1 Procdure Print #
Print #Numro, Exp1, Exp2, [;]
Les expressions sont imprimes dans le fichier spares par des tabulations.
Si le point virgule nest pas utilis, un retour chariot est imprim la fin de lcriture.
Sinon la prochaine criture sera ralise sur la mme ligne.
Exemple :
X=20
Y= "test"
Z=19.5
Print #1, X,Y,Z
Print #1, "texte" ;
Print #1, "Suite de la ligne"

Tovnnvon c.cncncncc 11/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
20 test 19,5
texteSuite de la ligne

2.11.1.5.2 Procdure Write #
Write #Numro, Exp1, Exp2, [;]
Mme fonctionnement que le Print, mais spare les expressions par des virgules, et dlimite
les chanes de caractres par des guillemets.
Exemple :
X=20
Y= "test"
Z=19.5
Write #1, X,Y,Z
Write #1, "texte" ;
Write #1, "Suite de la ligne"

20,"test",19.5
"texte","Suite de la ligne"

2.11.1.6 Procdures de Lecture
2.11.1.6.1 Procdure Input #
Input #Numro, V1, V2,
Suppose que lcrire t ralis par Write. Cd : elle cherche les dlimiteurs ( , et ").
La lecture des numriques ne pause pas de problme. Mais celle des chane nest pas limite
par des espaces, mais des virgules ou des guillemets.
2.11.1.6.2 Procdure Line Input #
Line Input #Numro, variable
Permet la lecture de toute une ligne sous forme de texte.
2.11.1.6.3 Fonction Input
String Input (NombreDeCaractres, [#]Numro)
Lit un nombre de caractres donns et retourne la chane lue
Exemple :
Text = Input(1000, 1) ; lecture de 1000 caractres partir du fichier didentificateur
#1
Tovnnvon c.cncncncc 1!/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
2.11.1.7 Test de fin de fichier
EOF (Numro)
Exemple :
While Not (EOF(1))
2.11.1.8 Taille dun fichier
LOF(Numro)
Exemple : Lecture dun fichier texte par une seule opration
Open "c:\autoexec.bat" for Input as 1
L = LOF(1)
Text = input(L, 1)

2.11.2 Fichiers Binaires
2.11.2.1 Ouverture en Ecriture
Open Nom_physique for Binary Access Write as Numro
Exemple :
Open "test01.bin" for Binary Access Write as 1
Ncrase pas le fichier si dj existant.
2.11.2.2 Ouverture en Lecture
Open Nom_physique for Binary Access Read as Numro
Exemple :
Open "test01.bin" for Binary Access Read as 2
2.11.2.3 Ouverture en Ajout
Open Nom_physique for Binary Access Write as Numro
Seek #Numro, LOF(Numro) + 1
2.11.2.4 Ecriture dans un fichier binaire
Put #Numro, [Position] , Variable
Exemple :
X=20
Put #1, ,X
Tovnnvon c.cncncncc 1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
2.11.2.5 Procdure de lecture
Get #Numro, [Position] , Variable
2.11.2.6 Recherche directe
Seek #Numro, Position
2.11.2.7 Lecture de la position courante
Pos = Seek (Numro)
Ou encore : Pos = Loc(Numro)
2.11.3 Fichiers denregistrements
2.11.3.1 Ouverture en Ecriture
Open Nom_physique for Random Access Write as Numro Len = Len(Enreg)
2.11.3.2 Ouverture en lecture
Open Nom_physique for Random Access Read as Numro Len = Len(Enreg)
2.11.3.3 Ouverture en Ajout
Open Nom_physique for Random Access Write as Numro Len = Len(Enreg)
Seek #Numro, LOF(Numro)/Len(Enreg) + 1
Remarques :
1- Un fichier denregistrements est gr comme un fichier binaire.
2- Un fichier binaire ou denregistrements peut tre lu bloc par bloc (ou crit bloc par
bloc) laide des tableaux :
Exemple :
Dim T(1 to 20) as Integer
Get #1,, T
Put #1,, T
Tovnnvon c.cncncncc 1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Chapitre 3 : Gestion des bases de donnes par les
objets DAO
3.1. Accs une base de donnes laide du contrle Data
3.1.1 Introduction
On utilise un objet de type Data. Exemple Data1
Lajout dun objet Data linterface permet de charger la bibliothque des objets DAO (Data
Access Object) qui offrent plusieurs possibilits daccs aux bases de donnes. Ce qui ajoute
la rfrence : [Microsoft DAO 3.51 Object Library] Dans loption
[Projets/Rfrences] du menu. Cette rfrence doit tre slectionne explicitement si
on veut utiliser les autres objets DAO sans passer par le contrle Data (voir II).
Les 4 boutons (First, Previous, Next et Last) permettent de parcourir les enregistrements
points par la base de donnes.
Un objet data offre 5 proprits de base pour la dfinition et la manipulation des bases de
donnes :
1- DatabaseName Cest une chane de caractre qui contient le nom et le chemin
de la base de donnes.
2- RecordSource Cest une chane de caractre qui contient le nom de la table
ouvrir ou la requte SQL.
3- RecordSet Cest un objet qui devra contenir les enregistrements d'une table
ou du rsultat d'excution d'une requte SQL.
4- Connect Par dfaut ayant la valeur "Access", cette proprit permet de
prciser le type de la base de donnes ouvrir. Les valeurs
suivantes son aussi proposes :
"DBASE III;" , "DBASE IV;" , "DBASE 5.0;" , "Excel
3.0;" , "Excel 4.0;" , etc...
5- Database Cet objet permet laccs la structure de la base de donnes.
3.1.2 Ouverture dune base de donnes
Data1.DatabaseName = "nom de la base de donnes"
Data1.RecordSource = "nom dune table ou requte Select SQL"
Data1.Refresh Aprs chaque changement de
base de donnes ou de table, il est
ncessaire de rafrachir.
Une autre solution consiste remplir DatabaseName et RecordSource au cours de
la cration. Dans ce cas on na pas besoin de rafrachir.
3.1.3 Lecture des enregistrements par Liaison avec le contrle Data
Tous les contrles qui disposent des proprits DataSource et DataField peuvent
tre relis une base de donnes par lintermdiaire de ces deux proprits. On met dans
DataSource le nom de lobjet Data utilis et dans DataField le champs afficher (le nom
Tovnnvon c.cncncncc 1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
de la table et suppos dj introduit dans la proprit RecordSource de lobjet Data). le
dfilement des donnes est ralis automatiquement en cliquant sur les boutons de lobjet
Data.
Exemple :
Text1.DataSource = Data1
Text1.DataField = "Nom"
Le remplissage de DataSource doit obligatoirement tre ralis au cours de la cration. La
proprit DataField peut tre affecte au cours de la cration ou lors de lexcution.
Parmi les contrles qui peuvent tre relis une base de donnes on a : TextBox, Label,
CheckBox, ComboBox, MsFlexGrid.
3.1.4 Modification laide des contrles relis au contrle data
La possibilit de modification est assure par lintermdiaire de la proprit
ReadOnly qui peut avoir deux valeurs possibles : true ou false.
ReadOnly Par dfaut (False). Lorsquune zone de texte est relie un champ de table de
la base de donnes, alors toute modification sur la zone de texte sera
automatiquement enregistre sur la base, sauf si la valeur de la proprit
ReadOnly est False.
3.1.5 Ajout denregistrements laide des contrles relis
Pour cela, il est ncessaire de configurer la proprit EOFAction du contrle Data.
EOFAction Par dfaut, les ajouts ne sont pas autoriss laide des contrles relis. Si on
donne la valeur 2- Add New cette proprit possde, alors dans ce
cas, lorqsquon est la fin de la table lors du dfilement, un enregistrement
vide est ajout permettant la saisie via une zone de texte relie la base.
Les autres valeurs possibles de cette proprit sont :
0 Move Last : valeur par dfaut pas dajout
1 EOF : le bouton Next est dsactiv la fin de table.
Remarque :
Il existe une autre proprit qui permet de configurer le mode daffichage du contrle data :
BOFAction Cette proprit peut avoir deux valeurs possibles :
0 Move First : valeur par dfaut au dbut de table le pointeur
reste sur le premier enregistrement.
1 BOF : le bouton First est dsactiv au dbut de table.
3.1.6 Accs exclusif une base de donnes
On utilise la proprit Exclusive du contrle Data :
Exclusive Par dfaut (False), permet de prciser si laccs la base de donnes sera
ralis en mode exclusif (valeur True). Dans tel cas celle-ci sera alors
verrouille.
Tovnnvon c.cncncncc 1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
3.2 Accs aux donnes via la proprit Recordset du Contrle Data
3.2.1 Accs en Lecture
3.2.1.1 Accs un champ particulier
On utilise la proprit RecordSet
Pour accder au i
me
champ de lenregistrement (les indices commencent partir de
0). par exemple "Nom". On utilise :
Data1.Recordset.Fields(i) ou Data1.Recordset.Fields("Nom")
On peut aussi utiliser plus simplement lcriture suivante :
Data1.Recordset(i) ou Data1.Recordset("Nom")
3.2.1.2 Passage dun enregistrement lautre
Les fonctions suivantes de Recordset sont disponibles :
MoveNext : enregistrement suivant
MovePrevious : enregistrement prcdant
MoveLast : dernier enregistrement
MoveFirst : premier enregistrement
Exemple :
Data1.Recordset.MoveNext
Cette fonction doit tre appele chaque lecture dun enregistrement, pour passer au
suivant.
3.2.1.3 Test de dbordement
Il existe deux proprits qui permettent de tester si on na pas dbord aprs une
succession de lectures en utilisant MoveNext ou MovePrevious :
EOF : test de dbordement la fin de la table
BOF : test de dbordement au dbut de la table
Exemple :
Data1.Recordset.MoveFirst
While not Data1.Recordset.EOF
List1.AddItem Data1.RecordSet("Nom")
Data1.Recordset.MoveNext
Wend
3.2.1.4 Nombre de Champs
La proprit Count de lobjet Fields de Recordset permet de dterminer le nombre de
champs du Recordset :
Exemple :
NbFields = Data1.Recordset.Fields.Count
Tovnnvon c.cncncncc 1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
3.2.1.5 Nombre denregistrements
Le nombre denregistrement retrouvs peut tre obtenu laide de la proprit
RecordCount de lobjet Recordset. Cependant cette proprit ne se met jour quaprs avoir
parcouru tous les enregistrements du Recordset ou si on a appel explicitement la mthode
MoveLast.
Exemple :
Data1.Recordset.MoveLast
NbRecords = Data1.Recordset.RecordCount
Dans le cas d'un objet Recordset ne contenant aucun enregistrement, la proprit
RecordCount prend la valeur 0.
3.2.2 Ajout de nouveaux enregistrements
1/3- Ajout dun enregistrement Vide
Data1.Recordset.AddNew
2/3- Remplissage des donnes
Data1.Recordset(0) = Champ N 0
Data1.Recordset(1) = Champ N 1

Data1.Recordset(n) = Champ N n
3/3- Sauvegarde
Data1.Recordset.Update
3.2.3 Suppression denregistrements
1/3- Pointer sur lenregistrement supprimer par exemple une recherche avec une requte
SQL dans la proprit RecordSource
2/3- Suppression de lenregistrement en cours
Data1.Recordset.Delete
3/3- Saut un autre enregistrement, par exemple MoveNext
Data1.Recordset.MoveNext
Tovnnvon c.cncncncc !0/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Exemple : suppression de tous les clients dont le salaire est = 0
Data1.RecordSource = "Select * from Clients where Salaire = 0"
Data1.Refrech
While not Data1.Recordset.EOF
Data1.Recordset.Delete
Data1.Recordset.MoveNext
Wend
3.2.4 Modification
1/3- Edition e lenregistrement modifier
Data1.Recordset.Edit
2/3- Remplissage des nouvelles donnes
Data1.Recordset(0) = Champ N 0
Data1.Recordset(1) = Champ N 1

3/3- Sauvegarde
Data1.Recordset.Update
3.3. Autre Mthode de consultation laide dun objet Recordset
(sans utilisation dobjet Data)
3.3.1 Dclaration dune variable de gestion de base de donnes
La dclaration dune base de donnes peut tre ralise par lintermdiaire du type
Database.
Dim db As Database
3.3.2 Ouverture dune base de donnes existante
Cette opration peut tre ralise par lintermdiaire de la fonction OpenDatabase qui
retourne une rfrence sur un objet Database.
Set db = OpenDatabase("Nom de base de donnes")
Si lopration na pas russi, une erreur est alors dclenche et peut donc tre gre par
lintermdiaire de linstruction On Error Resume Next :
Exemple :
On Error Resume Next
Set db = OpenDatabase(NDB)
If Err <> 0 Then msgBox("Erreur douverture ")
Remarque :
Si on termine de se servir de la base de donnes, celle-ci peut tre ferme par
lintermdiaire de la mthode Close de la variable db : db.Close
3.3.3 Cration et utilisation dun objet Recordset
Nous avons dj vu que pour le cas dun objet Data les donnes sont accessibles par
lintermdiaire de la proprit Recordset qui est de type Recordset. Dans le cas ou nous
navons pas utilis dobjet Data, il est possible de dclarer un objet spar de type Reordset
Tovnnvon c.cncncncc !1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
qui pourra tre rempli avec les informations recherches partir dun objet Database. La
gestion dun tel objet peut tre effectue en 3 tapes :
1- La dclaration est ralise de la manire suivante :
Dim rs As Recordset
2- Louverture est ralise ensuite par lintermdiaire de la mthode OpenRecordset de
lobjet Database dj ouvert.
Syntaxe gnrale :
Set NomRecordset = NomDatabase.OpenRecordset("nom de table ou requte SQL" _
[ , TypeOuverture ])
Le paramtre optionnel TypeOuverture est une constante numrique permettant de
prciser le type douverture de la table : lecture seule ou mise jour par exemple. Il existe
des constantes prdefinies telles que : dbOpenTable (lecture seule) ou dbOpenDynaset
(Feuille de rponses dynamique : lecture et mise jour)
Exemple :
Set rs = db.OpenRecordset(Tb, dbOpenDynaset)
3- Aprs cette opration, lobjet Recordset peut tre gr de la mme manire que la
proprit Recordset dun objet Data.
Exemple :
Dim db As Database
Dim rs As Recordset
Set db = OpenDatabase(NDB)
Set rs = db.OpenRecordset("Etudiant", dbOpenDynaset)
While not rs.EOF
List1.AddItem rs("Nom")
rs.MoveNext
Wend
rs.Close Un Recordset aussi peut tre ferm
db.Close
3.4 Mise jour des donnes via un objet Recordset
De la mme manire que pour la consultation, il est possible dajouter, supprimer ou
modifier des enregistrement dune base de donnes par lintermdiaire dun objet Recordset.
Cela suppose la dclaration et louverture de ce dernier :
Exemple :
Dim db As Database
Dim rs As Recordset
Set db = OpenDatabase(NomDatabase)
Set rs = db.OpenRecordset(NomTable, dbOpenDynaset)
Dans la suite on utilisera lobjet Recordset rs pour faire les oprations de mise jour.
3.4.1 Ajout de nouveaux enregistrements
rs.AddNew
rs(0) = Champ N 0
Tovnnvon c.cncncncc !2/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
rs(1) = Champ N 1

rs(n) = Champ N n
rs.Update
3.4.2 Suppression denregistrements
rs.Delete
rs.MoveNext
Exemple : suppression de tous les clients dont le salaire est = 0
rs = db.OpenRecordset("Select * from Clients where Salaire = 0"
While not rs.EOF
rs.Delete
rs.MoveNext
Wend
3.4.3 Modification
rs.Edit
rs(0) = Champ N 0
rs(1) = Champ N 1

rs.Update
3.4.4 Proprits et mthodes complmentaires
Recherche dinformation avec les fonctions Findxxx :
Set RS=db.openRecordSet(" nom de table|Select * ",dbopenDynaSet)
RS.findXXX "crtre " avec XXX {First, Next, Previous, Last}
Tovnnvon c.cncncncc !1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Chapitre 4 : Gestion des bases de donnes par les
objets ADO
4.1. Introduction
ADO est une version volue des architectures RDO et DAO qui combine leurs
meilleures fonctions pour offrir une interface solide, simple d'utilisation. RDO et DAO
vous limitaient utiliser uniquement des fournisseurs de donnes conformes ODBC et
Jet. ADO, au contraire, permet l'accs rapide, haute performance, tous les types de
donnes et d'informations disponibles via OLE DB, tout en maintenant la surcharge du
systme un niveau peu lev en termes de mmoire et d'espace disque.
Modle de base de programmation ADO
ADO vous permet d'effectuer la squence d'actions suivante :
Vous connecter une source de donnes. Vous pouvez, si vous le souhaitez,
vous assurer que toutes les modifications apportes la source de donnes sont
prises en compte ou non.
Spcifier une commande vous donnant accs la source de donnes, en
ajoutant des paramtres variables ou en optimisant l'efficacit de la commande,
si vous le souhaitez.
Excuter la commande.
Si la commande renvoie des donnes sous la forme de lignes dans une table,
vous pouvez stocker ces dernires en mmoire cache afin de les examiner, de
les manipuler ou de les modifier.
En fonction de vos besoins, mettre jour la source de donnes en y intgrant
les lignes modifies stockes en mmoire cache.
Dtecter des erreurs (rsultant gnralement de l'tablissement d'une
connection ou de l'excution d'une commande).
Interface de
programmation
d'applications (API)
Base de Donnes
Relationnelle ou
non
ActiveX

Data
Objects (ADO).
(PASSERELLE)
Tovnnvon c.cncncncc !!/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Le tableau suivant prsente quelques-uns des fournisseurs OLE DB actuellement
disponibles.
Fournisseur de donnes
OLE DB
Description
SQLOLEDB Fournisseur OLE DB pour Microsoft SQL Server
MSDASQL Fournisseur OLE DB pour ODBC
Microsoft.Jet.OLEDB.3.51 Fournisseur OLE DB pour Microsoft Jet
MSIDXS Fournisseur OLE DB pour Microsoft Index Server
ADSDSOObject Fournisseur OLE DB pour Microsoft Active Directory Service
MSDAORA Fournisseur OLE DB pour Oracle
4.2. Accs une base de donnes laide du contrle Microsoft
ADO Data (ADODC)
4.2.1 Introduction
Le contrle ADODC permet aux dveloppeurs de crer facilement des feuilles
lies aux donnes comprenant des boutons de navigation utilisant ADO. Il utilise
Microsoft ActiveX Data Objects (ADO) pour crer rapidement des connexions entre les
contrles lis aux donnes et une source de donnes. Il s'agit d'un contrle graphique
(comprenant des boutons Prcdent et Suivant) qui constitue une interface simple
utiliser vous permettant de crer des applications de base de donnes avec un minimum
de code.
Pour que le contrle apparat sur la boite outil, on doit ajouter le composant
suivantes : rajouter dans le menu Projets - Composants, Microsoft ADO Data
Control 6.0 (OLEDB).
Tovnnvon c.cncncncc !/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Les principales proprits :
Proprit Description
ConnectionString Permet de dfinir une connexion avec la source de donnes.
Exemple :
ADODC1.ConnectionString = Provider=Microsoft.Jet.OLEDB.4.0;
Data Source= D:\BTS\GE2000.mdb;
Persist Security Info=False voir en dtail la partie
RecordSource Source de jeu denregistrement, elle peut etre un nom de table ou une
requete SQL
Exemple :
ADODC1.RecordSource= Classe
4.2.2 Ouverture dune base de donnes
ADODC1. ConnectionString = "chaine de connection la base de
donnes"
ADODC1.RecordSource = "nom dune table ou requte Select SQL"
ADODC1.Refresh Aprs chaque changement de base de donnes ou
de table, il est ncessaire de rafrachir.
Une autre solution consiste remplir ConnectionString et RecordSource au cours
de la cration. Dans ce cas on na pas besoin de rafrachir.
4.2.3 Lecture des enregistrements par Liaison avec le contrle ADODC
Tous les contrles qui disposent des proprits DataSource et DataField peuvent
tre relis une base de donnes par lintermdiaire de ces deux proprits. On met dans
DataSource le nom de lobjet ADODC utilis et dans DataField le champs afficher (le
nom de la table et suppos dj introduit dans la proprit RecordSource de lobjet Data). le
dfilement des donnes est ralis automatiquement en cliquant sur les boutons de lobjet
ADODC.
Exemple :
Text1.DataSource = ADODC1
Text1.DataField = "Nom"
Le remplissage de DataSource doit obligatoirement tre ralis au cours de la cration. La
proprit DataField peut tre affecte au cours de la cration ou lors de lexcution.
Parmi les contrles qui peuvent tre relis une base de donnes on a : TextBox, Label,
CheckBox, ComboBox, MsFlexGrid
4.2.4 Modification laide des contrles relis au contrle ADODC
La possibilit de modification est assure par lintermdiaire de la proprit Mode
(dcrit le mode de connexion en cours) qui peut avoir 8 valeurs possibles : 0, 1 (lecture seul),
2 (criture), 3 (lecture et criture), 4, 8, 12 et 16.
Tovnnvon c.cncncncc !/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Mode Par dfaut (0). Lorsquune zone de texte est relie un champ de table de la
base de donnes, alors toute modification sur la zone de texte sera
automatiquement enregistre sur la base, sauf si la valeur de la proprit Mode
est 1.
4.2.5 Ajout denregistrements laide des contrles relis
Pour cela, il est ncessaire de configurer la proprit EOFAction du contrle
ADODC.
EOFAction Par dfaut, les ajouts ne sont pas autoriss laide des contrles relis. Si on
donne la valeur 2- AdDoAddNew cette proprit possde, alors dans ce
cas, lorqsquon est la fin de la table lors du dfilement, un enregistrement
vide est ajout permettant la saisie via une zone de texte relie la base.
Les autres valeurs possibles de cette proprit sont :
0 AdDoMoveLast : valeur par dfaut pas dajout
1 adStayEOF : le bouton Next est dsactiv la fin de table.
Remarque :
Il existe une autre proprit qui permet de configurer le mode daffichage du contrle
ADODC :
BOFAction Cette proprit peut avoir deux valeurs possibles :
0 AdDoMoveFirst : valeur par dfaut au dbut de table le
pointeur reste sur le premier enregistrement.
1 adStayBOF : le bouton First est dsactiv au dbut de table.
4.2.6 Accs exclusif une base de donnes
On utilise la proprit LockType du contrle ADODC :
LockType Par dfaut (3-adLockOptimistic), permet de prciser le type de verouillage
(concurrence) utilis pour laccs la base de donnes.
-1-adlockUnspecified
1-adlockReadOnly : lecture seule
2-addlockPessimistic : verouillage ds que vous faite des modifications
3-adLockOptimistic : lenregistrement nest verouill quaprs lappel
UpDate
4-adlockBatchOptimistic : mise jours par lots
4.3 Accs aux donnes via la proprit Recordset du Contrle ADO
Data Control
4.3.1 Accs en Lecture
4.3.1.1 Accs un champ particulier
On utilise la proprit RecordSet
Pour accder au i
me
champ de lenregistrement (les indices commencent partir de
0). Par exemple "Nom". On utilise:
Tovnnvon c.cncncncc !/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
adodc1.Recordset.Fields (i) ou adodc1.Recordset.Fields ("Nom")
On peut aussi utiliser plus simplement lcriture suivante :
adodc1.Recordset (i) ou adodc1.Recordset ("Nom")
4.3.1.2 Passage dun enregistrement lautre
Les fonctions suivantes de Recordset sont disponibles :
MoveNext : enregistrement suivant
MovePrevious : enregistrement prcdant
MoveLast : dernier enregistrement
MoveFirst : premier enregistrement
Exemple :
adodc1.Recordset.MoveNext
Cette fonction doit tre appele chaque lecture dun enregistrement, pour passer au
suivant.
4.3.1.3 Test de dbordement
Il existe deux proprits qui permettent de tester si on na pas dbord aprs une
succession de lectures en utilisant MoveNext ou MovePrevious :
EOF : test de dbordement la fin de la table
BOF : test de dbordement au dbut de la table
Exemple :
adodc1.Recordset.MoveFirst
While not adodc1.Recordset.EOF
List1.AddItem adodc1.RecordSet("Nom")
adodc1.Recordset.MoveNext
Wend
4.3.1.4 Nombre de Champs
La proprit Count de lobjet Fields de Recordset permet de dterminer le nombre de
champs du Recordset :
Exemple :
NbFields = adodc1.Recordset.Fields.Count
4.3.1.5 Nombre denregistrements
Le nombre denregistrements retrouvs peut tre obtenu laide de la proprit
RecordCount de lobjet Recordset. Cependant cette proprit ne se met jour quaprs avoir
parcouru tous les enregistrements du Recordset ou si on a appel explicitement la mthode
MoveLast.
Exemple :
adodc1.Recordset.MoveLast
NbRecords = adodc1.Recordset.RecordCount
Tovnnvon c.cncncncc !/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Dans le cas d'un objet Recordset ne contenant aucun enregistrement, la proprit
RecordCount prend la valeur 0.
4.3.2 Ajout de nouveaux enregistrements
1/3- Ajout dun enregistrement Vide
adodc1.Recordset.AddNew
2/3- Remplissage des donnes
adodc1.Recordset (0) = Champ N 0
adodc1.Recordset (1) = Champ N 1

adodc1.Recordset (n) = Champ N n
3/3- Sauvegarde
adodc1.Recordset.Update
Remarque :
On peut remplacer tout a par linstruction suivante :
adodc1.Recordset.addNew Array( nomChamp1, nomChamp2,), Array(Val1,
val2,)
4.3.3 Suppression denregistrements
1/3- Pointer sur lenregistrement supprimer par exemple une recherche avec une requte
SQL dans la proprit RecordSource
2/3- Suppression de lenregistrement en cours
adodc1.Recordset.Delete
3/3- Saut un autre enregistrement, par exemple MoveNext
adodc1.Recordset.MoveNext
Exemple : suppression de tous les clients dont le salaire est = 0
Adodc1.RecordSource = "Select * from Clients where Salaire = 0"
Adodc1.Refrech
While not Adodc1.Recordset.EOF
Adodc1.Recordset.Delete
Adodc1.Recordset.MoveNext
Wend
4.3.4 Modification
1/2- Remplissage des nouvelles donnes
Adodc1.Recordset (0) = Champ N 0
Adodc1.Recordset (1) = Champ N 1

2/2- Sauvegarde
Adodc1.Recordset.Update
Tovnnvon c.cncncncc !/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Remarques :
On peut remplacer tout a par linstruction suivante :
adodc1.Recordset.Update Array( nomChamp1, nomChamp2,), Array(Val1,
val2,)
On remarque aussi labsence de la mthode edit dans le cas de la DAO.
4.4 Accs aux donnes via lobjet Connection
4.4.1 Cration d'une rfrence ADO
Avant de pouvoir utiliser ADO dans votre application Visual Basic, vous devez crer
une rfrence la bibliothque Microsoft ActiveX Data Objects 2.0.
Pour crer une rfrence la bibliothque d'objets ADO
1. Dans le menu Projet, cliquez sur Rfrences.
2. Slectionnez Microsoft ActiveX Data Objects 2.0 Library, puis cliquez sur OK.
4.4.2 Dclaration d'un objet Connexion
Une fois que vous avez cr une rfrence la bibliothque d'objets ADO, vous pouvez
dclarer un objet Connection dans votre application. En vous servant de l'objet
Connection, vous pouvez alors crer l'objet Command ou Recordset.
Remarque moins que vous n'utilisiez ADO et DAO dans la mme application,
vous n'avez pas besoin de faire prcder les types de donnes ADO du prfixe
ADODB .
L'exemple de code suivant dclare un nouvel objet Connection et en cre une instance:
Dim cnx As Connection
Set cnx = New Connection
4.4.3 Spcification d'un fournisseur de donnes
Une fois que vous avez cr une instance d'un objet Connection, vous devez
spcifier un fournisseur de source de donnes OLE DB. Pour ce faire, dfinissez la
proprit Provider.
L'exemple de code suivant spcifie le fournisseur de donnes Microsoft SQL Server
OLE DB :
cnx.Provider = "SQLOLEDB"
4.4.4 Passage des informations de connexion
La dernire tape, avant l'tablissement d'une connexion avec une source de
donnes, consiste spcifier les informations de connexion. Pour ce faire, dfinissez la
proprit ConnectionString de l'objet Connection.
Les arguments de chane de connexion sont utiliss avec le fournisseur SQL Server OLE
DB.
Argument Connexion Description
Tovnnvon c.cncncncc 0/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
User ID Nom d'utilisateur valide
Password Mot de passe utilisateur valide
Data Source Nom du serveur distant
Initial Catalog Nom de base de donnes dans la source de
donnes externe
L'exemple de code suivant spcifie un fournisseur Microsoft SQL Server et fournit
des informations sur la connexion par le biais de la proprit ConnectionString :
With cnx
.Provider = "SQLOLEDB"
.ConnectionString = "User ID=sa;Password=;" & _
"Data Source=MSERIES1;" & _
"Initial Catalog=StateUBookstore"
End With
4.4.5 Connexion une source de donnes
Une fois que vous avez spcifi un fournisseur OLE DB et pass les informations
ConnectionString, utilisez la mthode Open pour tablir une connexion avec la source de
donnes.
4.4.6 Exemple
Connexion une source de donnes
Sub cmdConnect_Click()
' La variable d'objet de connexion cnx
' a t dclare au niveau Module
' Cre une instance de la variable d'objet Connection
Set cnx = New Connection
' tablit une connexion
With cnx
.Provider = "SQLOLEDB"
.ConnectionString = "User ID=sa;" & _
"Data Source=MSERIES1;" & _
"Initial Catalog=StateUBookstore"
' Ouvre la connexion
.Open
End With
End Sub
Dconnexion d'une source de donnes
Sub cmdClose_Click()
cnx.Close
Set cnx = Nothing
Tovnnvon c.cncncncc 1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
End Sub
4.5 Accs aux donnes via lobjet Command
L'objet ADO Command accde et cre des requtes qui sont excutes sur une
source de donnes. Vous pouvez galement utiliser cet objet pour accder aux procdures
stockes d'une base de donnes externe.
Si vous faites appel ADO, vous n'avez pas besoin de crer d'objet Connection
avant d'utiliser l'objet Command. Cependant, si vous n'associez pas le nouvel objet
Command une connexion active, un nouvel objet Connection implicite sera
automatiquement cr au moyen de ressources serveur supplmentaires.
4.5.1 Proprits de l'objet Command
Le tableau suivant dcrit les proprits de l'objet Command les plus couramment
utilises.
Proprit Description
ActiveConnection Dfinit ou renvoie une connexion active utilise par l'objet.
CommandText Commande SQL, nom de procdure stocke ou nom de table qui sera
utilis par l'objet.
CommandType Indique si la proprit CommandText est le nom d'une commande
SQL, d'une procdure stocke ou d'une table.
Prepared Indique si la commande SQL doit tre cre en tant que procdure
stocke temporaire.
State Indique si la commande est actuellement ouverte, ferme ou en cours
d'excution.

Si vous n'utilisez pas de connexion active lorsque vous crez l'objet Command,
vous devez passer la chane de connexion requise la proprit ActiveConnection.
4.5.2 Mthodes de l'objet Command
Le tableau suivant dcrit les mthodes de l'objet Command.
Mthode Description
Cancel Annule la commande en
cours d'excution.
CreateParameter Cre un objet paramtre
(destin tre utilis avec
des procdures stockes).
Execute Excute une commande
SQL.

4.5.3 Crer une commande partir d'une connexion
Bien que ce ne soit pas obligatoire, il est prfrable, parce que plus efficace, de crer
des objets Command partir de connexions tablies. Une fois l'objet Command cr, il
Tovnnvon c.cncncncc 2/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
peut tre utilis pour excuter la commande spcifie ou pour crer un jeu
d'enregistrements.
L'exemple de code suivant utilise un objet Connection et un objet Command pour
augmenter de dix pour cent le prix du livre pour tous les enregistrements de la table
Books :
Dim comPriceUpdate As Command
Set comPriceUpdate = New Command
With comPriceUpdate
' Un objet Connection existant est rfrenc
.ActiveConnection = cnx
.CommandText = "UPDATE Books SET Price = Price * 1.1"

' appelle la mthode Execute pour mettre jour les prix
.Execute
End With

4.5.4 Cration d'un objet Command autonome
Comme ADO fournit dj un modle objet, vous n'avez pas besoin de crer
explicitement un objet Connection. Au lieu de cela, vous pouvez passer les informations
de connexion requises la proprit ActiveConnection de l'objet Command. la suite
de quoi, quand vous utiliserez la mthode Execute pour excuter la commande SQL, une
connexion sera tablie pour vous. Cependant, si vous utilisez cette technique, vous ne
pouvez plus accder l'objet Connection partir de votre code Visual Basic.
L'exemple de code suivant utilise l'objet Command pour augmenter de dix pour
cent le prix du livre pour tous les enregistrements de la table Books :
Dim comPriceUpdate As Command
Set comPriceUpdate = New Command
With comPriceUpdate
' Aucun objet connexion n'est utilis
.ActiveConnection = "Provider=SQLOLEDB;" & _
"User ID=sa;" & _
"Data Source=MSERIES1;" & _
"Initial Catalog=StateUBookstore"
.CommandText = "UPDATE Books SET Price = Price * 1.1"
' Appel la mthode Execute pour mettre jour les prix
.Execute
End With
Tovnnvon c.cncncncc 1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
4.6 Accs aux donnes via lobjet RecordSet
L'objet Recordset permet votre application d'accder aux donnes renvoyes par
une requte SQL. Cette requte peut tre cre par l'application ou elle peut rsider sur le
serveur en tant que procdure stocke. En vous servant de l'objet Recordset, vous pouvez
naviguer dans les enregistrements renvoys ou diter leur valeur.
4.6.1 Proprits de l'objet Recordset
Le tableau suivant dcrit les proprits de l'objet Recordset les plus communment
utilises pour crer un jeu d'enregistrements.
Proprit Description
ActiveCommand Renvoie la commande active pour le jeu d'enregistrements.
ActiveConnection Dfinit ou renvoie la connexion active pour le jeu d'enregistrements.
CursorLocation Dfinit ou renvoie l'emplacement du curseur. La valeur par dfaut est
adUseServer.
CursorType Dfinit ou renvoie le type du curseur. La valeur par dfaut est
adOpenForward.
LockType Dfinit ou renvoie le type du verrouillage d'enregistrement. La valeur
par dfaut est adLockReadOnly.
MaxRecords Dfinit ou renvoie le nombre maximal d'enregistrements renvoyer.
PersistFormat Dtermine le format dans lequel les donnes du jeu d'enregistrements
sont sauvegardes lorsque la mthode Save est appele.
RecordCount Renvoie le nombre d'enregistrements contenus dans le jeu
d'enregistrements.
State Renvoie l'tat en cours du jeu d'enregistrements.
4.6.2 Mthodes de l'objet Recordset
Le tableau suivant dcrit les mthodes de l'objet Recordset les plus communment
utilises pour crer un jeu d'enregistrements.
Mthode Description
Open Excute une commande SQL et ouvre un curseur.
Close Ferme le jeu d'enregistrements.
Requery Rexcute la commande SQL et recre le jeu d'enregistrements.
Resync Ractualise les enregistrements cachs d'un jeu d'enregistrements.
Save Enregistre un jeu d'enregistrements dans un fichier qui pourra tre rouvert
ultrieurement.

4.6.3 Cration d'un jeu d'enregistrements
Vous pouvez crer un objet Recordset bas sur une connexion active vers une
source de donnes. Ce faisant, vous limitez le nombre de connexions et vous pouvez rduire
la quantit de ressources du client et du serveur utilises par votre application. Selon les
Tovnnvon c.cncncncc !/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
besoins du jeu d'enregistrements, il vous faudra peut-tre crer dans un premier temps un
objet Connection ou Command explicite. Si vous n'utilisez pas de faon explicite un objet
Connection ou Command, un jeu d'enregistrements autonome est automatiquement cr.
Les fonctionnalits du jeu d'enregistrements que vous crez sont dtermines par les
valeurs spcifies pour les proprits CursorLocation et CursorType.
4.6.4 Cration dun RecordSet par utilisation d'un objet Connection et
d'un objet Command
Vous pouvez crer un jeu d'enregistrements partir d'un objet Command existant.
Pour ce faire, ouvrez la connexion et crez l'objet Command. Utilisez ensuite la mthode
Execute de l'objet Command pour crer le jeu d'enregistrements.
Exemple :
Sub cmdConnect_Click()
' Dclare les variables objet
Dim cnStateUBookstore As Connection
Dim comPriceUpdate As Command
Dim rsStudents As Recordset
' Instancie les variables
Set cnStateUBookstore = New Connection
Set comPriceUpdate = New Command
Set rsStudents = New Recordset
' tablit une connexion
With cnStateUBookstore
.Provider = "SQLOLEDB"
.ConnectionString = "User ID=sa;" & _
"Data Source=MSERIES1;" & _
"Initial
Catalog=StateUBookstore"
.Open
End With
' Cre un objet Command
With comPriceUpdate
.ActiveConnection = cnStateUBookstore
.CommandText = "SELECT StudentID FROM Students"
End With
' Cre lenregistrement
Set rsStudents = comPriceUpdate.Execute
End Sub
Tovnnvon c.cncncncc /1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
4.6.5 Cration dun RecordSet par utilisation d'un objet Connection
4.6.5.1 Utilisation de la mthode Open
Vous pouvez crer directement un jeu d'enregistrements partir d'une connexion
active. Pour ce faire, ouvrez normalement la connexion, et passez l'objet Connection au jeu
d'enregistrements au moyen de la mthode Open.
Exemple :
Sub cmdOpenRecordset_Click()
' Dclare et instancie les variables dobjet
Dim cnStateUBookstore As Connection
Dim rsStudents As Recordset
Set cnStateUBookstore = New Connection
Set rsStudents = New Recordset
' tablit une connexion
With cnStateUBookstore
.Provider = "SQLOLEDB"
.ConnectionString = "User ID=sa;" & _
"Data Source=MSERIES1;" & _
"Initial
Catalog=StateUBookstore"
.Open
End With
' Ouvre un enregistrement laide de la variable de
lobjet Connection
rsStudents.Open "SELECT StudentID FROM Students",
cnStateUBookstore
End Sub
4.6.5.2 Utilisation de la mthode Execute
Vous pouvez galement crer un jeu d'enregistrements en vous servant de la mthode
Execute de l'objet Connection. Cette mthode ne prenant pas en charge les mmes
arguments que la mthode Open, votre jeu d'enregistrements adopte donc les proprits
dfinies l'origine pour l'objet Connection. Lorsque vous faites appel cette technique,
vous tes limit dans les fonctionnalits qui peuvent tre associes au jeu d'enregistrements.
Exemple :
Sub cmdConnect_Click()
' Dclare et instancie les variables objet
Dim cnStateUBookstore As Connection
Tovnnvon c.cncncncc /1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Dim rsStudents As Recordset
Set cnStateUBookstore = New Connection
Set rsStudents = New Recordset
' tablit une connexion
With cnStateUBookstore
.Provider = "SQLOLEDB"
.ConnectionString = "User ID=sa;" & _
"Data Source=MSERIES1;" & _
"Initial
Catalog=StateUBookstore"
.Open
End With
' Ouvre un enregistrement laide de la mthode Execute
Set rsStudents = cnStateUBookstore.Execute("SELECT
StudentID FROM Students")
End Sub

4.6.6 Cration d'un jeu d'enregistrements autonome
Lorsque vous crez un objet Recordset autonome, il n'est pas ncessaire qu'il existe
dj un objet Connection. Cet objet sera cr automatiquement, mais il ne sera pas
accessible depuis Visual Basic. Lorsque la mthode Open est utilise, les informations de
connexion requises doivent tre passes ADO.
L'exemple de code suivant montre comment crer un objet Recordset en tant qu'objet
autonome :
Dim rsStudents As Recordset
Set rsStudents = New Recordset

rsStudents.Open "SELECT StudentID FROM Students", _
"Provider=SQLOLEDB;" & _
"User ID=sa;" & _
"Data Source=MSERIES1;Initial Catalog=StateUBookstore"
4.7 Tri, Filtrage et recherche
4.7.1 Tri des enregistrements
En vous servant de sa proprit Sort, vous pouvez spcifier l'ordre dans lequel les
enregistrements apparaissent dans un jeu d'enregistrements.
Tovnnvon c.cncncncc /1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Remarque : Pour utiliser la proprit Sort avec SQL Server, vous devez utiliser un
curseur ct client (cursorLocation=adUseClient). En effet, selon le fournisseur, un
curseur ct client peut ou non prendre en charge le tri, et SQL Server ne le fait pas.
Lorsque vous effectuez un tri, vous pouvez choisir le mot cl ASC ou le mot cl
DESC. Pour trier les enregistrements en ordre croissant, utilisez ASC. Pour les trier en
ordre dcroissant, utilisez DESC.
L'exemple de code suivant trie en ordre croissant un jeu d'enregistrements sur le
champ LastName :
rsStudents.Sort = "LastName ASC"

Dsactivation du tri :
Pour rendre un jeu d'enregistrements son tat d'origine, entrez une chane vide
comme valeur de la proprit Sort. L'exemple de code suivant dsactive un tri :
rsStudents.Sort = ""
4.7.2 Filtrage des enregistrements
La proprit Filter vous permet de limiter le nombre d'enregistrements prsents.
Les enregistrements d'origine restent disponibles en mmoire, mais seuls ceux qui satisfont
aux critres de filtre sont affichs en tant que parties du jeu d'enregistrements.
L'exemple de code suivant n'affiche que les tudiants dont le solde est suprieur 1
000 dollars :
rsStudents.Filter = "AccountBalance > 1000"

Dsactivation d'un filtre :
Pour rendre un jeu d'enregistrements son contenu d'origine, donnez comme valeur
la proprit Filter la constante adFilterNone. L'exemple de code suivant dsactive un
filtre et rend disponible par le fait tous les enregistrements d'origine :
rsStudents.Filter = adFilterNone
4.7.3 Recherche des enregistrements
Bien qu'il soit possible d'employer la proprit Filter pour renvoyer un groupe
d'enregistrements issus d'un jeu d'enregistrements, vous pouvez aussi rechercher un
enregistrement spcifique. Utilisez la mthode Find pour rechercher un enregistrement
rpondant vos critres.
L'exemple de code suivant amne le pointeur du jeu d'enregistrements sur le premier
enregistrement contenant Gray comme nom de famille :
rsStudents.Find "Last_Name = 'Gray'"

Remarque : Lorsque vous spcifiez une valeur de chane, placez le texte entre
guillemets simples. Lorsque vous spcifiez une date, placez-la entre dises (#).
Tovnnvon c.cncncncc /1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Le tableau suivant dcrit les paramtres pris en charge par la mthode Find.
Paramtre Description
Criteria Expression dsignant le champ dans lequel doit s'effectuer la recherche et la
valeur retrouver.
SkipRows Nombre indiquant combien de lignes doivent tre sautes au dmarrage de la
recherche. Donnez ce paramtre la valeur (par dfaut) de zro pour inclure la
ligne en cours dans la recherche. Donnez-lui la valeur de 1 pour sauter la ligne
en cours.
Direction Indique dans quelle direction, partir de l'enregistrement en cours, doit
progresser la recherche (adSearchForward ou adSearchBackward). La valeur
par dfaut est adSearchForward.
Start Signet utiliser comme position de dpart.

Le tableau suivant dcrit les clauses de recherche utiliser lorsque vous spcifiez
des critres.
Clause Description
FieldName Nom du champ sur lequel s'effectue la recherche
Operator =, <, >, "like"
Value Date, chane, nombre

Remarque : Vous pouvez utiliser la mthode Find avec les proprits Sort et Filter
pour affiner votre recherche.
Tovnnvon c.cncncncc /1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Chapitre 5 : Accs la structure dune base de donnes
par les objets DAO
Laccs est ralis par lintermdiaire de la proprit Database du contrle Data.
5.1 Nombre de Tables
La proprit TableDefs de Database permet daccder toutes les informations sur
les tables de la base de donnes.
Data1.Database.TableDefs.Count
5.2 Noms des Tables
Data1.Database.TableDefs(i).Name
Exemple :
For i = 0 To Data1.Database.TableDefs.Count - 1
If (Data1.Database.TableDefs(i).Attributes = 0) Then
Combo1.AddItem Data1.Database.TableDefs(i).Name
End If
Next
La proprit Attributes de Tabledefs(i) la valeur 0 par dfaut pour toutes les tables
ordinaires. Certaines tables systmes sont ajoutes au cours de la cration dune base de
donnes, celles-ci ont alors une valeur de la proprit Attributes diffrents de 0. Ce qui
intresse lutilisateur dune base de donnes cest uniquement les tables ordinaires.
5.3 Nombre de Champs dune Table
laccs aux tables est ralis par lintermdiaire de la proprit TableDefs de Database.
Laccs aux champs dune Table i et ralis par lintermdiaire de la proprit Fields de
TableDefs(i).
Ainsi, le nombre de champs de la table N i est donne par :
Data1.Database.TableDefs(i).Fields.Count
5.4 Noms des Champs dune Table
Champs N j de la table N i :
Data1.Database.TableDefs(i).Fields(j).Name
Exemple :
For j=0 to Data1.Database.TableDefs(i).Fields.Count-1
Combo1.AddItem
Data1.Database.TableDefs(i).Fields(j).Name
Next
5.5 Nombre dindexes dune Table
Laccs aux indexes dune Table i et ralis par lintermdiaire de la proprit Indexes
de TableDefs(i).
Ainsi, le nombre dindexes de la table N i est donne par :
Data1.Database.TableDefs(i).Indexes.Count
Tovnnvon c.cncncncc 0/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
5.6 Noms des Indexes dune Table
Indexe N j de la table N i :
Data1.Database.TableDefs(i).Indexes(j).Name
Exemple :
For j=0 to Data1.Database.TableDefs(i).Indexes.Count-1
Combo1.AddItem
Data1.Database.TableDefs(i).Indexes(j).Name
Next
5.7 Objets TableDef, Field et Index
La proprit TableDefs(i) est de type TableDef
La proprit Fields(i) est de type Field
La proprit Indexes(i) est de type Index
On peut ainsi utiliser des variables de ces types pour allger les critures prcdentes.
Par exemple :
Dim T as TableDef
Set T = Data1.Database.TableDefs(i)
For j=0 to T.Fields.Count-1
Combo1.AddItem T.Fields(j).Name
Next
Tovnnvon c.cncncncc 1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
Chapitre 6 : Cration dune base de donnes par les
objets DAO
6.1 Cration dun champs
Sub champs(Tb As TableDef, Nom As String, T As Integer, L As
Integer, Optional Etat As Boolean = True)
Dim F As Field
Set F = New Field
F.Name = Nom
F.Type = T
If (L > 0) Then F.Size = L
Tb.Fields.Append F
Tb.Fields(Nom).AllowZeroLength = Etat
End Sub
Les diffrents types sont engendrs par les constantes suivantes :
Constante Description Constante Description
dbBigInt
Big Integer
dbInteger
Integer
dbBinary
Binary
dbLong
Long
dbBoolean
Boolean
dbLongBinary
Long Binary
dbByte
Byte
dbMemo
Memo
dbChar
Char
dbNumeric
Numeric
dbCurrency
Currency
dbSingle
Single
dbDate
Date/Time
dbText
Text
dbDecimal
Decimal
dbTime
Time
dbDouble
Double
dbTimeStamp
Time Stamp
dbFloat
Float
dbVarBinary
VarBinary
dbVarBinary
VarBinary
dbVarBinary
VarBinary
6.2 Cration dun indexe
Sub indexer(Tb As TableDef, Nom As String, ref As String, Optional
Etat As Boolean = True)
Dim Ind As Index
Set Ind = New Index
Ind.Name = Nom
Ind.Fields = ref
Ind.Primary = True
Ind.Unique = Etat
Tb.Indexes.Append Ind
Tovnnvon c.cncncncc 2/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
End Sub
6.3 Cration dune table
Sub Creat_Banques(db As Database)
Set Tb = New TableDef
Tb.Name = "Banques"
champs Tb, "Code", dbInteger, 0
champs Tb, "Banque", dbText, 20
indexer Tb, "XCode", "Code"
db.TableDefs.Append Tb
End Sub
6.4 Cration de la base de donne
Sub Creat_Database(db As Database, NDB As String)
If (Dir(NDB) <> "") Then
MsgBox(NDB & Chr(13) & " existe dj"
Else
Screen.MousePointer = vbHourglass
Set db = CreateDatabase(NDB, dbLangGeneral)
If (db Is Nothing) Then
MsgBox "Erreur de cration de la base de donnes"
else
cration des tables :(exemple)
Creat_Banques db

End If
End If
Screen.MousePointer = Default
End Sub
Sub Creat_Database(dd As Database, NDB As String)
If (Dir(NDB) <> "") Then
If (MsgBox(NDB & Chr(13) & " existe dj" & Chr(13) & "
Voulez-vous la recrer?", vbInformation + vbYesNo) =
vbYes) Then
On Error Resume Next
Kill NDB
If Err <> 0 Then
MsgBox "ACCES REFUSE !", vbCritical, "ERREUR"
End If
Else
Succes = 0
End If
End If

Screen.MousePointer = vbHourglass
If Succes = 1 Then
On Error Resume Next
Set dd = CreateDatabase(NDB, dbLangGeneral)
If Err = 0 Then
If (dd Is Nothing) Then
MsgBox "Ne peut crer la base" & Chr(13) & NDB, 1,
"erreur de cration"
Tovnnvon c.cncncncc 1/1 1. ^/(11O+)
(11 I1(1)1Q+1 1) 1)/ )1)1I)/ 2I
else
cration des tables :

End If
End If
End If
Screen.MousePointer = Default
End Sub
Dim db As Database
Dim r As Recordset
Dim r2 As Recordset
'Set db = OpenDatabase("e:\labo\bib", 0, False, "dbase IV;")
'Set r = db.OpenRecordset("usager")
Set db = OpenDatabase("e:\applications\commune\commune")
Set r = db.OpenRecordset("Personnel", dbOpenDynaset) //feuille de reponse dynamique
r.Sort = "Code"
r.Filter = "nom like 'c*'"
Set r2 = r.OpenRecordset
'Print r.Sort
While Not r2.EOF
List1.AddItem r2(0) & "," & r2(1)
r2.MoveNext
Wend
r.FindFirst (CWhere)
r.FindNext (CWhere)
r.FindLast (CWhere)
r.NoMatch
L = r.GetRows(5)
For i = 0 To 4
List1.AddItem L(0, i)
Next
r.RecordCount
Data1.Recordset.AbsolutePosition
Data1.Recordset.PercentPosition