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

Boucler sur calques [Résolu] [VBA AutoCAD] - VB/VBA/VBS - Programmation

Marsh Posté le 15-11-2011 à 14:36:27    

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
Reply

Marsh Posté le 15-11-2011 à 14:36:27   

Reply

Marsh Posté le 23-11-2011 à 15:15:22    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed