VBA Le B.A.-BA du VBA

Charabia ?

Automatisation ActiveX, Automation ActiveX, Composant ActiveX, Document ActiveX, OCX ActiveX, Serveur OLE, Automation OLE ... La terminologie varie suivant les versions, les applications ou les traductions ! Si la plupart des termes sont synonymes, il y aurait des subtilités...
Pour simplifier, on parlera ici de composant ActiveX.

Composants ActiveX

Les composants ActiveX définissent des objets et permettent de créer des bibliothèques personnalisées qui sont liées dynamiquement à un programme pendant son exécution.
ActiveX pour AutoCAD sert d'interface entre AutoCAD et l'application client (VBA, VB...) Il ne peut fonctionner que si acad.exe est lancé.

Les composants sont inscrits dans la base de registres de Windows et sont donc connus du système d'exploitation lui-même.
La registration (ou enregistrement ?) des composants ActiveX est faite automatiquement lors de la création du composant. Pour les programmes que vous distribuez à des tiers, la registration du serveur est effectuée par la procédure d'installation.

La compilation du source fournira 2 types de composants :
  • DLL ActiveX ou serveur in-process : Bibliothèque d'objets exécutée dans le même espace que l'application client.
  • EXE ActiveX ou serveur out-process : Application fournisseur d'objets disposant de son propre espace d'adressage.
ActiveX pour AutoCAD transforme les éléments d'AutoCAD en objets pouvant être modifiés par les langages utilisant les mêmes caractéristiques :
  • Visual Basic
  • VBA pour AutoCAD, VBA pour Excel, VBA pour Word ...
  • Delphi ...

Cherchons des POO

P.O.O = Programmation orientée objet.

Les Objets d'AutoCAD
Les objets graphiques (lignes, arcs...) mais aussi les calques, les styles, les vues, les dessins...
Chaque objet est relié à son objet parent.
L'objet racine est l'application AutoCAD.

acad.tlb
Les propriétés et méthodes des objets AutoCAD sont décrites dans une bibliothèque de types.
Pour y accéder, cochez la case Bibliothèque d'objets AutoCAD dans la boîte Références du menu Outils de VBA.


Méthode : Fonction effectuant une action sur un objet.
Exemple : BaCercle.Update - Update est une méthode agissant sur l'objet BaCercle

Propriété : Information (attribut) sur l'état d'un objet.
Exemple : BaCercle.Color = acRed - Color est une propriété de l'objet BaCercle

Classe : Pour créer un objet il faut définir une classe pour cet objet, puis créer une référence vers cet objet (Voir paragraphe suivant) .
Exemple : "AutoCAD.Application" est la classe des objets AutoCAD

Des LIAISONS (non dangereuses)

Pour créer une référence à un objet racine tel que AutoCAD.Application ou Excel.Application :
  1. Vous devez déclarer une variable objet dans l'application client (VBA, VB...)
    	Dim BaCadObj as Object
    	
    BaCadObj peut, bien entendu, être remplacé par le nom de votre choix.
    La déclaration peut être Public et se fait alors dans la section Général :
    	Public BaCadObj as Object
    	
  2. Création d'une référence objet à l'aide de Set.
    GetObject charge un objet Automation depuis un fichier déterminé et lance l'application serveur (ici AutoCAD). Permet également d'accéder à une classe si elle est déjà en mémoire.
    La syntaxe de GetObject donne :
    	GetObject(Chemin[, Classe])	
    	
    Chemin : Facultatif - Nom et chemin complet du fichier depuis lequel l'objet doit être chargé. Le paramètre Classe est alors facultatif.
    Si l'application est déjà en fonctionnement, vous n'avez pas à spécifier Chemin, mais Classe est alors obligatoire. Notez la virgule.
    	Set BaCadObj = GetObject(, "AutoCAD.Application")	
    	
    Avec CreateObject(Classe) il est inutile de spécifier le chemin du serveur. (Le chemin sera lu dans la base des registres).Notez qu'ici pas de virgule.
    	Set BaCadObj = CreateObject("AutoCAD.Application")	
    	
    Attention avec CreateObject : Si l'application est déjà en cours, une nouvelle instance est créée.


  3. Pour détruire une référence à un objet :
    	Set BaCadObj = Nothing	
    	
    Le compteur d'instances est décrémenté et le programme terminé si ce compteur arrive à zéro.

Création STANDARD d'une référence

Pour créer une référence à partir de VB, VBA pour Excel, Delphi, etc, utilisez le code suivant :
	Dim BaCadObj as Object		
	Dim ObjDessin as Object		
	On Error Resume Next
	Set BaCadObj = GetObject(, "AutoCAD.Application")
	If Err Then
   	  Err.Clear
    	  Set BaCadObj = CreateObject("AutoCAD.Application")
    	  If Err Then
            MsgBox Err.Description
            Exit Sub
   	  End If

	End If	

	Set ObjDessin = BaCadObj.ActiveDocument
	
Ligne 1 : Déclaration de l'objet racine Application.
Ligne 2 : Déclaration de l'objet Dessin en cours de l'application.
Ligne 3 : Si erreur, continuer à la ligne suivante.
Ligne 4 : Si AutoCAD tourne déjà, créer la référence.
Ligne 5 : Si erreur, c'est à dire si AutoCAD n'était pas lancé.
Ligne 6 : Effacer le contenu de l'objet Err.
Ligne 7 : Créer une instance d'AutoCAD.
Ligne 8 : Si nouvelle erreur, c.à d. qu'AutoCAD n'a pu être lancé.
Ligne 9 : Afficher le message d'erreur.

Pour lancer Excel à partir de VBA, de VB, etc, utiliser le même code en remplaçant "AutoCAD.Application" par "Excel.Application".

Création d'une référence à partir de VBA pour AutoCAD

A partir de VBA pour AutoCAD, il n'est pas nécessaire d'utiliser le code du paragraphe précédent.
En effet, à l'ouverture de VBA, il y a obligatoirement une instance AutoCAD et l'objet ThisDrawing est créé automatiquement.
ThisDrawing correspond à l'objet ObjDessin du paragraphe précédent, c.à d. à l'objet dessin_en_cours_de_l'application_AutoCAD.
Si vous désirez une nouvelle instance d'AutoCAD, utilisez CreateObject.
Par contre utisez le code du paragraphe précédent si par exemple vous voulez lancer une application Excel, Access, etc, à partir de VBA pour AutoCAD.


--

© 1998-2000 FASOFT - Roger Rosec Tous droits réservés.