Bonjour, je réalise des métrés, grâce à un un programme Lisp que j'ai adapté et créé pour mon usage. Ce programme permet et demande : de sélectionner un calque, sélectionner un contour (je trace un rectangle ou une polyligne fermée), et de compter toutes les lignes et polylignes et lignes à l'intérieur de ce contour en enfin de me donner la longueur totale. Seulement la longueur donnée n'est pas toujours la même, si a mon écran je vois le contour avec les lignes et poly en entier il donne la bonne valeur,par contre si je fais un zoom écran et que je vois seulement quelques lignes dans le contour il va prendre en compte que les lignes entières visibles sur mon écran Voici dans le cas ou il prend en compte toutes les lignes et poly Et voici le cas si je zoom, il prendra en compte que les deux traits du bas C'est quand meme très bizarre cette histoire! que le programme varie en fonction de ce que je vois à l'écran! Voici le début du lisp: (defun c:metrepoly (/ e len n e1) (vl-load-com) (setq e (entget (car (entsel "\nselectionner un contour de selection ")) ) ) ;obtenir la liste de l'entité (setq len (length e)) ;longueur de la liste (setq n 0) (setq liste nil) ;compteur à zero (repeat len ;répéter pour chaque élément de la liste (setq e1 (car (nth n e))) ;prendre chaque élément de la liste et en retirer le code (1er item) (if (= e1 10) ;tester le code 10 (progn ;si c'est le groupe 10 alors faire (terpri) ;nouvelle ligne (princ (cdr (nth n e))) (setq liste (cons (cdr (nth n e)) liste)) ;écrire les coordonnées ;(princ (cadr (nth n e))) écrit les valeurs de x ;(princ (caddr (nth n e))) écrit les valeurs de y ; (nth n e) : sort l'élement n de la liste e (n = 0,1,2 ...) ) ;fin progn ) ;fin if (setq n (1+ n)) ;incrémenter le compteur ) ;fin repeat (setq LI (entsel " \nSélectionner un élément sur un calque ")) (setq NomEntite (car LI)) (setq LISTEsel (entget NomEntite)) (setq calc (cdr (assoc 8 listesel))) ;selectionne dans liste les volumes du calque (setq liste_selection1 (ssget "_WP" liste (list (cons 0 "line,LWPOLYLINE") (cons 8 calc)) ) ) (setq nombre (sslength liste_selection1)) (setq indice 0) (setq longtotal1 0) (repeat nombre (setq ent1 (ssname liste_selection1 indice)) (setq long (vlax-get-property (vlax-ename->vla-object ent1) 'length ) ) (setq longtotal1 (+ longtotal1 long)) (setq indice (1+ indice)) ;(setq nbrepl (/ longtotal1 1.2)) ; nombre de plaques ) (alert (strcat "La longueur totale du mur du calque " calc " est de " (rtos longtotal1 2 2) " m" ) ) ) Merci d'avance si vous trouvez une solution à ce problème!