IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)

Early ou Late Binding

Par (site) (Blog)
 

"Les fiches VBA" sont une s�rie de petits tutoriels rapides regroupant les informations utiles sur un sujet donn�. Elles concernent le langage VBA dans son ensemble et ne sont pas sp�cifiques � un logiciel donn�. Vous y trouverez donc des informations valables pour Access, Excel, Word, Outlook, PowerPoint, ... Bonne lecture !

������������ � Version PDF (Miroir) Version hors-ligne (Miroir)

I. Qu'abordons-nous ici ?
II. Late ou Early Binding ???
II-A. Binding... k�sako ?
II-B. Early Binding
II-C. Late Binding
II-C-1. CreateObjet ou GetObject ?
II-C-1-a. GetObject
II-C-1-b. CreateObject
III. Remerciements


I. Qu'abordons-nous ici ?

L'objet sp�cifique de cette fiche est de permettre de comprendre et de diff�rencier le Late Binding (Liaison tardive) de l'Early Binding (Liaison anticip�e). Ces deux techniques vous permettront de sortir de certaines situation p�rilleuses dans vos d�veloppements de solutions pour des parcs h�t�rog�nes.


II. Late ou Early Binding ???


II-A. Binding... k�sako ?

Le compilateur Visual Basic ex�cute un processus appel� "Liaison" lorsqu'un objet est assign� � une variable d'objet, autrement dit, lorsqu'il lit une ligne telle que celle-ci :
Exemple PowerPoint

Set oSlide = Presentations("Pr�sentation1").Slides(1)

II-B. Early Binding

On parle d'Early Binding (ou Liaison anticip�e) lorsque la variable objet est d�clar�e dans un type objet pr�cis.

Ainsi, les exemples suivant permettront une liaison anticip�e :
Exemple Word

	Dim bkm as Word.BookMark		'Je veux un objet BookMark de la biblioth�que Word
Exemple DAO

	Dim rst as DAO.Recordset		'Je veux un objet Recordset de la biblioth�que DAO
Exemple Excel

	Dim rng as Excel.Range		'Je veux un objet Range de la biblioth�que Excel
exemple Access

	Dim frm	as Access.Form		'Je veux un objet Form de la biblioth�que Access
Dans la mesure du possible, il est pr�f�rable d'utiliser la liaison anticip�e (early binding), car ce genre de liaison permet au compilateur d'allouer de la m�moire et de r�aliser d'autres optimisations importantes avant m�me qu'une application ne s'ex�cute. Ces optimisations font que les objets en liaison anticip�e sont sensiblement plus rapides que ceux en liaison tardives.

D'autre part, le fait d'utiliser des variable objet en liaison anticip�e rend votre code beaucoup plus lisible, et vous facilitera �norm�ment la maintenance, puisque cette solution expose les membres (propri�t�s, m�thodes, ...) de vos objets au fur et � mesure de l'�criture de votre code (compl�tion - CTRL+Espace), et vous donne acc�s � l'aide dynamique sur la syntaxe.

Tous ces avantages font qu'il est pr�f�rable de toujours utiliser la liaison anticip�e (Early Binding) !

Bien �videmment, pour faire une liaison anticip�e, il faut que la biblioth�que concern�e soit ajout�e aux r�f�rences du projet en cours (Outils/r�f�rences...)


II-C. Late Binding

On parle de Late Binding (Laison tardive) lorsque la variable objet est dclar�e en tant qu'Object.

Ainsi, les d�claration suivantes impliquent une d�claration tardive :
exemple quelconque n�1

	Dim bkm as Object		'Je veux un objet 
exemple quelconque n�2

	Dim rst as Object		'Je veux un objet 
exemple quelconque n�3

	Dim rng as Object		'Je veux un objet 
exemple quelconque n�4

	Dim frm	as Object		'Je veux un objet 
Comme vous le constatez, aucune information n'est fournie au compilateur sur cette ligne. Il sait seulement qu'il va avoir un objet. Mais quel objet ? Issu de quelle classe ? Cela, il l'ignore.

Tous les avantages de l'Early Binding disparaissent donc. Pas de compl�tion, pas d'aide interactive, et la compilation ne peut ex�cuter les optimisations du code auxquelle on pourrait s'attendre, ce qui r�sulte en un code plus lent, forc�ment.

Comment affecter une variable Object ?
exemple Word

	Dim oApp as Object								'Je veux un objet 
	set oDApp = CreateObject("Word.Application")	    'Cr�er une nouvelle instance de la classe Application de Word
													'Et pointer la variable oAPP vers cet objet
exemple PowerPoint

	Dim oApp as Object		'Je veux un objet 
	set oApp = GetObject(, "PowerPoint.Application")	'r�cup�re une instance existante de l'application powerpoint
													'Et pointe la variable oApp vers cet objet

II-C-1. CreateObjet ou GetObject ?


II-C-1-a. GetObject

GetObject est une fonction particuli�rement int�ressante, car elle permet de renvoyer une r�f�rence � un objet fourni par un composant ActiveX.

Examinons d'abord la syntaxe
En provenance de l'aide Office 2007 :

GetObject([pathname] [, class])

'### La syntaxe de la fonction GetObject comprend les arguments nomm�s suivants :
'### �l�ment Description 
'pathname 	Facultatif. Variable de type Variant (String). Chemin d'acc�s complet et nom du fichier contenant l'objet  extraire.
'			Si l'argument pathname est omis, l'argument class est obligatoire. 
'class 		Facultatif. Variable de type Variant (String). Cha�ne repr�sentant la classe de l'objet. 
Donc, cette fonction permet de r�cup�rer la r�f�rence � un objet.
Seul le PathName est mentionn� :

Sub proc_PremierGet()
    Dim x As Object
    Set x = GetObject("d:\oula.doc")
    Debug.Print TypeName(x)
    Set x = Nothing
End Sub
'Affiche ceci dans la fen�tre d'ex�cution (CTRL+G) :
'
'   Document
Le PathName est la Class sont mentionn�s :

Sub proc_DeuxiemeGet()
    Dim x As Object
    Set x = GetObject("d:\oula.doc","Word.Document")
    Debug.Print TypeName(x)
    Set x = Nothing
End Sub
'Affiche ceci dans la fen�tre d'ex�cution (CTRL+G) :
'
'   Document
Seule la Class est mentionn�e :

Sub proc_TroisiemeGet()
    Dim x As Object
    Set x = GetObject(,"Word.Application")
    Debug.Print TypeName(x)
    Set x = Nothing
End Sub
'Affiche ceci dans la fen�tre d'ex�cution (CTRL+G) :
'
'   Application
Utilisez la fonction GetObject lorsqu'il existe une instance en cours de l'objet ou si vous souhaitez cr�er l'objet avec un fichier d�j� charg�. S'il n'existe aucune instance en cours et si vous ne voulez pas d�marrer l'objet en chargeant un fichier, utilisez la fonction CreateObject


II-C-1-b. CreateObject










III. Remerciements

Je tiens � remercier le travail d'�quipe de tous les b�n�voles qui participent � ce site, et, dans le cadre des observations et corrections apport�es � ce tutoriel, mes remerciements vont tout particuli�rement �

Correction
  • xxx
Commentaires
  • xxx


������������ � Version PDF (Miroir) Version hors-ligne (Miroir)

Valid XHTML 1.1!Valid CSS!

Copyright © 2010 Maxence HUBICHE. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.