Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1806 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA AutoCAD] Boucler sur calques [Résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA AutoCAD] Boucler sur calques [Résolu]

n°2111520
mmarle
Posté le 15-11-2011 à 14:36:27  profilanswer
 

Bonjour,
 
Je travaille actuellement sur une petite application sous AutoCAD 2011 (Hé oui! la dernière version prenant en charge le VBA, VB.NET pour les versions ultérieures).
 
Cela fait un petit moment que je bute sur un problème que voici:
Je souhaite boucler sur la collection de calques à l'exception de celle des références externes (XREF).
 
J'arrive à boucler sur tous les calques du dessin courant, faisant appel la collection Layers, mais celle-ci renvoie également les calques des XREF.
J'arrive aussi à boucler sur les calques des XREF, faisant appel à la collection Blocks et la méthode IsXref.
 
Ce que j'aimerais, c'est d'avoir la liste des calques sans les calques des XREF.
 
J'ai tenté de stocker dans une variable tableau la liste des noms de calques des XREF puis de la comparer à celle des noms de calques du dessin courant, mais là...c'est le drame!
 
Voici mon code:
 

Code :
  1. Private Sub CommandButton1_Click()
  2. '*****************************'
  3. '* Déclaration des variables *'
  4. '*****************************'
  5. Dim MyLayer As AcadLayer
  6. Dim MyBlock As AcadBlock
  7. Dim i As Integer
  8. Dim Message1 As String
  9. Dim Message2 As String
  10. Dim MyTab() As String
  11. 'Boucler sur les calques du dessin courant'
  12. For Each MyLayer In ThisDrawing.Layers
  13.     Message1 = Message1 & MyLayer.Name & vbLf
  14. Next MyLayer
  15. MsgBox Message1, , "Liste des calques courants"
  16. 'Boucler sur les calques des XREF du dessin courant'
  17. For Each MyBlock In ThisDrawing.Blocks
  18.     If MyBlock.IsXRef Then
  19.         ReDim MyTab(MyBlock.XRefDatabase.Blocks.Count)
  20.         For i = 0 To MyBlock.XRefDatabase.Blocks.Count - 1
  21.             MyTab(i) = MyBlock.XRefDatabase.Layers.Item(i).Name
  22.             Message2 = Message2 & MyTab(i) & vbLf
  23.         Next i
  24.     End If
  25. Next MyBlock
  26. MsgBox Message2, , "Liste des calques des XREF du dessin courant"
  27. End Sub


 
Aidez-moi, s'il vous plaît! Merci.


Message édité par mmarle le 23-11-2011 à 15:16:58
mood
Publicité
Posté le 15-11-2011 à 14:36:27  profilanswer
 

n°2112974
mmarle
Posté le 23-11-2011 à 15:15:22  profilanswer
 

Je viens de trouver la solution! Miracle, c'était tout con, comme bien souvent des fois.
 

Code :
  1. Private Sub CommandButton1_Click()
  2. '*****************************'
  3. '* Déclaration des variables *'
  4. '*****************************'
  5. Dim MyBlock As AcadBlock
  6. Dim MyTab() As String
  7. Dim i As Integer
  8. Dim MyLayer As AcadLayer
  9. Dim TempLayer As String
  10. Dim Message As String
  11. 'Boucler et stocker les calques des XREF du dessin courant'
  12. For Each MyBlock In ThisDrawing.Blocks
  13.     If MyBlock.IsXRef Then
  14.         ReDim MyTab(MyBlock.XRefDatabase.Blocks.Count)
  15.         For i = 1 To MyBlock.XRefDatabase.Blocks.Count - 1
  16.             MyTab(i) = MyBlock.XRefDatabase.Layers.Item(i).Name
  17.         Next i
  18.     End If
  19. Next MyBlock
  20. 'Boucler et comparer les calques à ceux des XREF du dessin courant'
  21. For Each MyLayer In ThisDrawing.Layers
  22.     For i = 0 To UBound(MyTab())
  23.         If MyLayer.Name = MyTab(i) Then
  24.             TempLayer = ""
  25.             Exit For
  26.         Else
  27.             TempLayer = MyLayer.Name
  28.         End If
  29.     Next i
  30.    
  31.     If Not TempLayer = "" Then
  32.         Message = Message & TempLayer & vbLf
  33.     End If
  34.        
  35. Next MyLayer
  36.  
  37. MsgBox Message
  38. End Sub


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA AutoCAD] Boucler sur calques [Résolu]

 

Sujets relatifs
[VBA] Type utilisateur et objet[VBA AutoCAD] Problème inter-application
[VBA Autocad] dessiner la symétrie d'un point par rapport à une ligne.VBA Autocad Déplacement en spécifiant une coordonnée
VBA Tourner sur lui même du texte dans autocad[VBA =>AUTOCAD] chemin du projet .dvb
[VBA] Importation de Coordonnées d'Autocad à ExcelVBA et autocad
piloter Autocad en VBAVBA & AUTOCAD ?
Plus de sujets relatifs à : [VBA AutoCAD] Boucler sur calques [Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR