Aller au contenu

Supprimer un bloc !!


dr.loveless

Messages recommandés

Salut, dans la suite de mes 2 précédent post, je cherche à supprimer tousles bloc portant un certain nom. Pour celà, j'ai fait le code suivant :

 

Dim blkColl As AcadBlocks

Dim BlocC As AcadBlock

 

Set blkColl = ThisDrawing.Blocks

 

For Each BlocC In blkColl

If BlocC.Name = "Nom du Bloc" Then

MsgBox "Un bloc de ce nom existe déjà, il va être supprimée"

BlocC.Delete -> plante "Objet référencé"

End If

Next

 

Il me detecte bien si'il y a déjà un bloc de ce nom, mais plante quand je lui demande de le supprimé??? BlocC.delete ?? Il me marque "Objet referencé".

Je comprends pas, pourtant je fais eactement la même chose pour les présentations et çà marche nikel

 

Le DOC

Lien vers le commentaire
Partager sur d’autres sites

Salut le doc

 

Il me semble qu'il est impossible d'effacer un block avec une simple commande "delete". Il faut pour cela "décomposer" ton block avant de la supprimer.

 

@+

 

Eagle4

Regarde devant, derrière apporte des regrets, les côtés envies et jalousie

Lien vers le commentaire
Partager sur d’autres sites

Où est ton étoile DoC ? http://img124.exs.cx/img124/7999/start.gif

 

 

Quand vous supprimez un objet dans une collection(une sélection), tous les items restants dans la collection(la sélection) sont réassignés à un nouvel indice(index) basé sur le compte actuel. Vous devriez donc éviter les boucles qui suppriment un objet en réitérant par la collection(la sélection).

Par exemple, le code de VBA suivant aboutira à une erreur pendant l'exécution :

For i = 0 To ThisDrawing.Groups.Count - 1

....ThisDrawing.Groups.Item(i).Delete

Next I

 

Au lieu de cela, utilisez le code de VBA suivant pour supprimer tous les membres dans une collection(une sélection) :

For Each obj in ThisDrawing.Groups

....obj.Delete

Next obj

 

Vous pouvez aussi utiliser le code de VBA suivant pour supprimer un membre simple d'une collection(une sélection) :

ThisDrawing.Groups.item("group1").Delete

 

Notes : Vérifier l'état des calques du block avant de le ou les supprimer !

 

l'ACADien ! http://img124.exs.cx/img124/7999/start.gif

Lien vers le commentaire
Partager sur d’autres sites

dr,

 

Avec ce delete, tu essaie de purger le bloc. Tu dois the promener dans la table du ModelSpace, du Paperspace, des blocks pour savoir si tu a une instance de cette définition et la supprimer. Ensuite, s'il n'y a plus aucune référence, tu pourras prendre ton delete.

 

Serge

 

Lien vers le commentaire
Partager sur d’autres sites

Merci, çà me donne çà comme code :

 

For Each ObjBlo In ThisDrawing.Blocks ' Supprime tous les objets du bloc

If ObjBlo.Name = "03-Cartouche A4-A3-direct" Then

For Each elem In ThisDrawing.Blocks.Item("03-Cartouche A4-A3-direct")

elem.Delete

Next elem

End If

Next ObjBlo

 

For Each elem In ThisDrawing.ModelSpace 'Supprime les bloc de l'espace Objet

If elem.EntityType = acBlockReference Then

If elem.Name = "03-Cartouche A4-A3-direct" Then

elem.Delete

End If

End If

Next

 

For Each elem In ThisDrawing.Paperspace ' Supprime les blocs de l'espace papier

If elem.EntityType = acBlockReference Then

If elem.Name = "03-Cartouche A4-A3-direct" Then

elem.Delete

End If

End If

Next

 

Next

 

Donc jusque là çà fonctionne à un détail pres, c'est à dire que çà me supprime uniquement le(s) bloc(s) de la dernière présentation selectionnée. Il faudrait donc que çà me fasse la même chose pour TOUTES les présentations qui sont dans le dessin, et j'y arrive pas, enfin pour l'instant.

Je pense qu'il faut faire une boucle me detectant toute les présentation et repeter ainsi le code:

 

For Each Present In ThisDrawing.Layouts

NomPres = Present.Name

Set MECA = ThisDrawing.Layouts.Item(NomPres)

For Each elem In MECA

---le code

next

-> ne fonctionne pas Quelqu'un sait pourquoi ??

Le DOC

Lien vers le commentaire
Partager sur d’autres sites

Voilà la solution que j'ai élaboré :

 

For Each Present In ThisDrawing.Layouts

NomPres = Present.Name

Set MECA = ThisDrawing.Layouts(NomPres)

For Each elem In MECA.Block

If elem.EntityType = acBlockReference Then

If elem.Name = "03-Cartouche A4-A3-direct" Then

elem.Delete

End If

End If

Next

Next

 

Si quelqu'un à uine méthode plus simple, je suis preneur.

Le DOC

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité