Bonjour tout le monde, Voila j'ai un souci avec un programme lisp il se bloque dans certaines circonstance et je n'arrive pas trouvé mon erreur. Si quelqu'un peut m'aider ce serait vraiment gentil. Je vous explique le principe. du programme. J'ai des blocs (A, B, C,..Z) que je dois remplacer par d'autre blocs (A1,B1,C1....,Z1) qui eux n'ont pas forcément le même point d'insertion ni la même echelle et qui n'ont pas le même nom. J'ai donc écrit pour commencer un fichier texte tabulé structuré de la façon suivante: Nom bloc existant (tab) Nom bloc cible (tab) Dx (tab) Dy (Tab) echX (Tab) echY Par exemple: si le bloc" A" qui est un carré a comme point d'insertion 0;0 et come longeur 1 mètre, et que le bloc A1 est un carré avec un point d'insertion 0;1 et qui a comme longeur 2 metre.. A (tab) A1 (tab) 1 (tab) 0 (tab) 0,5 (tab) 0,5 Ensuite j'ai écrit un programme lisp qui en faisant appel à ce fichier txt tabulé remplace tous les bloc( A,B,C,...,Z) par les bloc (A1,B1,C1,....,Z1). le voici: (defun c:chblocs () (setq fic (open "C:/sevres/02_Table sandreauDESMOULINS/tabledefdESMOULIN.txt" "r")) (read-line fic) (setq ligne (read-line fic)) (while (/= ligne nil) ;lecture des paramètres (setq posblc2 (vl-string-position 9 ligne)) (setq posdx (vl-string-position 9 ligne (+ posblc2 1))) (setq posdy (vl-string-position 9 ligne (+ posdx 1))) (setq posechx (vl-string-position 9 ligne (+ posdy 1))) (setq posechy (vl-string-position 9 ligne (+ posechx 1))) (setq nomblc1 (substr ligne 1 posblc2)) (setq nomblc2 (substr ligne (+ posblc2 2) (- posdx posblc2 1))) (setq dx (atof (substr ligne (+ posdx 2) (- posdy posdx 1)))) (setq dy (atof (substr ligne (+ posdy 2) (- posechx posdy 1)))) (setq echx2 (atof (substr ligne (+ posechx 2) (- posechy posechx 1)))) (setq echy2 (atof (substr ligne (+ posechy 2) (- (strlen ligne) posechy 1)))) ;echange du bloc (setq jeusel (ssget "x" (list (cons 0 "INSERT") (cons 2 nomblc1)))) (setq nbobj (sslength jeusel)) (setq i 1) (setq listobj (list (ssname jeusel 0))) (repeat (- nbobj 1) (setq listobj (append listobj (list (ssname jeusel i)))) (setq i (+ i 1)) ) (setq i 0) (repeat nbobj (setq objet (nth i listobj)) (setq i (+ i 1)) (setq dxf (entget objet)) (foreach code dxf (progn (if (= (car code) 0) (setq tipe code) ) (if (= (car code) 2) (setq nom code) ) (if (= (car code) 10) (setq coordblc1 code) ) (if (= (car code) 50) (setq rotblc1 (cdr code)) ) (if (= (car code) 41) (setq echxblc1 code) (setq echx (cdr echxblc1)) ) (if (= (car code) 42) (setq echyblc1 code) (setq echy (cdr echyblc1)) ) ) ) (if (= (cdr tipe) "INSERT") (if (= (cdr nom) nomblc1) (progn ;calcul du point d'insertion du nouveau bloc (setq xblc1 (nth 1 coordblc1)) (setq yblc1 (nth 2 coordblc1)) (if (/= dy 0) (progn (setq deca (sqrt (+ (* dx dx echx echx echx2 echx2) (* dy dy echy echy echy2 echy2)))) (setq ang (atan (/ (* dx echx) (* dy echy)))) (setq dx2 (* deca (sin (- ang rotblc1)))) (setq dy2 (* deca (cos (- ang rotblc1)))) (if (< dy 0) (progn (setq dx2 (- 0 dx2)) (setq dy2 (- 0 dy2)) ) ) ) (progn (if (/= dx 0) (progn (if (< dx 0) (setq ang PI) (setq ang 0)) (setq dx2 (* echx2 echx dx (cos (- ang rotblc1)))) (setq dy2 (* echy2 echy dx (sin (+ ang rotblc1)))) ) (progn (setq dx2 (* echx2 echx dx)) (setq dy2 (* echy2 echy dy)) ) ) ) ) (setq coordblc2 coordblc1) (setq coordblc2 (subst (+ xblc1 dx2) xblc1 coordblc2)) (setq coordblc2 (subst (+ yblc1 dy2) yblc1 coordblc2)) ;echange du bloc (setq nvnom (cons 2 nomblc2)) (setq echxblc2 (cons 41 (* echx2 echx))) (setq echyblc2 (cons 42 (* echy2 echy))) (setq dxf (subst nvnom nom dxf)) (setq dxf (subst coordblc2 coordblc1 dxf)) (setq dxf (subst echxblc2 echxblc1 dxf)) (setq dxf (subst echyblc2 echyblc1 dxf)) (entmod dxf) ) ) ) ) (setq ligne (read-line fic)) ) (close fic) ) Le problème est le suivant : Quand le programme ne trouve pas le bloc A sur le dessin il s'arrete et ne passe pas au bloc suivant. Sauriez vous d'où cela vient? Voila désolé pour le post pavé et merci d'avance pour les éventuelle réponse.