Comparaison entre une macro AutoCAD et une routine AutoLISP pour illustrer la lisibilité, la maintenance et l'évolutivité des automatisations.

AutoCAD & AutoCAD LT : quand une macro devient-elle une usine à gaz ?

Last Updated on 15 novembre 2026 by Didier Lourdelle

4. Une seule commande DECALER avec sept distances possibles

Voici un exemple issu de mes développements pédagogiques AutoLISP.

La commande EDPS_DECALER_NIV4 propose sept distances prédéfinies et mémorise la dernière valeur utilisée.

Au premier lancement, AutoCAD affiche :

Commande : EDPS_DECALER_NIV4

Décalage [10/20/30/40/50/65/90] <10> :

L’utilisateur peut sélectionner une distance ou simplement valider pour conserver la valeur par défaut.

S’il choisit 40, la commande DECALER est lancée avec cette distance.

Au lancement suivant, l’invite devient :

Décalage [10/20/30/40/50/65/90] <40> :

La dernière valeur est automatiquement reproposée.

Le code AutoLISP

(defun c:EDPS_DECALER_NIV4 ( / choix )

  ;; Initialisation de la valeur par défaut.
  ;; dist reste globale pour mémoriser le dernier choix.
  (if (= nil dist)
    (setq dist "10")
  )

  ;; Définition des choix autorisés.
  (initget "10 20 30 40 50 65 90")

  ;; Construction de l'invite et lecture du choix.
  (setq choix
    (getkword
      (strcat
        "\nDécalage [10/20/30/40/50/65/90] <"
        dist
        "> : "
      )
    )
  )

  ;; Mémorisation du choix utilisateur.
  (if choix
    (setq dist choix)
  )

  ;; Lancement de la commande AutoCAD.
  (command "_.OFFSET" dist)

  (princ)
)

Cette routine reste volontairement simple et pédagogique.

Elle permet pourtant d’introduire plusieurs notions fondamentales du langage AutoLISP.

5. Ce qu’AutoLISP apporte réellement

Une variable pour mémoriser une valeur

La variable dist conserve la distance sélectionnée entre les appels, dans le contexte AutoLISP courant.

Elle est volontairement absente de la liste des variables locales de la fonction.

Dans une application plus importante, il serait préférable de lui donner un nom spécifique pour limiter les risques de conflit avec d’autres routines.

INITGET pour contrôler la saisie

Avec initget, nous définissons les réponses autorisées avant l’appel à getkword.

Une valeur extérieure à la liste ne sera pas acceptée comme mot-clé valide.

GETKWORD pour proposer des choix

getkword permet de créer une interaction directement dans la ligne de commande AutoCAD.

Pas besoin de développer une boîte de dialogue pour proposer quelques options.

STRCAT pour construire une invite dynamique

Avec strcat, nous construisons un message intégrant la dernière distance utilisée.

L’invite s’adapte automatiquement au contexte.

IF pour adapter le comportement

La structure conditionnelle if permet de mémoriser une nouvelle valeur uniquement lorsqu’un choix a été effectué.

Si l’utilisateur valide directement, la valeur précédente est conservée.

COMMAND pour conserver le fonctionnement natif

Enfin, command lance la commande DECALER avec la distance sélectionnée.

Nous conservons ainsi le fonctionnement habituel d’AutoCAD pour la sélection de l’objet et l’indication du côté.

AutoLISP ne remplace pas ici la commande native. Il enrichit son comportement.

6. Sept macros ou une routine AutoLISP ?

CritèreMacrosAutoLISP
Mise au point initialeTrès rapideNécessite du code
Distances prédéfiniesSept outilsUne commande
Dernière valeur utiliséePas de mémorisation dédiée dans cet exempleValeur mémorisée
Contrôle de saisieParamètres fixesINITGET
ConditionsPossibilités limitéesIF, COND
BouclesPeu adaptées aux macros classiquesWHILE, REPEAT, FOREACH
RéutilisationDuplication possibleFonctions communes
MaintenancePlusieurs macros à vérifierLogique centralisée
ÉvolutivitéAdaptée aux séquences simplesAdaptée aux comportements complexes

Il serait cependant trompeur d’affirmer qu’une routine AutoLISP est toujours préférable.

Pour sept distances fixes, les sept macros peuvent rester la solution la plus simple.

Le véritable avantage d’AutoLISP apparaît lorsque nous voulons faire évoluer le fonctionnement sans multiplier les modifications.