Arcasdk Posté(e) le 13 septembre 2010 Posté(e) le 13 septembre 2010 Bonjour à tous, je suis actuellement occupé de faire une petite routine qui dessine des vis en fonction d'une liste excel. Je m'en sort pas trop mal en piochant à droite et à gauche (Merci le mpl de patrcik35). Mais maintenant je rencontre un problème lorsque je teste ma routine en mode pas a pas. A un moment précis il me stoppe ma routine et je n'ai pas de précision sur ce qu'il ne va pas. Je ne vais pas vous coller ma routine entière (sauf si vous me le demander) mais en voici un bout, là où ça coince. (while (and (/= resultat 1)(/= resultat 0)) (action_tile "diam" "(setq ch_dn $value)(lire_excel)") (action_tile "list_lg" "(setq ch_lg $value)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq resultat (start_dialog))) Et ca plante quand je clic sur la liste de mon dcl Voici le message d'erreur ;;; Copie dans la fenêtre 11:09 AM 9/13/10 (lambda ($KEY $VALUE $DATA $REASON $X $Y) (setq ch_dn $value)(lire_excel) ) ;;; Fin du texte ) Comment faire pour voir la syntaxe qui merde Merci <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
Carboleum Posté(e) le 13 septembre 2010 Posté(e) le 13 septembre 2010 Salut, Pour déboguer mes programmes, j'utilise pas le "pas à pas", je redéfini la fonction *error* (qui est appelée dès qu'une erreur est rencontrée) pour qu'elle me renvoie plus d'info. (defun *error* (msg) (vl-bt)) relance la routine qui ne fonctionne pas, tu aura peut-être des info plus pertinente notamment ce qui est attendu. bonne chance ;-) Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog
Arcasdk Posté(e) le 13 septembre 2010 Auteur Posté(e) le 13 septembre 2010 ah cool...... Mais il m'a claqué un gros pavé comme ça....? Ca se lit comment....? Commande: Analyse rétrospective: [0.102] (VL-BT) [1.98] (*ERROR* "type d'argument incorrect: fixnump: \"6\"") LAP+7 [2.92] (_call-err-hook # "type d'argument incorrect: fixnump: \"6\"") [3.86] (sys-error "type d'argument incorrect: fixnump: \"6\"") :ERROR-BREAK.81 "type d'argument incorrect: fixnump: \"6\"" [4.78] (NTH "6" ("M3" "M4" "M5" "M6" "M8" "M10" "M12" "M16" "M20" "M24" "M30" "M36" "M42")) [5.72] (LIRE_EXCEL) LAP+14 [6.67] (# "diam" "6" "" 1 46 83) LAP+17 [7.57] (#) :ENTRY-NAMESPACE.54 (:ENTRY-NAMESPACE) [8.51] (#) [9.48] (_lisplet-apply # #-application-envelope-> nil nil) [10.40] (_lisplet-app-apply # # ("diam" "6" "" 1 46 83)) [11.33] (dcl-call-back ("diam" "6" "" 1 46 83) T) :DCL-ACTION.27 (((:DCL-ACTION "windows" "diam" 1))) [12.24] (START_DIALOG) [13.20] (C:VISH) LAP+811 [14.15] (#) [15.12] (# "(C:VISH)" T #) :CALLBACK-ENTRY.6 (:CALLBACK-ENTRY) :ARQ-SUBR-CALLBACK.3 (nil 0) [Edité le 13/9/2010 par Arcasdk] <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
Carboleum Posté(e) le 13 septembre 2010 Posté(e) le 13 septembre 2010 yep, Ca se lit comme ceci: (les index 3.86, 4.78 et 5.72)quelque part dans la fonction (lire_excel), tu as une fonction nth qui reçoit une chaine de caractère ("6") en paramètre alors qu'elle s'attend à avoir un nombre entier. utilise la fonction atoi pour convertir une chaine en nombre entier. Il faut pas avoir peur du gros pavé, avec un peu d'habitude, ca se lit vite ;-)Généralement, l'erreur se trouve dans les 5 premières lignes. à + Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog
bseb67 Posté(e) le 13 septembre 2010 Posté(e) le 13 septembre 2010 salut Arcasdk, $value renvoi une chaine de caractères. Donc normal que le lisp plante, comme te l'a noté Carboleum :nth attend un entier Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
Arcasdk Posté(e) le 13 septembre 2010 Auteur Posté(e) le 13 septembre 2010 Merci à tous, ma macro fonctionne. Si il y des curieux voilà le code (defun c:vish (/ memoire resultat s ch_dn xl_wks xl xl_fichier xl_classeur xl_feuille n cell_diam rng_dn val_dn list_lg val_lg p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 k s l px pz hyp adj pu py pw pz px lg lf hautext postext nomvis) (vl-load-com) ;;;;;;;;;;;;;;;;;;;;;;;;;; ;;Communiquer avec EXCEL;; ;;;;;;;;;;;;;;;;;;;;;;;;;; ;(setq ch_dn "M16") ;(setq ch_lg "M16") (setq xl (vlax-get-or-create-object "Excel.Application")) (vlax-import-type-library :tlb-filename "c:/program files/microsoft office/office/excel9.olb" :methods-prefix "xl-" :properties-prefix "xlp-" :constants-prefix "xlc-") (setq xl_wks (vlax-get xl "workbooks")) (setq xl_fichier (xl-open xl_wks "J:\\Boulot\\Documents\\Autocad\\Lisp\\visserie\\Vis_H.xls")) (vla-put-visible xl 1) (setq xl_classeur (vlax-get xl_fichier "Sheets")) (setq xl_feuille (xlp-get-item xl_classeur "Feuil1")) (setq n 3) (setq cell_diam (strcat "B" (rtos n))) (setq rng_dn (xlp-get-range xl_feuille cell_diam)) (setq val_dn (vlax-variant-value (xlp-get-value rng_dn))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;Trouver les val_dn du dn dans le tableau excel;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq list_dn '("M3" "M4" "M5" "M6" "M8" "M10" "M12" "M16" "M20" "M24" "M30" "M36" "M42")) (defun lire_excel (/ list_lg) (setq ch_dn (nth (atoi ch_dn) list_dn) n 3) (while (/= val_dn ch_dn) (progn (setq n (+ n 1)) (setq cell_diam (strcat "B" (rtos n))) (setq rng_dn (xlp-get-range xl_feuille cell_diam)) (setq val_dn (vlax-variant-value (xlp-get-value rng_dn))) ) ) (setq memoire n) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;Lire les longueurs dispo pour les dn spécifiées;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (while (= val_dn ch_dn) (progn (setq cell_lg (strcat "A" (rtos n))) (setq rng_lg (xlp-get-range xl_feuille cell_lg)) (setq val_lg (vlax-variant-value (xlp-get-value rng_lg))) (setq list_lg (cons val_lg list_lg)) (setq n (+ n 1)) (setq cell_diam (strcat "B" (rtos n))) (setq rng_dn (xlp-get-range xl_feuille cell_diam)) (setq val_dn (vlax-variant-value (xlp-get-value rng_dn))) ) ) (setq list_lg (reverse list_lg)) (start_list "list_lg") (mapcar 'add_list list_lg) (end_list) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;DCL;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; charger de la boite de dialogue (setq dcl_id (load_dialog "windows.dcl")) (if (not (new_dialog "windows" dcl_id)) (progn (alert "chargement impossible") (exit) ) ) ;; Remplir la liste box "list_dn" (setq positiondiam 0) (defun liste_dest() (start_list "diam") (mapcar 'add_list list_dn) (end_list) ) (setq resultat 2) (liste_dest) (while (and (/= resultat 1)(/= resultat 0)) (action_tile "diam" "(setq ch_dn $value)(lire_excel)") (action_tile "list_lg" "(setq ch_lg $value)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq resultat (start_dialog)) ) (if (eq resultat 1) (progn ;; récupération des données dans excel pour dessiner la vis (setq dn (strcat "B" (itoa (+ (atoi ch_lg) memoire)))) (setq rng_dn (xlp-get-range xl_feuille dn)) (setq dn (vlax-variant-value (xlp-get-value rng_dn))) (setq dn (atoi (vl-string-trim "M" dn))) (setq l (strcat "E" (itoa (+ (atoi ch_lg) memoire)))) (setq rng_dn (xlp-get-range xl_feuille l)) (setq l (vlax-variant-value (xlp-get-value rng_dn))) (setq lf (strcat "F" (itoa (+ (atoi ch_lg) memoire))))e (setq rng_dn (xlp-get-range xl_feuille lf)) (setq lf (vlax-variant-value (xlp-get-value rng_dn))) (setq s (strcat "C" (itoa (+ (atoi ch_lg) memoire)))) (setq rng_dn (xlp-get-range xl_feuille s)) (setq s (vlax-variant-value (xlp-get-value rng_dn))) (setq k (strcat "D" (itoa (+ (atoi ch_lg) memoire)))) (setq rng_dn (xlp-get-range xl_feuille k)) (setq k (vlax-variant-value (xlp-get-value rng_dn))) ;;Dessin de la vis (setq p1 (list 0 (/ dn -2))) (setq p2 (list (- l (/ dn 10))(/ dn -2))) (setq p3 (list l (+(/ dn -2)(/ dn 10)))) (setq p4 (list l (-(/ dn 2)(/ dn 10)))) (setq p5 (list (- l (/ dn 10))(/ dn 2))) (setq p6 (list 0 (/ dn 2))) (setq p7 (list 0 (/ (* -1.15 s) 2))) (setq p8 (list 0 (/ (* 1.15 s) 2))) (setq p9 (list (- (/ dn 10) k)(/ (* 1.15 s) 2))) (setq hyp (/ (/ s 2) (cos (/ pi 6)))) (setq adj (* (cos (/ pi 3)) hyp)) (setq p10 (list (- 0 k)(- (/ (* s 1.15) 2) (/ adj 2)))) (setq p11 (list (- (/ dn 10) k)(- (/ (* s 1.15) 2) adj))) (setq p12 (list (- 0 k) 0)) (setq p13 (list (- (/ dn 10) k)(+ (/ (* s 1.15) -2) adj))) (setq p14 (list (- 0 k)(+ (/ (* s 1.15) -2) (/ adj 2)))) (setq p15 (list (- (/ dn 10) k)(/ (* -1.15 s) 2))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (if (not (tblsearch "LTYPE" "CONTINUOUS")) (command "-TYPELIGNE" "CH" "CONTINUOUS" "acadiso.lin" "") ) (command "-calque" "n" "FIN,EPURE" "") (command "-calque" "co" "cyan" "EPURE" "t" "a" "EPURE" "co" "rouge" "FIN" "tl" "continuous" "FIN" "") (setvar "clayer" "0") (command "polylign" p1 p2 p3 p4 p5 p6 "cl" "") (command "polylign" p7 p8 p9 "arc" "s" p10 p11 "s" p12 p13 "s" p14 p15 "li" "cl") (command "polylign" p10 p14 "") (setq px (strcat "@" (rtos (- k (/ dn 10))) "<0")) (command "polylign" p11 px "") (command "polylign" p13 px "") (setq pz (strcat "@" (rtos lf) "<180")) (setvar "clayer" "FIN") (if (/= lf l) (progn (setq lg (/ (/ dn 10)(cos (/ pi 4)))) (setq pw (strcat "@" (rtos lg) "<225")) (command "polylign" p3 pz pw "") (setq pw (strcat "@" (rtos lg) "<135")) (command "polylign" p4 pz pw "") (setq py (list (- l lf)(/ dn -2))) (setq pu (strcat "@" (rtos dn) "<90")) (setvar "clayer" "0") (command "polylign" py pu "") (setvar "clayer" "FIN") (command "polylign" p2 p5 "") ) (progn (command "polylign" p3 pz "") (command "polylign" p4 pz "") (command "polylign" p2 p5 "") ) ) (setvar "clayer" "EPURE") (setq hauttext (/ dn 5)) (setq postext (list (/ dn 10) 0 0)) (if (eq lf l) (setq nomvis (strcat "M" (rtos dn) "x" (rtos l))) (setq nomvis (strcat "M" (rtos dn) "x" (rtos l) "-" (rtos lf)))) (command "texte" "j" "mg" postext hauttext "" nomvis ""))) ) [Edité le 13/9/2010 par Arcasdk] <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
Carboleum Posté(e) le 13 septembre 2010 Posté(e) le 13 septembre 2010 intéressant, merci :-) Carboléüm, qui dessine aussi à la main -> Carboleum's sketchblog
Arcasdk Posté(e) le 17 septembre 2010 Auteur Posté(e) le 17 septembre 2010 Coucou, je n'ai pas inclus mon fichier excel ni mon fichier dcl... si cela t’intéresse, file moi ton adresse mail. Chao <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
Arcasdk Posté(e) le 9 octobre 2012 Auteur Posté(e) le 9 octobre 2012 Bonjour à tous, il y a quelques temps j'avais fait ce programme (juste au dessus), qui fonctionnait très bien et qui me permettait de dessiner un boulon en fonction d'une liste dans excel. Alors je ne sais pas si c'est le passage de xp à seven qui fait mais plus moyen de le lancer..... J'ai l'impression pour commencer qu'il ne trouve plus le fichier olb d'excel.... Mais ce n'est peut être pas tout. :tlb-filename "c:/program files/microsoft office/office/excel9.olb" Quelqu'un peut m'aiguiller sur les lignes de codes qui ne vont pas? Merci bcp <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
Patrick_35 Posté(e) le 9 octobre 2012 Posté(e) le 9 octobre 2012 Salut Pour travailler quelque soit la version d'excel, tu peux utiliser directement (vlax-get-or-create-object "Excel.Application")Ou utiliser des outils mis à disposition (fonctionne aussi avec open office) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Arcasdk Posté(e) le 9 octobre 2012 Auteur Posté(e) le 9 octobre 2012 J'ai bien une phrase du genre qui est écrit dans le code (setq xl (vlax-get-or-create-object "Excel.Application")) (vlax-import-type-library :tlb-filename "c:/program files/microsoft office/office/excel9.olb" :methods-prefix "xl-" :properties-prefix "xlp-" :constants-prefix "xlc-") (setq xl_wks (vlax-get xl "workbooks")) Le problème dois venir d'ailleurs... <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
Patrick_35 Posté(e) le 9 octobre 2012 Posté(e) le 9 octobre 2012 L'importation d'une bibliothèque externe type Excel permet d'utiliser les fonctions Excel directement depuis Autocad en y ajoutant un préfix.Par exemple (xlp-getrow Mon_objet)En utilisant ActiveX, tu fais un peu la même chose, écrite un peu différemment.Par exemple (vlax-get Mon_objet 'getrow)Son avantage est d'utiliser n'importe quel version/plateforme.Là, tel qu'est écrit le lisp (à moins que ce soit ailleurs), l'utilisation de la bibliothèque ne sert à rien. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Arcasdk Posté(e) le 10 octobre 2012 Auteur Posté(e) le 10 octobre 2012 Merci bien Patrick35. en fouillant et avec tes explications, j'ai compris qu'il fallait changer toutes mes syntaxes: (setq xl_feuille (xlp-get-item xl_classeur "Feuil1"))par (setq xl_feuille (vlax-get-property xl "Activesheet")) les (setq rng_dn (xlp-get-range xl_feuille cell_diam))par (setq rng_dn (vlax-get-property xl "range" cell_diam)) et les (setq val_dn (vlax-variant-value (xlp-get-value rng_dn)))par (setq val_dn (vlax-variant-value (vlax-get-property rng_dn 'value))) voili voilou, a bientôt. <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
Patrick_35 Posté(e) le 10 octobre 2012 Posté(e) le 10 octobre 2012 Salut C'est presque ça(setq xl_feuille (vlax-get-property xl "Activesheet"))Là, tu travailles sur la feuille active, pas forcément sur "Feuil1" Sinon, si tout fonctionne correctement, sauf évolution majeur de la part de Microsoft, ton lisp devrait être passe-partout @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant