VBA Le B.A.-BA du VBA


Liste des exemples simplifiés de code :       
Versions optimisées pour le VBA d'AutoCAD version 14.01, R2000, 2002 et 2004
Ces exemples ne peuvent pas fonctionner tels quels en simple Visual Basic (VBx).



1 - Fonctions de Dessin

1.1 - Dessin d'une ligne donnée dans l'espace objet

    'Initialisation des variables
    Dim BaLigne As AcadLine       ' Nom arbitraire de la variable objet ligne
    Dim PtDep(0 To 2) As Double   ' Les variables des Points definies comme nombres
    Dim PtFin(0 To 2) As Double   ' a virgule flottante en double precision

    'Donnees
    PtDep(0) = 10#      ' Coordonnee en X du premier point
    PtDep(1) = 20#      ' Coordonnee en Y du premier point
    PtDep(2) = 0#       ' Coordonnee en Z du premier point
                
    PtFin(0) = 60#      ' Coordonnee en X du second point
    PtFin(1) = 100#     ' Coordonnee en Y du second point
    PtFin(2) = 0#       ' Coordonnee en Z du second point
                 
    'Creation de la ligne en Espace Objet
    Set BaLigne = ThisDrawing.ModelSpace.AddLine(PtDep, PtFin)
 


1.2 - Dessin d'un cercle dans l'espace objet

    'Initialisation des variables
    Dim BaCercle As AcadCircle       ' Nom arbitraire de la variable objet cercle
    Dim PtCentre(0 To 2) As Double   ' Les variables definies comme des nombres
    Dim LgRayon As Double            ' a virgule flottante en double precision

    'Donnees
    PtCentre(0) = 100#          ' Coordonnee en X du centre
    PtCentre(1) = 200#          ' Coordonnee en Y du centre
    PtCentre(2) = 0#            ' Coordonnee en Z du centre
                
    LgRayon = 50#               ' Longueur du rayon du cercle
                 
    ' Creation du cercle en Espace Objet
    Set BaCercle = ThisDrawing.ModelSpace.AddCircle(PtCentre, LgRayon)
 


1.2bis - Dessin d'un cercle dans l'espace papier

  ' Le code est presque identique au listing ci-dessus ; il suffit de remplacer
  ' ModelSpace par PaperSpace dans la derniere ligne :

    Set BaCercle = ThisDrawing.PaperSpace.AddCircle(PtCentre, LgRayon)

  ' Bien entendu pour voir le cercle, vous devez etre en espace papier.
 


1.3 - Dessin d'un cercle en choisissant le centre

    'Initialisation des variables
    Dim BaCercle As Object      ' Nom arbitraire de la variable objet cercle
    Dim PtCentre As Variant     ' variable definie du type variant
    Dim LgRayon As Double
                
    ' On cache la feuille pour pouvoir positionner le centre
    UserForm1.Hide

    'Donnees
    LgRayon = 70#       	' Longueur du rayon du cercle
    ' On demande de positionner le centre
    PtCentre = ThisDrawing.Utility.GetPoint(, "Centre du cercle :")
                    
    'Création du cercle
    Set BaCercle = ThisDrawing.ModelSpace.AddCircle(PtCentre, LgRayon)
 


1.4 - Dessin d'un arc de cercle dans l'espace objet

    'Initialisation des variables
    Dim BaArc As Object             ' Nom arbitraire de la variable objet arc
    Dim PtCentre(0 To 2) As Double  ' Les variables definies comme des nombres
    Dim LgRayon As Double           ' a virgule flottante en double precision
    Dim AngleDepDeg As Double       ' Angle forme par le Pt de Depart en degre
    Dim AngleDepRad As Double       ' Angle forme par le Pt de Depart en radian
    Dim AngleFinDeg As Double       ' Angle forme par le Pt de fin en degre
    Dim AngleFinRad As Double       ' Angle forme par le Pt de fin en radian
 
    'Donnees
    PtCentre(0) = 200#         	 		' Coordonnee en X du centre
    PtCentre(1) = 100#          		' Coordonnee en Y du centre
    PtCentre(2) = 0#            		' Coordonnee en Z du centre
    LgRayon = 80#               		' Longueur du rayon du cercle

    AngleDepDeg = 30#           		' Angle de depart a 30 degres
    AngleFinDeg = 180#          		' Angle de fin a 180 degres
    AngleDepRad = AngleDepDeg * 3.141592 / 180# ' Transformation en radians
    AngleFinRad = AngleFinDeg * 3.141592 / 180# ' Transformation en radians

    'Creation de l'arc
    Set BaArc = ThisDrawing.ModelSpace.AddArc(PtCentre, LgRayon, AngleDepRad, AngleFinRad)
 


1.5 - Dessin d'un quadrilatère dans l'espace objet

    'Initialisation des variables
    Dim BaQuadr As Object               ' Nom de la variable objet Quadrilatere
    Dim PtSommet(0 To 9) As Double      ' Sommets du quadrilatere
             
    'Donnees
    PtSommet(0) = 10#           ' Coordonnee en X du premier point
    PtSommet(1) = 20#           ' Coordonnee en Y du premier point
    PtSommet(2) = 100#          ' Coordonnee en X du 2ème point
    PtSommet(3) = 25#           ' Coordonnee en Y du 2ème point
    PtSommet(4) = 120#          ' Coordonnee en X du 3ème point
    PtSommet(5) = 70#           ' Coordonnee en Y du 3ème point
    PtSommet(6) = 30#           ' Coordonnee en X du 4ème point
    PtSommet(7) = 50#           ' Coordonnee en Y du 4ème point
    PtSommet(8) = 10#           ' Coordonnee en X du premier point pour clore
    PtSommet(9) = 20#           ' Coordonnee en Y du premier point pour clore
               
    'Creation du quadrilatere
    Set BaQuadr = ThisDrawing.ModelSpace.AddLightWeightPolyline(PtSommet)
    BaQuadr.Closed = True
    BaQuadr.Update              ' Mise a jour de l'affichage

    ' Bien ententu vous pouvez augmenter le nombre de sommets de la meme facon.
    ' Notez qu'il n'y a pas de valeurs en Z avec LightWeightPolyline.


2 - Fonctions d'Edition

2.1 - Création puis déplacement d'un cercle
 
    'Initialisation des variables
    Dim BaCercle As Object              ' Nom arbitraire de la variable objet cercle
    Dim PtCentre(0 To 2) As Double      ' Les variables definies comme des nombres
    Dim LgRayon As Double               ' a virgule flottante en double precision
    Dim NewCentre(0 To 2) As Double

    'Donnees
    PtCentre(0) = 100#          ' Coordonnee en X du centre
    PtCentre(1) = 200#          ' Coordonnee en Y du centre
    PtCentre(2) = 0#            ' Coordonnee en Z du centre

    NewCentre(0) = 300#         ' Nouvelle coordonnee en X du centre
    NewCentre(1) = 150#         ' Nouvelle coordonnee en Y du centre
    NewCentre(2) = 0#           ' Nouvelle coordonnee en Z du centre
                
    LgRayon = 50#               ' Longueur du rayon du cercle
                 
    ' Creation du cercle
    Set BaCercle = ThisDrawing.ModelSpace.AddCircle(PtCentre, LgRayon)
    BaCercle.Update             ' Mise a jour de l'affichage
               
    MsgBox "Le cercle a été créé. Nous allons maintenant procéder au déplacement."
    BaCercle.Move PtCentre, NewCentre
    BaCercle.Update             ' Mise a jour de l'affichage
    MsgBox "Le cercle a été déplacé."
 


2.2 - Déplacement de toutes les entités

    'Initialisation des variables
    Dim BaSelect As AcadSelectionSet
    Dim PtBase(0 To 2) As Double
    Dim PtDecal(0 To 2) As Double
    Dim I As Integer

    'Donnees
    PtBase(0) = 0#             ' Coordonnees en X du point de base
    PtBase(1) = 0#             ' Coordonnees en Y du point de base
    PtBase(2) = 0#             ' Coordonnees en Z du point de base
    PtDecal(0) = 300#          ' Nouvelle coordonnee en X du decalage
    PtDecal(1) = 150#          ' Nouvelle coordonnees en Y du decalage
    PtDecal(2) = 0#            ' Nouvelle coordonnees en Z du decalage
                 
    'Creation du jeu de selection
    Set BaSelect = ThisDrawing.SelectionSets.Add("BaVBa")
    'Selection de toutes les entites
    BaSelect.Select acSelectionSetAll
               
    For I = 1 To BaSelect.Count
        'le decompte commence a zero, c'est pourquoi on retire 1 de I
        BaSelect.Item(I - 1).Move PtBase, PtDecal
        BaSelect.Item(I - 1).Update
        MsgBox "L'Item " & I & " du jeu de selection a été déplacé."
    Next I



2.3 - Déplacement d'un jeu de sélection

    'Initialisation des variables
    Dim BaSelect As AcadSelectionSet
    Dim PtBase(0 To 2) As Double
    Dim PtDecal(0 To 2) As Double
    Dim I As Integer
                
    'Donnees
    PtBase(0) = 0#             ' Coordonnees en X du point de base
    PtBase(1) = 0#             ' Coordonnees en Y du point de base
    PtBase(2) = 0#             ' Coordonnees en Z du point de base
    PtDecal(0) = 200#          ' Nouvelle coordonnee en X du decalage
    PtDecal(1) = 100#          ' Nouvelle coordonnees en Y du decalage
    PtDecal(2) = 0#            ' Nouvelle coordonnees en Z du decalage
                 
    'Creation du jeu de selection
    Set BaSelect = ThisDrawing.SelectionSets.Add("BaVBa")
    'On cache la feuille pour acceder a AutoCAD
    UserForm1.Hide
    'Choix des entites
    Call BaSelect.SelectOnScreen

    'Deplacement des objets selectionnes
    For I = 1 To BaSelect.Count
        BaSelect.Item(I - 1).Move PtBase, PtDecal
        BaSelect.Item(I - 1).Update
    Next I
    UserForm1.Show



2.4 - Effacement d'objets sélectionnés

    'Initialisation des variables
    Dim BaSelect As AcadSelectionSet
    Dim I As Integer
                              
    ' Creation du jeu de selection
    Set BaSelect = ThisDrawing.SelectionSets.Add("BaVBa")
    'On cache la feuille pour la selection
    UserForm1.Hide
    'Selection des entites
    Call BaSelect.SelectOnScreen

    'Deplacement des objets selectionnes
    For I = 1 To BaSelect.Count
        BaSelect.Item(I - 1).Erase
    Next I
    ' Mise a jour de l'ecran
    ThisDrawing.Regen True
    MsgBox "Les " & BaSelect.Count & " entités sélectionnées ont été effacées"
    UserForm1.Show



2.5 - Copie d"entités sélectionnées

    'Initialisation des variables
    Dim BaSelect As AcadSelectionSet
    Dim BaCopie As Object
    Dim PtBase(0 To 2) As Double
    Dim PtDecal(0 To 2) As Double
    Dim I As Integer

    'Donnees
    PtBase(0) = 0#             ' Coordonnees en X du point de base
    PtBase(1) = 0#             ' Coordonnees en Y du point de base
    PtBase(2) = 0#             ' Coordonnees en Z du point de base
    PtDecal(0) = 200#          ' Nouvelle coordonnee en X du decalage
    PtDecal(1) = 100#          ' Nouvelle coordonnees en Y du decalage
    PtDecal(2) = 0#            ' Nouvelle coordonnees en Z du decalage
                 
    ' Creation du jeu de selection
    Set BaSelect = ThisDrawing.SelectionSets.Add("BaVBa")
    'On cache la feuille
    UserForm1.Hide
    'Selection des entites
    Call BaSelect.SelectOnScreen

    'Copie puis Deplacement des objets selectionnes
    For I = 1 To BaSelect.Count
        Set BaCopie = BaSelect.Item(I - 1).Copy
        BaCopie.Move PtBase, PtDecal
    Next I
    ThisDrawing.Regen True
    UserForm1.Show



2.6 - Obtenir l'arrondi d'un nombre
  ' L'utilisation de la fonction "format" est dans ce cas, le plus simple :

  nb1 = 25.23546789
  MsgBox nb1 & " avec 0.000 donnera " & Format(nb1, "0.000") ' résultat 25.235
  nb2 = 25.23556789
  MsgBox nb2 & " avec 0.000 donnera " & Format(nb2, "0.000") ' résultat 25.236
  nb3 = 25.23456789
  MsgBox nb3 & " avec 0.0 donnera " & Format(nb3, "0.0") ' résultat 25.2
  nb4 = 25.25556789
  MsgBox nb4 & " avec 0.0 donnera " & Format(nb4, "0.0") ' résultat 25.3
  nb5 = 25.23456789
  MsgBox nb5 & " avec 0 donnera " & Format(nb5, "0") ' résultat 25
  nb6 = 25.55556789
  MsgBox nb6 & " avec 0 donnera " & Format(nb6, "0") ' résultat 26
 

3 - Sélection d'Objets

3.1 - Sélectionner Tout

    'Initialisation des variables
    Dim BaSelect As AcadSelectionSet
                 
    'Creation du jeu de selection
    Set BaSelect = ThisDrawing.SelectionSets.Add("BaVBa")
    'Selection de toutes les entites
    BaSelect.Select acSelectionSetAll
                              
    MsgBox "Il y a  " & BaSelect.Count & " entités sélectionnées dans ce dessin"



3.2 - Sélection d'une Fenêtre

    'Initialisation des variables
    Dim BaSelect As AcadSelectionSet
    Dim Pt1(0 To 2) As Double
    Dim Pt2(0 To 2) As Double
    Dim I As Integer
                            
    'Donnees : coordonnées de la fenetre
    Pt1(0) = 50#               ' Coordonnee en X du premier point de la fenetre
    Pt1(1) = 100#              ' Coordonnee en Y du premier point de la fenetre
    Pt1(2) = 0#                ' Coordonnee en Z du premier point de la fenetre
    Pt2(0) = 150#              ' Coordonnee en X du second point de la fenetre
    Pt2(1) = 300#              ' Coordonnee en Y du second point de la fenetre
    Pt2(2) = 0#                ' Coordonnee en Z du second point de la fenetre

    'Creation du jeu de selection
    Set BaSelect = ThisDrawing.SelectionSets.Add("BaVBa")
    'Selection de toutes les entites dans la fenetre
    BaSelect.Select acSelectionSetWindow, Pt1, Pt2
               
    For I = 1 To BaSelect.Count
        MsgBox "L'entité n° " & I & " du jeu de sélection est du type codé " & _
					BaSelect.Item(I - 1).EntityType
    Next I
    MsgBox "Il y a  " & BaSelect.Count & " entités sélectionnées dans cette fenêtre"



3.3 - Sélection par Capture

     'Initialisation des variables
     Dim BaSelect As AcadSelectionSet
     Dim Pt1(0 To 2) As Double
     Dim Pt2(0 To 2) As Double     
     Dim I As Integer

     'Donnees
     Pt1(0) = 50#		' Coordonnee en X du premier point de la fenetre
     Pt1(1) = 100#		' Coordonnee en Y du premier point de la fenetre
     Pt1(2) = 0#		' Coordonnee en Z du premier point de la fenetre
     Pt2(0) = 150#		' Coordonnee en X du second point de la fenetre
     Pt2(1) = 300#		' Coordonnee en Y du second point de la fenetre
     Pt2(2) = 0#		' Coordonnee en Z du second point de la fenetre

     'Creation du jeu de selection
     Set BaSelect = ThisDrawing.SelectionSets.Add("BaVBa")
     'Selection de toutes les entites dans la fenetre
     BaSelect.Select acSelectionSetCrossing, Pt1, Pt2
   
     For I = 1 to BaSelect.Count
       MsgBox "L'entité n° " & I & " du jeu de sélection est du type codé " & _
				BaSelect.Item(I-1).EntityType
     Next I
     MsgBox "Il y a  " & BaSelect.Count & " entités sélectionnées dans cette capture"



3.4 - Filtres de Sélection

     'Cet exemple selectionne tous les cercles du dessin
     'Initialisation des variables
     Dim BaSelect As AcadSelectionSet
     Dim CodeGroup(0) as Integer
     Dim ValGroup(0) as Variant
		
     'Creation du jeu de selection
     Set BaSelect = ThisDrawing.SelectionSets.Add("BaVBa")
     ' Choix des filtres
     CodeGroup(0) = 0          		' Code DXF pour le type d'entites
     ValGroup(0) = "CIRCLE"		' Type = un cercle
     'Selection
     BaSelect.Select acSelectionSetAll, , ,CodeGroup, ValGroup
   
     MsgBox "Il y a  " & BaSelect.Count & " entités cercles dans ce dessin"



3.5 - Filtres multiples de Sélection

     'Selection des LIGNES de couleur BLEUE dans le calque Plan01 et dans une fenetre
     'Initialisation des variables
     Dim BaSelect As AcadSelectionSet
     Dim Pt1(0 To 2) As Double
     Dim Pt2(0 To 2) As Double     
     Dim CodeGroup(0 To 2) as Integer
     Dim ValGroup(0 To 2) as Variant
     Dim I As Integer

     'Donnees 
     Pt1(0) = 50#		' Coordonnee en X du premier point de la fenetre
     Pt1(1) = 100#		' Coordonnee en Y du premier point de la fenetre
     Pt1(2) = 0#		' Coordonnee en Z du premier point de la fenetre
     Pt2(0) = 250#		' Coordonnee en X du second point de la fenetre
     Pt2(1) = 300#		' Coordonnee en Y du second point de la fenetre
     Pt2(2) = 0#		' Coordonnee en Z du second point de la fenetre

     'Creation du jeu de selection
     Set BaSelect = ThisDrawing.SelectionSets.Add("BaVBa")
     'Choix des filtres
     CodeGroup(0) = 0          		' Code DXF pour le type d'entites
     ValGroup(0) = "LINE"		' Type = une ligne
     CodeGroup(1) = 62          	' Code DXF pour le numero de couleur
     ValGroup(1) = 5			' 5 = bleu
     CodeGroup(2) = 8          		' Code DXF pour le nom de calque
     ValGroup(2) = "Plan01"		' Nom du calque = Plan01

     'Selection des entites dans la fenetre
     BaSelect.Select acSelectionSetWindow, Pt1, Pt2, CodeGroup, ValGroup
   
     For I = 1 to BaSelect.Count
       MsgBox "L'entité n° " & I & " du jeu de sélection est du type codé " & _
					BaSelect.Item(I-1).EntityType
     Next I
     MsgBox "Il y a  " & BaSelect.Count & " entités sélectionnées dans cette fenêtre"



3.6 - Filtres avec opérateur conditionnel OU

     'Meme exemple que le precedent N° 3.5, mais on selectionne egalement les cercles.
     'Selection des LIGNES et CERCLES de couleur BLEUE dans le calque Plan01 
     '   et dans une fenetre
     'On utilise l'operateur logique OU (Code DXF -4). 

     'Initialisation des variables
     Dim BaSelect As AcadSelectionSet
     Dim Pt1(0 To 2) As Double
     Dim Pt2(0 To 2) As Double     
     Dim CodeGroup(0 To 5) as Integer
     Dim ValGroup(0 To 5) as Variant
     Dim I As Integer

     'Donnees
     Pt1(0) = 50#		' Coordonnee en X du premier point de la fenetre
     Pt1(1) = 50#		' Coordonnee en Y du premier point de la fenetre
     Pt1(2) = 0#		' Coordonnee en Z du premier point de la fenetre
     Pt2(0) = 350#		' Coordonnee en X du second point de la fenetre
     Pt2(1) = 300#		' Coordonnee en Y du second point de la fenetre
     Pt2(2) = 0#		' Coordonnee en Z du second point de la fenetre

     'Creation du jeu de selection
     Set BaSelect = ThisDrawing.SelectionSets.Add("BaVBa")
 
     'Choix des filtres
     CodeGroup(0) = -4          	' Code DXF pour l'operateur logique
     ValGroup(0) = "<OR"		' Debut OU
     CodeGroup(1) = 0          		' Code DXF pour le type d'entites
     ValGroup(1) = "LINE"		' Type = une ligne
     CodeGroup(2) = 0          		' Code DXF pour le type d'entites
     ValGroup(2) = "CIRCLE"		' Type = un cercle
     CodeGroup(3) = -4          	' Code DXF pour l'operateur logique
     ValGroup(3) = "OR>"		' Fin OU
     CodeGroup(4) = 62          	' Code DXF pour le numero de couleur
     ValGroup(4) = 5			' 5 = bleu
     CodeGroup(5) = 8          		' Code DXF pour le nom de calque
     ValGroup(5) = "Plan01"		' Nom du calque = Plan01

     'Selection des entites dans la fenetre
     BaSelect.Select acSelectionSetWindow, Pt1, Pt2, CodeGroup, ValGroup
   
     For I = 1 to BaSelect.Count
       MsgBox "L'entité n° " & I & " du jeu de sélection est du type codé " & _
					 BaSelect.Item(I-1).EntityType
     Next I
     MsgBox "Il y a  " & BaSelect.Count & " entités sélectionnées dans cette fenêtre"



3.7 - Filtres avec opérateur conditionnel ET

     'Cette fois, sur l'ensemble du dessin,
     'Selection des LIGNES dans le calque Plan01 et des CERCLES de couleur BLEUE.
     'On utilise les operateurs logiques ET et OU (Code DXF -4). 

     'Initialisation des variables
    Dim BaSelect As AcadSelectionSet
    Dim CodeGroup(0 To 9) as Integer
    Dim ValGroup(0 To 9) as Variant
		
    'Creation du jeu de selection
    Set BaSelect = ThisDrawing.SelectionSets.Add("BaVBa")

    'Choix des filtres
    CodeGroup(0) = -4          		' Code DXF pour l'operateur logique
    ValGroup(0) = "<OR"			' Debut OU
    CodeGroup(1) = -4          		' Code DXF pour l'operateur logique
    ValGroup(1) = "<AND"		' Debut ET
    CodeGroup(2) = 0          		' Code DXF pour le type d'entites
    ValGroup(2) = "LINE"		' Type = une ligne
    CodeGroup(3) = 8          		' Code DXF pour le nom de calque
    ValGroup(3) = "Plan01"		' Nom du calque = Plan01
    CodeGroup(4) = -4          		' Code DXF pour l'operateur logique
    ValGroup(4) = "AND>"		' Fin ET
    CodeGroup(5) = -4          		' Code DXF pour l'operateur logique
    ValGroup(5) = "<AND"		' Debut ET
    CodeGroup(6) = 0          		' Code DXF pour le type d'entites
    ValGroup(6) = "CIRCLE"		' Type = un cercle
    CodeGroup(7) = 62          		' Code DXF pour le numero de couleur
    ValGroup(7) = 5			' 5 = bleu
    CodeGroup(8) = -4          		' Code DXF pour l'operateur logique
    ValGroup(8) = "AND>"		' Fin ET
    CodeGroup(9) = -4          		' Code DXF pour l'operateur logique
    ValGroup(9) = "OR>"		' Fin OU

    'Selection
    BaSelect.Select acSelectionSetAll, , , CodeGroup, ValGroup
   
    MsgBox "Il y a  " & BaSelect.Count & " entités sélectionnées dans ce dessin"


4 - Environnement de travail

4.1 - Créer un nouveau calque

     ' Creation d'un nouveau calque Plan02 
     ' Puis on rend se calque courant
     ' Si le calque Plan02 existe deja, le rend courant.

     ' Initialisation des variables
     Dim BaCalque As AcadLayer 

     ' Creation du calque
     Set BaCalque = ThisDrawing.Layers.Add("Plan02")
     ' Le calque cree est rendu courant
     ThisDrawing.ActiveLayer = BaCalque
   


4.2 - Définir le calque courant

     ' Definit le calque Plan03 courant
     ' Si le calque Plan03 n'existe pas, provoque une erreur.

     ' Initialisation des variables
     Dim BaCalque As AcadLayer 

     ' Choix du calque
     Set BaCalque = ThisDrawing.Layers.Item("Plan03")
     ' Le calque est rendu courant
     ThisDrawing.ActiveLayer = BaCalque
   


4.3 - Etablir la liste des calques

     ' Initialisation des variables
     Dim ListeCalque As String
     Dim I As Integer

     For I = 0 To ThisDrawing.Layers.Count - 1
       ListeCalque = ListeCalque & ThisDrawing.Layers.Item(I).Name & Chr$(13)
     Next I
     MsgBox ListeCalque
   


4.4 - Changer la couleur d'un calque

     ' Plan01 est le nom du calque a modifier,
     ' 5 est le code de la nouvelle couleur
     ThisDrawing.Layers.Item("Plan01").Color = 5



4.5 - Fixer l'Elévation en espace objet

     ThisDrawing.ElevationModelSpace = 75   



4.5b - Fixer l'Elévation en espace papier

     ThisDrawing.ElevationPaperSpace = 200   



4.6 - Zoom Etendu dans l'Espace Papier

  ThisDrawing.ActiveSpace = acPaperSpace
  ThisDrawing.MSpace = False
  ThisDrawing.ActivePViewport.ZoomExtents
 


4.7 - Se mettre dans le SCU Général

   Dim origine(0 To 2) As Double
   Dim x(0 To 2) As Double
   Dim y(0 To 2) As Double
   Dim NouveauScu As AcadUCS

   origine(0) = 0
   origine(1) = 0
   origine(2) = 0
   x(0) = 1
   x(1) = 0
   x(2) = 0
   y(0) = 0
   y(1) = 1
   y(2) = 0

   Set NouveauScu = ThisDrawing.UserCoordinateSystems.Add(origine, x, y, "SCG")
   ThisDrawing.ActiveUCS = NouveauScu
 


4.8 - Donner les coordonnées du centre d'un cercle sélectionné par l'utilisateur

    Dim BaCercle As Object      ' Nom arbitraire de la variable objet cercle
    Dim PtCentre As Variant     ' variable definie du type variant
                
    ' On cache la feuille pour pouvoir choisir une entité
    UserForm1.Hide
    
    ' La ligne suivante attend une sélection de l'utilisateur
    ThisDrawing.Utility.GetEntity BaCercle, PtCentre, "Sélectionnez un cercle :"
    ' Recherche du type de l'entité choisie
    BaCercle_Type = BaCercle.EntityName

    If BaCercle_Type = "AcDbCircle" Then
        ' La propriété center donne le centre
        PtCentre = BaCercle.Center
        MsgBox "Les coordonnées du centre du cercle sont : " & PtCentre(0) & " - " _
                            & PtCentre(1) & " - " & PtCentre(2)
    Else
        MsgBox "L'entité sélectionnée n'est pas un cercle !"
    End If



4.9 - Créer un WBloc

     Dim NomBloc As String 
     Dim BaSelect As Object

     'Emplacement et nom du bloc
     NomBloc = "C:\acadr14\bib5\Test1.dwg"

     Set BaSelect = ThisDrawing.SelectionSets.Add("BaVBa")
     UserForm1.Hide

     'Selection des entites
     BaSelect.SelectOnScreen
     'Creation du bloc
     ThisDrawing.Wblock NomBloc, BaSelect
     ThisDrawing.Regen True
     MsgBox "Le bloc " & NomBloc & " a été créé avec succès !"

Fasoft