dr.loveless Posté(e) le 13 janvier 2005 Posté(e) le 13 janvier 2005 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 AcadBlocksDim 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 IfNext 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
eagle4 Posté(e) le 13 janvier 2005 Posté(e) le 13 janvier 2005 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
Pako Posté(e) le 13 janvier 2005 Posté(e) le 13 janvier 2005 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).DeleteNext 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.DeleteNext 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
Serge Posté(e) le 13 janvier 2005 Posté(e) le 13 janvier 2005 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
dr.loveless Posté(e) le 14 janvier 2005 Auteur Posté(e) le 14 janvier 2005 Merci, çà me donne çà comme code : For Each ObjBlo In ThisDrawing.Blocks ' Supprime tous les objets du blocIf ObjBlo.Name = "03-Cartouche A4-A3-direct" Then For Each elem In ThisDrawing.Blocks.Item("03-Cartouche A4-A3-direct") elem.Delete Next elemEnd IfNext ObjBlo For Each elem In ThisDrawing.ModelSpace 'Supprime les bloc de l'espace ObjetIf elem.EntityType = acBlockReference ThenIf elem.Name = "03-Cartouche A4-A3-direct" Thenelem.DeleteEnd IfEnd IfNext For Each elem In ThisDrawing.Paperspace ' Supprime les blocs de l'espace papierIf elem.EntityType = acBlockReference ThenIf elem.Name = "03-Cartouche A4-A3-direct" Thenelem.DeleteEnd IfEnd IfNext 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.LayoutsNomPres = Present.NameSet MECA = ThisDrawing.Layouts.Item(NomPres)For Each elem In MECA---le codenext -> ne fonctionne pas Quelqu'un sait pourquoi ?? Le DOC
dr.loveless Posté(e) le 14 janvier 2005 Auteur Posté(e) le 14 janvier 2005 Voilà la solution que j'ai élaboré : For Each Present In ThisDrawing.LayoutsNomPres = Present.NameSet MECA = ThisDrawing.Layouts(NomPres)For Each elem In MECA.BlockIf elem.EntityType = acBlockReference ThenIf elem.Name = "03-Cartouche A4-A3-direct" Thenelem.DeleteEnd IfEnd IfNextNext Si quelqu'un à uine méthode plus simple, je suis preneur. Le DOC
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant