Bonjour
Normalement, il ne devait pas marcher avant non plus, le problème vient de l'organisation de ton code.
(defun c:Pouet1 ()
(choix1)
(defun choix1 ()
(princ "Pouet")
(princ)
)
)
(defun c:Pouet2 ()
(defun choix1 ()
(princ "Pouet")
(princ)
)
(choix1)
)
Pouet1 ne fonctionnera pas. Lorsque tu vas lancer la commande, le LISP va se dérouler, il va rencontrer (choix1), mais il ne le "connaît pas" encore.
Si tu veux garder les defun imbriqués, il faut déclarer la fonction avant de l’appeler (comme dans Pouet2). Le LISP se déroule, il définit la fonction choix1, puis il y fait appel, tout va bien.
Dernière possibilité : ne pas imbriquer les defun (ce que tu as fait dans ton LISP final)
(defun choix1 ()
(princ "Pouet")
(princ)
)
(defun c:Pouet3 ()
(choix1)
(choix2)
)
(defun choix2 ()
(princ " et re-Pouet")
(princ)
)
Ici, Pouet3 fait appel à 2 fonctions "externe" (qui existe en dehors de lui). Autocad connaît les fonctions choix1 et choix2 indépendamment de la fonction Pouet3. Donc que tu le places avant ou après pouet3, il pourra les utiliser. C'est comme ça que je fais le plus souvent mes LISP.
Pour avancer en LISP, tu peux te renseigner sur la déclaration des variables (absence de ton programme) qui te rendra un travail plus propre et moins sujet aux bugs.