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 !
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 :
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 :
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
set oDApp = CreateObject (" Word.Application " )
|
exemple PowerPoint |
Dim oApp as Object
set oApp = GetObject (, " PowerPoint.Application " )
|
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 ])
|
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
|
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
|
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
|
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
Commentaires


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.