Salut, Ce que tu utilises est une macro de commande, pas un LISP. Dans ta macro c'est l'astérisque (*) qui définit les noms de bloc. L'astérisque est un caractère générique pour "tous". Si tu veux sélectionner tous les blocs dynamiques avec une macro, il faut remplacer l'astérisque par une chaîne entre guillemets contenant tous les noms dynamiques du dessin séparés par des virgules et ajouter : `*U* à la fin pour sélectionner aussi les blocs anonymes issus des blocs dynamiques : ssx;;b;"bloc1,bloc2,bloc3,`*U*";;xplode;p;;g;h; En LISP, on peut faire mieux : rendre les blocs dynamiques statiques sans les décomposer ce qui permet de conserver des blocs avec leurs éventuels attributs. C'est ce que fait la commande DYN2STAT ci-dessous. (defun c:dyn2stat (/ unic ss)
(defun unic (name / n)
(setq n 1)
(while (tblsearch "block" (strcat name "_" (itoa n)))
(setq n (1+ n))
)
(strcat name "_" (itoa n))
)
(if (ssget "_X" '((0 . "INSERT")))
(progn
(setq n 0)
(vlax-for b (setq ss (vla-get-ActiveSelectionSet
(vla-get-ActiveDocument
(vlax-get-acad-object)
)
)
)
(if (= (vla-get-IsDynamicBlock B) :vlax-true)
(vla-ConvertToStaticBlock
b
(unic (vla-get-EffectiveName B))
)
)
)
(vla-Delete ss)
)
)
)