# Rendre tous les blocs décomposables en AutoLISP

**URL:** https://dessein-tech.com/t/rendre-tous-les-blocs-decomposables-en-autolisp/9660
**Category:** AutoLISP
**Tags:** lisp, programmation, hva
**Created:** 2026-01-17T00:54:23Z
**Posts:** 1
**Showing post:** 1 of 1

## Post 1 by @Patrick — 2026-01-17T00:54:23Z

Il existe principalement trois raisons techniques pour lesquelles un bloc refuse de se décomposer (commande **DECOMPOS** ) :

### 1. Le paramètre de création (Le plus fréquent)

Lorsqu’un utilisateur crée un bloc via la commande **BLOC** , il y a une case à cocher dans la boîte de dialogue nommée **«&nbsp;Autoriser la décomposition&nbsp;»**.

- Si cette case a été décochée par le créateur, le bloc est verrouillé pour empêcher les modifications accidentelles.

- C’est précisément ce verrou que ma routine Lisp précédente fait sauter en modifiant la propriété interne du bloc. (voir LISP ci-après)

### 2. Les insertions multiples (MINSERT)

Si le bloc a été inséré avec la commande **MINSERT** (et non **INSERER** ), il est considéré comme un tableau rectangulaire d’un seul bloc.

- Même s’il n’y a qu’une seule rangée et une seule colonne, un bloc `MINSERT` est **indécomposable** par nature.

- C’est une méthode souvent utilisée intentionnellement pour «&nbsp;protéger&nbsp;» un dessin, car il n’existe pas de commande native pour convertir un `MINSERT` en bloc normal.

### 3. Les échelles non uniformes (Variable [EXPLMODE](https://help.autodesk.com/view/ACD/2026/FRA/?guid=GUID-113BD30D-2F46-4E23-9B49-034AB50064A7))

Si un bloc a été inséré avec des échelles X, Y et Z différentes (ex: X=1, Y=2), il peut être impossible de le décomposer si la variable système **EXPLMODE** est mal réglée.

- Si **EXPLMODE** est à **0** , AutoCAD® interdit la décomposition des blocs à échelle non uniforme pour éviter de créer des géométries invalides.

- Si elle est à **1** (valeur par défaut), cela fonctionne généralement.

Ci-après un programme AutoLISP pour rendre les blocs non décomposables, décomposables (cas de figure N°1 expliqué ci-dessus)

[RendreDecomposable.lsp](/uploads/short-url/wBxPlBDUHu033x8BTYCvlsrkRfm.lsp) (1,2 Ko)

```
(defun c:RendreDecomposable (/ doc blocks)
  (vl-load-com)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (setq blocks (vla-get-blocks doc))
  
  (vlax-for blk blocks
    ;; On ignore les Xrefs et les blocs systèmes (Espace Objet/Papier)
    (if (and (= (vla-get-isxref blk) :vlax-false)
             (= (vla-get-islayout blk) :vlax-false))
      ;; On force la propriété Explodable à Vrai (True)
      ;; Utilisation de catch-all-apply pour éviter un arrêt sur erreur si un bloc est protégé
      (vl-catch-all-apply 'vla-put-explodable (list blk :vlax-true))
    )
  )
  
  (vla-regen doc acAllViewports)
  (princ "\nToutes les définitions de blocs sont maintenant décomposables.")
  (princ)
)
```

---

_[View the full topic](https://dessein-tech.com/t/rendre-tous-les-blocs-decomposables-en-autolisp/9660)._
