# (setq), la fonction la plus fondamentale de l'AutoLISP

**URL:** https://dessein-tech.com/t/setq-la-fonction-la-plus-fondamentale-de-lautolisp/9669
**Category:** AutoLISP
**Tags:** debutant, lisp, programmation, tuto
**Created:** 2026-01-18T16:10:01Z
**Posts:** 3

## Post 1 by @Patrick — 2026-01-18T16:10:02Z

Voici le tutoriel sur la fonction la plus utilisée, la plus indispensable, la «&nbsp;respiration&nbsp;» du Lisp : **(setq)**.

 ![tutoriel_debutants_autolisp_autocad](https://dessein-tech.com/uploads/default/original/2X/f/f408190a8abcde1757498ebd5d4884096d452268.jpeg)

Si ([defun](https://dessein-tech.com/t/defun-la-mere-de-toutes-les-fonctions-autolisp/9668)) est le cerveau qui crée les ordres, `(setq)` est la **mémoire**. Sans elle, votre programme est comme un poisson rouge : il oublie tout instantanément.

### 1. Le Concept : «&nbsp;La Boîte à Chaussures&nbsp;»

Imaginez que la mémoire d’AutoCAD® est une immense étagère vide.

**(setq)** sert à prendre une boîte à chaussures, écrire un nom dessus au marqueur, mettre quelque chose dedans, et la poser sur l’étagère.

- **Le Nom sur la boîte** : C’est la **Variable** (ex: `MaLargeur`).

- **Ce qu’il y a dedans** : C’est la **Valeur** (ex: `50`, `"Bonjour"`, ou un point `(0 0 0)`).

À tout moment plus tard, vous pourrez dire : _«&nbsp;AutoCAD®, donne-moi le contenu de la boîte `MaLargeur`&nbsp;»_, et il vous répondra _«&nbsp;50&nbsp;»_.

### 2. La Syntaxe (Simplissime)

Le nom vient de l’anglais «&nbsp;SET Quote&nbsp;» (Fixer une valeur), mais retenez juste **SET** (Fixer/Définir).

```
(setq NOM_DE_LA_BOITE CE_QU_ON_MET_DEDANS)
```

- **Exemple 1 (Un nombre)** : `(setq Rayon 10.5)`

- _Traduction :_ «&nbsp;Crée une variable ‹&nbsp;Rayon&nbsp;› et mets 10.5 dedans.&nbsp;»

- **Exemple 2 (Du texte)** : `(setq MonNom "Patrick")`

- _Traduction :_ «&nbsp;Crée une variable ‹&nbsp;MonNom&nbsp;› et mets ‹&nbsp;Patrick&nbsp;› dedans.&nbsp;»

### 3. L’Exemple : La Petite Calculette

On va créer une commande qui utilise `(setq)` pour stocker deux nombres, les multiplier, et stocker le résultat.

Copiez ce code et lancez **TEST-MEMOIRE**.

```
(defun c:TEST-MEMOIRE ( / largeur hauteur surface )
  
  (prompt "\n--- DÉBUT DU TEST ---")

  ;; 1. On remplit les boîtes (Assignation)
  (setq largeur 5.0)
  (prompt "\nJ'ai mis 5.0 dans la boîte 'largeur'.")

  (setq hauteur 10.0)
  (prompt "\nJ'ai mis 10.0 dans la boîte 'hauteur'.")

  ;; 2. On utilise le contenu des boîtes pour faire un calcul
  ;; On crée une nouvelle boîte 'surface' pour le résultat
  (setq surface (* largeur hauteur))
  
  ;; 3. On affiche le résultat
  ;; (rtos transforme le nombre en texte pour l'affichage)
  (alert (strcat "Le calcul de " (rtos largeur) " x " (rtos hauteur) " donne : " (rtos surface)))
  
  (princ)
)
```

### 4. L’Astuce de Pro (Le «&nbsp;Combo&nbsp;»)

Vous n’êtes pas obligé d’écrire `(setq)` à chaque ligne. Vous pouvez remplir plusieurs boîtes d’un coup !

```
(setq a 10
      b 20
      c 30)
```

_AutoCAD® comprend : a=10, b=20, c=30._

### Résumé pour briller

- **(setq)** = **S** tocker **E** t **T** enir (moyen mnémotechnique).

- C’est le seul moyen de conserver une information pour l’utiliser trois lignes plus bas.

- Si vous ne mettez pas une info dans un `(setq)`, elle est perdue à jamais !

_Poll: Poll (view on site)_

:right_arrow: Tous les [tutos AutoLISP](https://go.dessein-tech.com/tutos-autolisp)

---

## Post 2 by @Fraiddd — 2026-01-20T15:45:47Z

Bonjour,

Un petit oublie concernant SETQ, c’est la portée.  
Locale : accessible uniquement dans le lisp en cours si le variable est déclarée après le defun, comme tu le montre dans ton exemple  
Globale, accessible par un autre programme ou en tapant !MaVariable dans la barre de commande, si elle n’est pas déclarée.  
Cordialement

---

## Post 3 by @Patrick — 2026-01-20T15:50:59Z

Merci pour la précision @Fraiddd !
