Aller au contenu

LISP Hatch2Excel


lili2006

Messages recommandés

Bonsoir à toutes et tous,

 

Je viens de m'apercevoir que je ne peux plus utiliser ce Lisp qui faisiat suite à un long post sur certain projets (c'est ok sur mon gabarit de base !!!???).

 

Voilà ce que me retourne AutoCAD :

 

Commande:

Commande: Hatch2Excel ; erreur: Erreur Automation Entrée incorrecte

 

Rappel LISP =>

 

 (defun c:Hatch2Excel (/ acdoc tot lst file cell sheet n)
(vl-load-com)
(setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(vlax-for l (vla-get-Layers acdoc)
(setq name (vla-get-Name l)
tot 0.0
)
(if (ssget "_X" (list '(0 . "HATCH") (cons 8 name)))
(progn
(vlax-for h (vla-get-ActiveSelectionSet acdoc)
(setq tot (+ tot (vla-get-area h)))
)
(setq lst (cons (list name tot) lst))
)
)
)
(setq lst (vl-sort lst
(function (lambda (x1 x2) ()
)
(if (member (type getexcel) '(SUBR USUBR))
(if (setq file (getfiled "Choisir ou créer un fichier Excel" "" "xls" 33))
(if (member (type doubleinputbox) '(SUBR USUBR))
(progn
(while (not (and
(setq cell (doubleinputbox
"Hachures vers Excel"
"Nom de la feuille Excel"
"Cellule de départ"
"Feuil1"
"A1"
)
sheet (car cell)
cell (cadr cell)
)
(cell-p cell)
)
)
(alert "Référence de cellule non valide.")
)
(and (= sheet "") (setq sheet nil))
(OpenExcel (cond ((findfile file))) sheet nil)
(repeat (setq n (length lst))
(putCell cell (car lst))
(setq lst (cdr lst)
cell (Row+n cell 1)
)
)
;;---------------- Somme des surfaces ----------------;;
(putCell
cell
(list "Total"
(strcat "=somme("
(column+n (row+n cell (- n)) 1)
":"
(column+n (row+n cell (- 1)) 1)
)
)
)
;;----------------------------------------------------;;
(CloseExcel file)
)
(alert "La routine LISP DoubleInputBox doit être chargée.")
)
)
(alert "GetExcel.lsp doit être chargé")
)
(princ)
)

 

Quelqu'un à une idée ?

 

Remarque : Les routines "LISP DoubleInputBox " & "GetExcel.lsp ", sont bien chargées !

 

Quand je tape en ligne de commande :

 

Commande: (DoubleInputBox)

; erreur: nombre d'arguments insuffisants,

 

Idem pour :

 

Commande: (GetExcel)

; erreur: nombre d'arguments insuffisants

 

????

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

salut,

 

Je ne saurais dire comme ça, pourquoi tu as ce message, peut-être en utilisant la méthode proposée ici tu pourrais dire quelle expression provoque l'erreur.

 

Quand je tape en ligne de commande :

 

Commande: (DoubleInputBox)

; erreur: nombre d'arguments insuffisants,

 

Idem pour :

 

Commande: (GetExcel)

; erreur: nombre d'arguments insuffisants

 

????

 

C'est normal, comme je dis parfois une routine LISP est assimilable à une fonction LISP prédéfinie certaines de ces fonctions requièrent des arguments, et si elles sont appelées sans arguments, retournent ce message d'erreur.

Essaye avec la fonction LISP minusp (qui retourne T si l'argument (un nombre) est négatif, nil sinon :

 

(minusp 1) -> nil

(minusp -1) -> T

(minusp) -> ; erreur: nombre d'arguments insuffisants

(minusp "a") -> ; erreur: type d'argument incorrect: numberp: "a"

 

Les routines GetExcel et DubleInputBox requièrent des arguments, ils sont décrits dans les commentaires en début de routines :

 

;;-------------------------------------------------------------------------------

;; GetExcel - Stocke les données d'une feuille Excel dans la liste *ExcelData@

;; Arguments : 3

;; ExcelFile$ = Chemin et nom ce fichier

;; SheetName$ = Nom de la feuille ou nil pour non spécifié

;; MaxRange$ = Référence de la cellule maximum à inclure

;; Exemples de syntaxe :

;; (GetExcel "C:\\Temp\\Temp.xls" "Feuil1" "E19") = Ouvre C:\Temp\Temp.xls sur la Feuille1 et lit jusqu'à la cellule E19

;; (GetExcel "C:\\Temp\\Temp.xls" nil "IV123") = Ouvre C:\Temp\Temp.xls sur la feuille courante et lit jusqu'à la cellule IV123

 

;; DoubleInputBox (gile)

;; Ouvre une boite de dialogue pour récupérer deux valeurs

;; sous forme de chaine de caractère

;;

;; Arguments

;; tous les arguments sont de chaines de caractère (ou "")

;; box : titre de la boite de dialogue

;; msg1 : message pour la première entrée

;; msg1 : message pour la seconde entrée

;; val1 : valeur par défaut de la première entrée

;; val1 : valeur par défaut de la seconde entrée

;;

;; Retour

;; une liste (valeur1 valeur2) ou nil

 

[Edité le 25/11/2007 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

J'avais déjà mis en route le dégogueur avant de poster, mais j'ai tout de suite le message cité plus haut, à savoir :

 

Commande:

Commande: Hatch2Excel ; erreur: Erreur Automation Entrée incorrecte

Commande:

 

donc,... ?

 

La fréquence est de environ 1 fichier sur 3 .

 

Pourtant dans ces fichiers, j'utilise à peu prés toujours les mêmes outils ou Lisp,...

 

Merci pour les explications (gile).

 

Maintenant, il serait intéressant de savoir si d'autres utilisateurs ont le même problème ??!

 

Tant que j'y suis, je dessine en cm (pour 1m, je tapre 100 dans l'EO) et voudrais récupérer les surfaces en m², que dois-je changer dans le Lisp pour ce faire ?

 

Merci d'avance.

 

Bonne soirée.

 

[Edité le 25/11/2007 par lili2006]

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Pour utiliser la méthode citée plus haut, il faut :

- ouvrir l'éditeur Visual LISP

- cocher "Arrêt sur erreur" dans le menu "Débogage"

- lancer la commande (soit en retournant dans AutoCAD sans fermer l'éditeur soit en entrant (c:Hatch2Excel) dans la console de l'éditeur.

- faire CTRL+F9 (dans l'éditeur) après avoir eu le message d'erreur.

 

Tant que j'y suis, je dessine en cm (pour 1m, je tapre 100 dans l'EO) et voudrais récupérer les surfaces en m², que dois-je changer dans le Lisp pour ce faire ?

 

remplace (ligne 11) :

(setq tot (+ tot (vla-get-area h)))

par :

(setq tot (+ tot (/ (vla-get-area h) 10000)))

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à toutes et tous,

 

J''ai bien compris la manip à faire, le problème c'est que je n'ai rien en surbrillance et AutoCAD ne répond plus,

 

<!--url{0}-->

 

je suis obligé de passer par le gestionnaire des taches. Il n'ouvre même pas le Lisp. J'ai essayé également en ouvrant d'abord le Lisp, toujours rien ?? !

 

<!--url{1}-->

 

Merci d'avance si tu as une idée,sinon ce n'est pas non plus dramatique,... J

 

Je laisse un des fichiers en lien ici si cela peut aider !!??

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

J'ai regardé ton fichier, certaines hachures n'ayant plus leur contour, leur propriété "aire" n'est plus accessible. Essaye d'en sélectionner une, tu ne pourras lire son aire ni dans la fenêtre de propriétés, ni avec la commande LISTE.

 

Voilà une version qui envoie un message d'alerte dans ce cas là, mais permet de poursuivre quand même.

 

(defun c:Hatch2Excel (/ acdoc name tot area err lst file cell sheet n)
 (vl-load-com)
 (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (vlax-for l (vla-get-Layers acdoc)
   (setq name (vla-get-Name l)
  tot  0.0
   )
   (if	(ssget "_X" (list '(0 . "HATCH") (cons 8 name)))
     (progn
(vlax-for h (vla-get-ActiveSelectionSet acdoc)
  (setq area (vl-catch-all-apply 'vla-get-area (list h)))
  (if (vl-catch-all-error-p area)
    (setq err T)
    (setq tot (+ tot (/ (vla-get-area h) 10000)))
  )
)
(setq lst (cons (list name tot) lst))
     )
   )
 )
 (setq	lst (vl-sort lst
	     (function (lambda (x1 x2) (	    )
 )
 (and
   err
   (alert
     "Certaines hachures n'ayant plus leur contour,
     \nleurs aires ne seront pas comptabilisées"
   )
 )
 (if (member (type getexcel) '(SUBR USUBR))
   (if	(setq file (getfiled "Choisir ou créer un fichier Excel" "" "xls" 33))
     (if (member (type doubleinputbox) '(SUBR USUBR))
(progn
  (while (not (and
		(setq cell  (doubleinputbox
			      "Hachures vers Excel"
			      "Nom de la feuille Excel"
			      "Cellule de départ"
			      "Feuil1"
			      "A1"
			     )
		      sheet (car cell)
		      cell  (cadr cell)
		)
		(cell-p cell)
	      )
	 )
    (alert "Référence de cellule non valide.")
  )
  (and (= sheet "") (setq sheet nil))
  (OpenExcel (cond ((findfile file))) sheet nil)
  (repeat (setq n (length lst))
    (putCell cell (car lst))
    (setq lst  (cdr lst)
	  cell (Row+n cell 1)
    )
  )
  ;;---------------- Somme des surfaces ----------------;;
  (putCell
    cell
    (list "Total"
	  (strcat "=somme("
		  (column+n (row+n cell (- n)) 1)
		  ":"
		  (column+n (row+n cell (- 1)) 1)
	  )
    )
  )
  ;;----------------------------------------------------;;
  (CloseExcel file)
)
(alert "La routine LISP DoubleInputBox doit être chargée.")
     )
   )
   (alert "GetExcel.lsp doit être chargé")
 )
 (princ)
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

certaines hachures n'ayant plus leur contour, leur propriété "aire" n'est plus accessible

 

Oups, désolé ! A aucun moment je n'ai pensé à ça,...

 

ça marche sur tous les fichiers qui posaient problèmes maintenant.

 

Merci beaucoup (gile) car cette routine est vraiment trés intéressante en avant-métré et garantit un travail sûr. En plus, maintenant je sais que si il n'y à plus de contour, il n'y aura pas non plus de surfaces dans le fichier récapitulatif, c'est bien mieux que de ne rien faire et surtout de ne pas savoir,...

 

Bonne nuit.

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité