Exemples de routine VBA
Pour faciliter votre compréhension, ces macros VBA sont simplifiées : pas de gestion des erreurs, pas de boite de dialogue, pas de travail sur les espaces PAPIER, ...
Nettoyer le calque 0
Une bonne pratique sous AutoCAD est de ne jamais rien laisser dans le calque 0 !
Si votre plan contient une multitude d'objets dans le calque 0, vous trouverez ci-dessous la macro VBA permettant de déplacer les objets vers un autre calque :
1) Définir le nom du nouveau calque et le créer
2) Parcourir les entités de l'espace OBJET
3) Changer le calque des objets contenus dans "0"
Sub NettoyerCalque0()
Dim NomNouveauCalque As String
NomNouveauCalque = "0bis"
ThisDrawing.Layers.Add (NomNouveauCalque)
For Each ent In ThisDrawing.ModelSpace
If ent.Layer = "0" Then
ent.Layer = NomNouveauCalque
End If
Next ent
End Sub
Détecter les polylignes non fermées
1) Parcourir le dessin et forcer tous les objets en blanc
2) Rechercher les polylignes 2D
3) Forcer en rouge les polylignes ouvertes (en vert sinon)
4) Regénérer la vue
Sub PolylignesOuvertes()
For Each ent In ThisDrawing.ModelSpace
ent.color = acWhite
If ent.ObjectName = "AcDbPolyline" Then
If ent.Closed = False Then
ent.color = acRed
Else
ent.color = acGreen
End If
End If
Next ent
ThisDrawing.Regen (acActiveViewport)
End Sub
Mesurer la distance 2D entre deux points
Il est parfois difficile de mesurer une distance 2D entre deux points : il arrive souvent que l'on récupère la distance 3D en s'accrochant sur un point en Z.
Vous trouverez ci-dessous une macro VBA qui ne tient pas compte des altitudes !
1) Cliquer le premier point
2) Cliquer le second point
3) Dessiner une ligne reliant les points
4) Calculer et arrondir la distance 2D entre les points
5) Afficher le résultat en ligne de commande
Sub Distance2D()
Dim Pt1 As Variant
Pt1 = ThisDrawing.Utility.GetPoint(, "Cliquer le premier point : ")
Dim Pt2 As Variant
Pt2 = ThisDrawing.Utility.GetPoint(, "Cliquer le second point : ")
ThisDrawing.ModelSpace.AddLine Pt1, Pt2
Dim DI As Double
DI = ((Pt1(0) - Pt2(0)) ^ 2 + (Pt1(1) - Pt2(1)) ^ 2) ^ 0.5
DI = Round(DI, 2)
ThisDrawing.Utility.Prompt ("Di2D= " & DI & " unité(s)") & vbCrLf
End Sub
Formater le nom des espaces AEC
Le langage VBA peut aussi s'utiliser sur les objets des produits verticaux ! (comme AutoCAD Architecture par exemple).
La macro suivante formate les noms des espaces AEC en les mettant en majuscules :
1) Parcourir tout le dessin
2) Rechercher les espaces AEC
3) Mettre en majuscules les noms
Sub NomEspaceEnMajuscule()
For Each obj In ThisDrawing.ModelSpace
If obj.ObjectName = "AecDbSpace" Then
obj.Name = UCase(obj.Name)
End If
Next obj
End Sub
Ajouter un préfixe à tous les calques
1) Demander le préfixe à l'utilisateur
2) Parcourir tous les calques du dessin
3) Ajouter le préfixe à chaque nom de calque
Sub AjouterPréfixeCalque()
Dim Prefixe As String
Prefixe = ThisDrawing.Utility.GetString(1, "Quel est le préfixe ?")
On Error Resume Next
Dim L As AcadLayer
For Each L In ThisDrawing.Layers
L.Name = Prefixe & L.Name
Next L
End Sub
Réinitialiser les noms de traceur sur AUCUN
1) Parcourir toutes les présentations
2) Attribuer un nouveau nom de traceur :
"Aucun" pour un AutoCAD ..., 2007, 2008 ou 2009
"Aucun(e)" pour un AutoCAD 2010, 2011, 2012, ...
Sub AucunNomTraceur()
On Error Resume Next
Dim Presentation As AcadLayout
For Each Presentation In ThisDrawing.Layouts
Presentation.ConfigName = "Aucun"
Presentation.ConfigName = "Aucun(e)"
Next Presentation
End Sub
Lister les chemins des références externes d'un dessin
1) Parcourir tous les blocs
2) Vérifier si il s'agit d'une référence externe
3) Écrire son chemin d'accès en ligne de commande
Sub ListerReferenceExterne()
Dim REF As AcadBlock
For Each REF In ThisDrawing.Blocks
If REF.IsXRef Then
ThisDrawing.Utility.Prompt REF.Path & vbCrLf
End If
Next REF
End Sub