N'y allons pas par 4 chemins : (defun c:maroutine(/ *error*) ; ici *error* est local.
(defun *error* (msg)
(command) ; Annulation des commandes en cours
(princ (strcat"\nerreur ici, msg= " msg))
(princ)
)
(command "_pline")
(while (setq p(getpoint)) (command p))
(command)
) Alors voilà. *error* aurait l'air comme cela d'une variable, c'est pourtant une fonction. Si tu lances !*error* dans la ligne de commande (mieux dans la console Vlisp car là au moins il n'y a pas de correcteur d'orthographe à désactiver), cela te renvoie : # Tu as la preuve qu'il s'agit d'une fonction déjà définie. Au sein d'une commande, comme je l'ai fait, on peut redéfinir cette fonction en toute tranquillité à l'intérieur puisque la variable est locale, enfermée. Tu connais au moins ce principe. *error* portera toujours, et en Français, le message d'erreur renvoyé dans la variable msg. Ici ca sera "fonction annulée".