Salut Comme c'est la nouvelle année, voici une fonction qui sélectionne le/les blocs, même imbriqués. L'idée est de parcourir la table des blocs, de regarder dans chaque bloc si tu as un bloc recherché imbriqué --> Oui, je le mémorise et je relance la recherche pour voir si le bloc trouvé n'est pas lui-même imbriqué dans un autre bloc. Voici la fonction et si tu as des questions, n'hésite pas. (defun rech(bl / doc ent js lst obj old sel tab nombl)
(defun nombl(bl)
(if (vlax-property-available-p bl 'effectivename)
(strcase (vla-get-effectivename bl))
(strcase (vla-get-name bl))
)
)
(setq doc (vla-get-activedocument (vlax-get-acad-object))
bl (mapcar 'strcase bl)
old bl
js (ssadd)
)
(while bl
(setq lst nil)
(vlax-for obj (vla-get-blocks doc)
(and (eq (vla-get-islayout obj) :vlax-false)
(eq (vla-get-isxref obj) :vlax-false)
(not (wcmatch (vla-get-name obj) "*|*"))
(vlax-for ent obj
(and (eq (vla-get-objectname ent) "AcDbBlockReference")
(vl-position (nombl ent) bl)
(not (vl-position (nombl obj) lst))
(setq lst (cons (nombl obj) lst)
tab (cons (vla-get-name obj) tab)
)
)
)
)
)
(setq bl lst)
)
(setq tab (append tab old))
(and (ssget "_x" (list (cons 0 "insert") (cons 2 (strcat (apply 'strcat (mapcar '(lambda(x)(strcat x ",")) tab)) "`*U*"))))
(progn
(vlax-for obj (setq sel (vla-get-activeselectionset doc))
(and (vl-position (nombl obj) tab)
(ssadd (vlax-vla-object->ename obj) js)
)
)
(vla-delete sel)
(sssetfirst nil js)
)
)
js
) Pour lancer la fonction. Tu peux indiquer une liste de blocs. La sélection est effectuée dans Autocad et tu as comme message de retour, la sélection. Par exemple (rech '("grille")) @+