Aller au contenu

grosseel

Membres
  • Compteur de contenus

    44
  • Inscription

  • Dernière visite

Tout ce qui a été posté par grosseel

  1. tu peut me l'envyer à l'adresse ci-dessous : g.rosseel@eras.fr je te le renvoie, convertit au format AutoCAd de ton choix, demain matin sans faute. Bonne soirée à tous.
  2. Désolé mais ca ne change rien à mon probléme
  3. Excuse moi, je n'avais pas assez creuser ton LISP, qui est ce que je voulais. Merci encore por ce superbe LISP.
  4. j'ai testé cette partie du programme ( Liaison_Xl) indépendamment du reste du programme en faisant appel directement à la fonction et faisant appel au fichier Test.xls. Et ça marche. De même l'autre partie de programme (Export_Xl) marche aussi séparement de l'autre programme. C'est quand je fait la liaison que ça ne marche pas.
  5. l'ensemble du programme fonctionne à un point prêt, c'est qu'il n'ouvre pas mon fichier excel. Je croit que l'appel de sous-fonction Liaison_Xl (que je conditionne pas un toggle) ne fonctionne pas mais je ne sais pas pourquoi ??? Ci-joint le programme Lsp et DCL // Exportation des attributs de blocs Filerie et/ou Câbles export : dialog { label = "Exportation Excel"; : boxed_radio_column { label = "1. Nom et Chemin du fichier Excel : "; : row { : text { key = "montexte"; width = 30;} : button { label = "..."; key = "saisie"; alignment = right;}} : toggle { label = "Ouverture du fichier Excel"; key = "Ouverture"; mnemonic = "O";}} : boxed_radio_row { label = "2. Attributs à exporter : "; key = "export"; : radio_button { label = "Repéres de Fils"; key = "Filerie"; mnemonic = "F"; value = "1";} : radio_button { label = "Repéres de Câbles"; mnemonic = "C"; key = "Cable";}} : row { ok_cancel; : button { key = "helpexpt"; label = "Aide";}} } ;;Pour activer les fonctions visual-lisp (vl-load-com) ;; ------------------------------------------------------------------------------------------------------------------------ ;; Programme principale pour l'exportation d'attributs de blocs ;; ------------------------------------------------------------------------------------------------------------------------ (defun c:Export_XL (/ OldCmd dcl_id) (setq OldCmd (getvar "CMDECHO") dcl_id (load_dialog "ERAS-EL.dcl")) (setq nom "") (setvar "CMDECHO" 0) ;; Création de la boite (new_dialog "export" dcl_id) ;; Fonction d'appel en retour (action_tile "about" "(c:about)") (action_tile "helpexpt" "(helpexpt)") (action_tile "cancel" "(done_dialog 0)") (action_tile "accept" "(do_accept)") (action_tile "saisie" "(saisie)") (action_tile "Ouverture" "(setq Ouverture $value)") ;; Affichage de la boite (setq What_next (start_dialog)) (if (= What_next 2) (progn ;; Exportation des attributs (if (= EXPORT "Filerie") (command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\REPERE FIL CABLE\\FIL.blk" "Xls" nom)) (if (= EXPORT "Cable") (command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\REPERE FIL CABLE\\CAB.blk" "Xls" nom))) (setvar "CMDECHO" OldCmd)) ;; Déchargement de la boite (unload_dialog dcl_id) ;; Ouverture du fichier (if (= "1" (get_tile "Ouverture")) (Liaison_Xl)) ) ;; Fonction pour Saisie du nom et chemin du fichier xls (defun saisie () (setq nom (getfiled "Nom du fichier excel à créer" "T:\\Export\\" "xls" 1)) (set_tile "montexte" nom)) ;; Fonction pour Récupération des informations de la boite DCL (defun do_accept () (setq EXPORT (get_tile "export")) ;(alert nom) ;; pour débug afficher la valeur récupérée (if (= nom "") (alert "Saisissez le nom et le chemin du fichier d'exportation") (done_dialog 2))) ;; ------------------------------------------------------------------------------------------------------------------------ ;; Fonction pour Affichage de la boite de dialogue d'aide Fct Export (defun helpexpt () (new_dialog "helpexpt" dcl_id) (setq x (dimx_tile "logo") y (dimy_tile "logo")) (start_image "logo") (fill_image 0 0 x y -2) (slide_image 0 0 x y "ERAS") (end_image) (start_dialog)) ;; ------------------------------------------------------------------------------------------------------------------------ ;; Fonction pour Déterminer le version d'Excel Installer fichier pour faire une liaison avec excel et qui donne sa version (defun Liaison_Xl (/ Chemin_Excel Environ Version_Excel) (if (setq Chemin_Excel (vl-registry-read "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Excel.EXE" "Path")) (progn (foreach Environ (list "SYSTEMROOT" "WINDIR" "WINBOOTDIR" "SYSTEMDRIVE" "USERNAME" "COMPUTERNAME" "HOMEDRIVE" "HOMEPATH" "PROGRAMFILES") (if (vl-string-search (strcat "%" Environ "%") Chemin_Excel) (setq Chemin_Excel (vl-string-subst (strcase (getenv Environ)) (strcat "%" Environ "%") Chemin_Excel)))) (if (= (vl-string-elt Chemin_Excel (1- (strlen Chemin_Excel))) 92) (setq Chemin_Excel (strcat Chemin_Excel "Excel.exe")) (setq Chemin_Excel (strcat Chemin_Excel "\\Excel.exe"))) (cond ((findfile (vl-string-subst "Excel8.olb" "Excel.exe" Chemin_Excel)) (setq Chemin_Excel (vl-string-subst "Excel8.olb" "Excel.exe" Chemin_Excel))) ((findfile (vl-string-subst "Excel9.olb" "Excel.exe" Chemin_Excel)) (setq Chemin_Excel (vl-string-subst "Excel9.olb" "Excel.exe" Chemin_Excel))) ((findfile (vl-string-subst "Excel10.olb" "Excel.exe" Chemin_Excel)) (setq Chemin_Excel (vl-string-subst "Excel10.olb" "Excel.exe" Chemin_Excel)))) (cond ((= (strcase (vl-filename-base (vl-filename-directory Chemin_Excel))) "OFFICE11") (setq Version_Excel "2003")) ((= (strcase (vl-filename-base (vl-filename-directory Chemin_Excel))) "OFFICE10") (setq Version_Excel "XP")) ((= (strcase (vl-filename-base Chemin_Excel)) "EXCEL8") (setq Version_Excel "97")) ((= (strcase (vl-filename-base Chemin_Excel)) "EXCEL9") (setq Version_Excel "2000"))) (if (not Version_Excel) (setq Chemin_Excel nil)))) (list Chemin_Excel Version_Excel) ;(alert (strcat "Version Excel: " Version_Excel)) ;;Pour Affichage d'un message ;Lancer Excel (setq xl (vlax-get-or-create-object "Excel.Application")) (vlax-import-type-library :tlb-filename Chemin_Excel :methods-prefix "xl-" :properties-prefix ;;Pour Toutes Versions Excel "xlp-" :constants-prefix "xlc-") (setq xl_wks (vlax-get xl "Workbooks")) ;Ouvrir le fichier test.xls sur la racine du c, ou sinon, l'active dans Excel (setq xl_fichier (xl-open xl_wks "T:\\Export\\Test.xls")) ;(setq xl_fichier (xl-open xl_wks "T:\\Export\\Test.xls")) ;;Pour Tester le sous-Fonction ;Rendre Excel visible (vla-put-visible xl 1) )
  6. Tu as raisons, il suffit de modifier les Options Générales : SETQ pour les symboles protéges : Mode Transparent Merci à tous pour votre aide.
  7. Merci pour ta réponse le programme fopnctionne correctement mis à part qu'AUtoCAD m'affiche une boite de dialogue qui me pose la quetion suivante : et ceci pour une liste assée longue de symboles.
  8. Voila mon programme mis à jour en fonction de vos remarques mais un probléme persiste : [surligneur] ; erreur: type d'argument incorrect: VLA-OBJECT nil[/surligneur] Je ne vois pas le probléme. ;; ------------------------------------------------------------------------------------------------------------------------ ;; Programme principale pour l'exportation d'attributs de blocs ;; ------------------------------------------------------------------------------------------------------------------------ (defun c:XL (/ OldCmd dcl_id) (setq OldCmd (getvar "CMDECHO") dcl_id (load_dialog "ERAS-EL.dcl")) (setq nom "") (setvar "CMDECHO" 0) ;; Création de la boite (new_dialog "export" dcl_id) ;; Fonction d'appel en retour (action_tile "about" "(c:about)") (action_tile "helpexpt" "(helpexpt)") (action_tile "cancel" "(done_dialog 0)") (action_tile "accept" "(do_accept)") (action_tile "saisie" "(saisie)") ;; Affichage de la boite (setq What_next (start_dialog)) (if (= What_next 2) (progn ;; Exportation des attributs (if (= EXPORT "Filerie") (command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\REPERE FIL CABLE\\FIL.blk" "Xls" nom)) (if (= EXPORT "Cable") (command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\REPERE FIL CABLE\\CAB.blk" "Xls" nom))) (setvar "CMDECHO" OldCmd)) ;; Déchargement de la boite (unload_dialog dcl_id)) ;;Pour activer les fonctions visual-lisp (vl-load-com) ;; Pour Lancer la détermination de Version Excel (Liaison_Xl) ;; Pour Ouvrir le fichier 'Nom' (Open_Xl) ;; Fonction pour Saisie du nom et chemein du fichier xls (defun saisie () (setq nom (getfiled "Nom du fichier excel à créer" "T:\\Export\\" "xls" 1)) (set_tile "montexte" nom)) ;; Fonction pour Récupération des informations de la boite DCL (defun do_accept () (setq EXPORT (get_tile "export")) ;;(alert nom) ;; pour débug afficher la valeur récupérée (if (= nom "") (alert "Saisissez le nom et le chemin du fichier d'exportation") (done_dialog 2))) ;; ------------------------------------------------------------------------------------------------------------------------ ;; Fonction pour Affichage de la boite de dialogue d'aide Fct Export (defun helpexpt () (new_dialog "helpexpt" dcl_id) (setq x (dimx_tile "logo") y (dimy_tile "logo")) (start_image "logo") (fill_image 0 0 x y -2) (slide_image 0 0 x y "ERAS") (end_image) (start_dialog)) ;; ------------------------------------------------------------------------------------------------------------------------ ;; Fonction pour Déterminer le version d'Excel Installer fichier pour faire une liaison avec excel et qui donne sa version ;; ------------------------------------------------------------------------------------------------------------------------ (defun Liaison_Xl (/ Chemin_Excel Environ Version_Excel) (if (setq Chemin_Excel (vl-registry-read "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Excel.EXE" "Path")) (progn (foreach Environ (list "SYSTEMROOT" "WINDIR" "WINBOOTDIR" "SYSTEMDRIVE" "USERNAME" "COMPUTERNAME" "HOMEDRIVE" "HOMEPATH" "PROGRAMFILES") (if (vl-string-search (strcat "%" Environ "%") Chemin_Excel) (setq Chemin_Excel (vl-string-subst (strcase (getenv Environ)) (strcat "%" Environ "%") Chemin_Excel)))) (if (= (vl-string-elt Chemin_Excel (1- (strlen Chemin_Excel))) 92) (setq Chemin_Excel (strcat Chemin_Excel "Excel.exe")) (setq Chemin_Excel (strcat Chemin_Excel "\\Excel.exe"))) (cond ((findfile (vl-string-subst "Excel8.olb" "Excel.exe" Chemin_Excel)) (setq Chemin_Excel (vl-string-subst "Excel8.olb" "Excel.exe" Chemin_Excel))) ((findfile (vl-string-subst "Excel9.olb" "Excel.exe" Chemin_Excel)) (setq Chemin_Excel (vl-string-subst "Excel9.olb" "Excel.exe" Chemin_Excel))) ((findfile (vl-string-subst "Excel10.olb" "Excel.exe" Chemin_Excel)) (setq Chemin_Excel (vl-string-subst "Excel10.olb" "Excel.exe" Chemin_Excel)))) (cond ((= (strcase (vl-filename-base (vl-filename-directory Chemin_Excel))) "OFFICE11") (setq Version_Excel "2003")) ((= (strcase (vl-filename-base (vl-filename-directory Chemin_Excel))) "OFFICE10") (setq Version_Excel "XP")) ((= (strcase (vl-filename-base Chemin_Excel)) "EXCEL8") (setq Version_Excel "97")) ((= (strcase (vl-filename-base Chemin_Excel)) "EXCEL9") (setq Version_Excel "2000"))) (if (not Version_Excel) (setq Chemin_Excel nil)))) (list Chemin_Excel Version_Excel)) ;; ------------------------------------------------------------------------------------------------------------------------ ;; Fonction qui ouvre le fichier avec la version approprié d'excel ;; ------------------------------------------------------------------------------------------------------------------------ (defun Open_Xl () ;; Lancer Excel (setq xl (vlax-get-or-create-object "Excel.Application")) (vlax-import-type-library ;;:tlb-filename "C:/Program Files/Microsoft Office/Office/Excel8.olb" ;;Pour Excel 97 :tlb-filename "Chemin_Excel" :methods-prefix "xl-" :properties-prefix "xlp-" :constants-prefix "xlc-") (setq xl_wks (vlax-get xl "Workbooks")) ;;Ouvrir le fichier test.xls sur la racine du c, ou sinon, l'active dans Excel (setq xl_fichier (xl-open xl_wks "nom")) ;;Rendre Excel visible (vla-put-visible xl 1))
  9. Merci à toi Bred ainsi qu'à l'auteur de ce lisp, qui va bien au delà de mes espérances.
  10. j'aimerais savoir si quelqu'un aurait la possiblilité de me fournir un Lisp qui permettrait de définir le version d'excel installer, puis d'ouvrir un fichier excel nommer (soit par pointage, soit ce lisp serait implémenter dans un autre lisp qui donnerait le chemin et le nom du fichier en paramétre.
  11. je ne ne connais pas ce lisp, qui apparement a été developper par toi. A priori, il ne correspond pas tout à fiat à mon besoin, acr il chnarne une chaine d'attibuts d'un bloc. Ce que je Voudrais, c'est un lisp qui insére une série du même bloc numéroter auomatiquement. Dans mon cas, il s'agit de numérotation de filerie que j'exporte par la suite à l'aide de eattext, ceci dans le but de simplifier la vie des monteurs d'armoire, qui n'auront plus qu'à les insérer sur leurs ficelles)
  12. Bonjour à tous et merci par avance pour votre aide. Voici mon probléme : j'ai récupérer ce programme, sur le site de CADXP, qui permet d'incrémenter automatiquement l'attribut d'un bloc mais uniquement Numérique. J'aimerais perfectionné se programme pour lui intégrer un préfixe, un suffixe et aussi avoir la possibilité d'incrémenter un texte. ; Fonction Nombre Incrémentable dans un Bloc ; FIL -> Nom du bloc ; REP -> Attribut du bloc à incrémenter (defun c:INCBLOC () (setq REP 0) (setq REP (getint "\nNuméro de depart\n\t")) (setq inc (getint "\nValeur de l'incrémentation\n")) (princ (strcat "POINT NUMERO " (itoa REP) " A FAIRE ...(Echap pour arrêter)")) (setq pins (getpoint "\nPOINT D'INSERTION\n")) (command "_INSERT" "FIL" pins "" "" "" (itoa REP)) (while (setq REP (+ REP inc)) (princ (strcat "POINT NUMERO " (itoa REP)" A FAIRE ...(Echap pour arrêter)")) (setq pins (getpoint "\nPOINT D'INSERTION\n")) (command "_INSERT" "FIL" pins "" "" "" (itoa REP)) ) ) Voici le code qui me sert de base qui permet le fonction souhaité mais qui ne marche pas sur un bloc. ; Fonction Texte ou Nombre Incrémentable (defun c:INC (/ AncErr IniCmd Suf Pref Increm Depart r Txt Pt Alpha) ; *** Initialisation des variables *** (setq AncErr *error* *error* INC_ERR IniCmd (getvar "CMDECHO") Depart 1 Increm 1 Pref "" Suf "" ) (setvar "CMDECHO" 0) (initget 0 "Texte Initialiser") (if (= (getkword "/Initialiser :") "Initialiser") (progn (if (setq r (getreal (strcat "Hauteur du texte <" (rtos (getvar "TEXTSIZE")) "> : "))) (setvar "TEXTSIZE" r) ) (if (setq r (getint "Entrez la valeur de l'incrémentation <1> : ")) (setq Increm r) ) (initget 0 "Alphabétique Numérique") (if (= "Alphabétique" (getkword "/Alphabétique :")) (progn (setq Alpha T) (if (/= (setq r (getstring T "Entrez la valeur de Départ :")) "") (setq Depart (ascii r)) (setq Depart 65) ) ) (if (setq r (getint "Entrez la valeur de Depart <1> :")) (setq Depart r) (setq Depart 1) ) ) (setq Pref (getstring T "Préfixe <> : ")) (setq Suf (getstring T "Suffixe <> : ")) ) ) (setq Depart (- Depart Increm)) (while (setq Pt (getpoint "\nPoint d'insertion du texte : ")) (command "_.TEXT" "_J" "_MC" Pt "" "" (if Alpha (strcat Pref (chr (setq Depart (+ Increm Depart))) Suf) (strcat Pref (itoa (setq Depart (+ Increm Depart))) Suf) ) ) ) (setvar "CMDECHO" IniCmd) (setq *error* AncErr) (princ) )
  13. Merci pour ton aide, j'ai réussi à corriger mon code dont voici l'exmplaire qui marche trés bien. Une autre petite question j'ai bidouillé une menu + un code lisp pour gérere directement le grille (X1, X2, X5, X10) mais je suis obligé de gérer une fonction lisp par grille, il ne serait pas plus simple de gérer un seul et même code avec une variable que l'on mettrait à 1, 2, 5, 10 à l'aide des boutoons de la barre de menu? ;***** Fonction Création d'une grille d'aide ***** ;chargement de la boite de dialogue (defun c:ac-grille (/ dcl_id snapmode snapunit gridmode gridunit espx espy espax espay unitaccr unitgrid) (setq dcl_id (load_dialog "ERAS-EL.dcl")) ;Création de la boite de dialogue (new_dialog "grille" dcl_id) ;Extraction des valeurs existantes des variables snapmode et snapunit et écriture dans la boite de dialogue (setq snapmode (getvar "snapmode")) (if (= 1 snapmode) (set_tile "accractif" "1") (set_tile "accractif" "0") ) ; (setq unitaccr (getvar "snapunit")) (setq espx (car unitaccr)) (setq espy (cadr unitaccr)) (set_tile "espx" (rtos espx)) (set_tile "espy" (rtos espy)) ; ;Extraction des valeurs existantes des variables gridmode et gridunit et écriture dans la boite de dialogue (setq gridmode (getvar "gridmode")) (if (= 1 gridmode) (set_tile "griactif" "1") (set_tile "griactif" "0") ) ; (setq unitgri (getvar "gridunit")) (setq espax (car unitgri)) (setq espay (cadr unitgri)) (set_tile "espax" (rtos espax)) (set_tile "espay" (rtos espay)) ; ;Lecture des valeurs entrées dans la boite de dialogue et changement du contenu des variables correspondantes (defun defvar () (setq espx (atof (get_tile "espx"))) (setq espy (atof (get_tile "espy"))) (setvar "snapunit" (list espx espy)) (if (= "1" (get_tile "accractif")) (setvar "snapmode" 1) (setvar "snapmode" 0)) (setq espax (atof (get_tile "espax"))) (setq espay (atof (get_tile "espay"))) (setvar "gridunit" (list espax espay)) (if (= "1" (get_tile "griactif")) (setvar "gridmode" 1) (setvar "gridmode" 0)) ) (action_tile "accept" "(defvar) (done_dialog 1)") ;Affichage de la boite (start_dialog) ;Mise à jour des variables suivant Type d'accrochage et de grille (princ) )
  14. Merci pour votre aide. j'ai modifier mon progamme en tenat compte de vos remarques mais u probléme persiste : - La partie lecture des variables et ecriture dans la boite de dialogue fonctionne parfaitement - La partie ecriture des nouvelles variables saisie dans la boite de dialogue ne fonctionne pas (Pas de changement de Mode ou de résolution) Voici le programme revue et corrigé ;***** Fonction Création d'une grille d'aide ***** ;chargement de la boite de dialogue (defun c:ac-grille (/ dcl_id snapmode snapunit gridmode gridunit espx espy espax espay unitaccr unitgrid) (setq dcl_id (load_dialog "ERAS-EL.dcl")) (new_dialog "grille" dcl_id) ;Extraction des valeurs existantes des variables snapmode et snapunit et écriture dans la boite de dialogue (setq snapmode (getvar "snapmode")) (if (= 1 snapmode) (set_tile "accractif" "1") (set_tile "accractif" "0") ) ; (setq unitaccr (getvar "snapunit")) (setq espx (car unitaccr)) (setq espy (cadr unitaccr)) (set_tile "espx" (rtos espx)) (set_tile "espy" (rtos espy)) ; ;Extraction des valeurs existantes des variables gridmode et gridunit et écriture dans la boite de dialogue (setq gridmode (getvar "gridmode")) (if (= 1 gridmode) (set_tile "griactif" "1") (set_tile "griactif" "0") ) ; (setq unitgri (getvar "gridunit")) (setq espax (car unitgri)) (setq espay (cadr unitgri)) (set_tile "espax" (rtos espax)) (set_tile "espay" (rtos espay)) ; ;Lecture des valeurs entrées dans la boite de dialogue et changementdu contenu des variables correspondantes (setq espx (atof (get_tile "espx"))) (setq espy (atof (get_tile "espy"))) (setvar "snapunit" (list espx espy)) (if (= "1" (get_tile "accractif")) (setvar "snapmode" 1)) (setq espax (atof (get_tile "espax"))) (setq espay (atof (get_tile "espay"))) (setvar "gridunit" (list espax espay)) (if (= "1" (get_tile "griactif")) (setvar "gridmode" 1)) (action_tile "accept" "(done_dialog 1)") (start_dialog) (princ) )
  15. je viens de mettre au point un programme, avec l'interface DCL, me permettant de gére les mode d'accrochage sur la grille (idem à l'interface AutoCAD, dans le but de simplifier par la suite en ajoutant des boutons pour une modification plus rapîde ( 'x1' , 'x2' , etc). Mais il existe un bug dans mon programme que je n'arrive pas à résoudre. Merci d'avance poiur votre aide. ;;---------------------------------------------------------------------------------------------------------------------------------------------------------------------- ;***** Fonction Création d'une grille d'aide ***** ;chargement de la boite de dialogue (defun c:ac-grille (/ dcl_id snapmode snapunit gridmode gridunit espx espy espax espay unitaccr unitgrid) (setq id (load_dialog "ERAS-EL.dcl")) (new_dialog "grille" dcl_id) ;Extraction des valeurs existantes des variables snapmode et snapunit et écriture dans la boite de dialogue (setq snapmode (getvar "snapmode")) (if (=1 snapmode) (set_tile "accractif" "1") (set_tile "accractif" "0") ) ; (setq unitaccr (getvar "snapunit")) (setq espx (car unitaccr)) (setq espy (cadr unitaccr)) (set_tile "espx" (rtos espx)) (set_tile "espy" (rtos espy)) ; ;Extraction des valeurs existantes des variables gridmode et gridunit et écriture dans la boite de dialogue (setq gridmode (getvar "gridmode")) (if (=1 gridmode) (set_tile "griactif" "1") (set_tile "griactif" "0") ) ; (setq unitgri (getvar "gridunit")) (setq espax (car unitgri)) (setq espay (cadr unitgri)) (set_tile "espax" (rtos espax)) (set_tile "espay" (rtos espay)) ; ;Lecture des valeurs entrées dans la boite de dialogue et changementdu contenu des variables correspondantes (defun defvar () (setq espx (atof (get_tile "espx"))) (setq espy (atof (get_tile "espy"))) (setvar "snapunit" (list espx espy)) (if (= "1" (get_tile "accractif")) (setvar "snapmode" 1)) (setvar "snapmode" 0)) (setq espax (atof (get_tile "espax")) (setq espay (atof (get_tile "espay")) (setvar "gridunit" (list espax espay)) (if (= "1" (get_tile "griactif")) (progn (setvar "gridmode" 0) (setvar "gridmode" 1)) (setvar "gridmode" 0) ) (action_tile "accept" "(done_dialog 1)") (start_dialog) (princ) ) // Grille de points et accrochage à la Grille grille : dialog { label = "Création d'une grille d'aide"; : row { : boxed_column { label = "Accrochage"; fixed_width = true; width = 22; : toggle { label = "Actif"; mnemonic = "A"; key = "accractif";} : edit_box { label = "Espacement en X"; mnemonic = "E"; key = "espx"; edit_width = 10;} : edit_box { label = "Espacement en Y"; mnemonic = "s"; key = "espy"; edit_width = 10;} } : boxed_column { label = "Grille"; fixed_width = true; width = 22; : toggle { label = "Actif"; mnemonic = "c"; key = "griactif";} : edit_box { label = "Espacement en X"; mnemonic = "p"; key = "espax"; edit_width = 10;} : edit_box { label = "Espacement en Y"; mnemonic = "a"; key = "espay"; edit_width = 10;} } } ok_cancel; }
  16. Bonjour à tous, Je viens de trouver cette routine sur le net mais je n'arrive pas à l'adapter à mes besoins et selon mes applications déja existante (je travaille avec différents Lisp qui me permettent de passer d'un calque à un autre - Un calque = un folio). Le probléme est que la routine détruit bien ma nomenclature puis il géle ou libére le calque voulue puis elle plante. -> erreur: type d'argument incorrect: lselsetp nil Please, j'au besoin d'aide. ;; ------------------------------------------------------------------------------------------------------------------------ ;; Fonction pour Création de la nomenclature (defun c:NMC_FOL (/) (if (not V_NMC_FOL) (progn (prompt (strcat "\n - Nomenclature automatique -\n" ) ) (setq V_NMC_FOL "") ) ) ;; Destruction de l'ancienne nomenclature ;; initialisation des paramètres utiles au traitement (af "001") (setq FOL_DEP (getvar "clayer") FOL_NMC (getvar "clayer") V_ATTDIA (getvar "attdia") V_CMDECHO (getvar "cmdecho") i1 0 SEL (ssadd) ) (setvar "regenmode" 0) (setvar "attdia" 0) (setvar "attreq" 1) (setvar "cmdecho" 0) (setq FLC (atoi (getvar "clayer"))) ;; destruction de l'ancienne nomenclature (setq LST (list (cons -4 "and>"))) (setq LST (cons (cons 0 "insert") LST)) (setq LST (cons (cons -4 "or>") LST)) (setq LST (cons (cons 2 "REC_FOL") LST)) (setq LST (cons (cons 2 "GR_FOL") LST)) (setq LST (cons (cons -4 " (setq LST (cons (cons -4 " (setq SEL (ssget "X" LST)) (if SEL (progn (repeat (sslength SEL) (entdel (ssname SEL i1)) (setq i1 (1+ i1)) ) ) ) ;; Remplissage automatique de la nomenclature des folios ;; sélection dans la base de donnée de tous les blocs "CARTO" (setq SEL (ssget "X" (list (cons 0 "insert") (cons 2 "CARTO") ;; (cons 2 "FDP01") ) ) ) ;; sélection dans la base de donnée de tous les blocs "IND_FOL" (setq JS2 (ssget "X" (list (cons 0 "insert") (cons 2 "IND_FOL") ) ) ) ;; transfert de "JS2" dans "SEL" (setq I1 (sslength js2)) (while (/= 0 I1) (setq I1 (- I1 1)) (ssadd (ssname JS2 I1) SEL) ) ;; balayage du tableau "layer" (tblnext "layer" T) (while (setq NFOL (cdadr (tblnext "layer"))) (progn ;; initialisation par défaut du commentaire à insérer dans la nomencl. (setq REPF " " STLF " " IND " " ) ;; recherche du cartouche par balayage du jeu de sélection (setq LONG (sslength SEL)) (while (/= 0 LONG) (progn (setq NBLOC (ssname SEL (- LONG 1)) NPLAN (cdr (assoc 8 (entget NBLOC))) X1 "" ) ;; si cartouche existant alors mémorisation des divers ;; renseignement (if (EQUAL NFOL NPLAN) (progn (setq NATTR (entnext NBLOC)) (while (/= "SEQEND" (cdr (assoc 0 (setq LATTR (entget NATTR))))) (progn (if (= (strcat "REP_FONC") (cdr (assoc 2 LATTR))) (setq REPF (cdr (assoc 1 LATTR))) ) (if (= "" REPF) (setq REPF " ") ) (if (= (strcat "STYLE_FOL") (cdr (assoc 2 LATTR))) (setq STLF (cdr (assoc 1 LATTR))) ) (if (= (strcat "IND") (cdr (assoc 2 LATTR))) (progn (setq X1 (cdr (assoc 1 LATTR))) (if (> X1 IND) (setq IND X1)) ) ) (if (= "" IND) (setq IND "") ) (ssdel NBLOC SEL) ) (setq NATTR (entnext NATTR)) ) ) ) ) (setq LONG (- LONG 1)) ) ;; procédure de calcul des coordonnées de la position d'insertion du bloc (setq OPI1 (distof NFOL)) (if OPI1 (progn (setq OPI2 (* (- (/ OPI1 52) (setq OPI3 (float (fix (/ OPI1 52)))) ) 52 ) ) (setq OPI4 (* (- (/ OPI3 2) (float (fix (/ OPI3 2))) ) 2 ) ) (if (= 1 OPI4) (setq X 200) (setq X 15)) (setq Y (- 260 (* 5 OPI2))) (setq COORD (list X Y)) ;; calcul du folio d'insertion (if (> (+ (atoi NFOL) 1) (* 104 (+ (- FLC (atoi FOL_DEP)) 1)) ) (progn (setq FOL_NMC (itoa (+ (atoi FOL_DEP) (/ (atoi NFOL) 104)))) (if (/= (itoa FLC) FOL_NMC) (progn (setq FLC (atoi FOL_NMC)) (command "_insert" "W:\\TECHNIQUE\\AUTOCAD\\Symboles DAO 2003\\Aide\\GR_FOL" (list 0 0) "" "" "" ) ;; récupération du bloc gr_fol inséré (setq N_ENT8 (entlast) L_ATT8 (entget N_ENT8) ) (setq L_ATT8 (subst (cons 8 FOL_NMC) (assoc 8 L_ATT8) L_ATT8 ) ) (entmod L_ATT8) (entupd N_ENT8) ) ) ) ) (if (= nfol "1") (command "_insert" "W:\\TECHNIQUE\\AUTOCAD\\Symboles DAO 2003\\Aide\\GR_FOL" (list 0 0) "" "" "" "_insert" "W:\\TECHNIQUE\\AUTOCAD\\Symboles DAO 2003\\Aide\\REC_FOL" (list 15 260) "" "" "" "0" ind "PDG" "PAGE DE GARDE" " " ) ) (command "_insert" "W:\\TECHNIQUE\\AUTOCAD\\Symboles DAO 2003\\Aide\\REC_FOL" COORD "" "" "" nfol ind repf stlf " ") ;; récupération du bloc gr_fol inséré (setq N_ENT8 (entlast)) (setq L_ATT8 (entget N_ENT8)) (setq L_ATT8 (subst (cons 8 FOL_NMC) (assoc 8 L_ATT8) L_ATT8 ) ) (entmod L_ATT8) (entupd N_ENT8) ) ) ) ) (setvar "attdia" V_ATTDIA) (setvar "cmdecho" V_CMDECHO) (setvar "regenmode" 1) (prin1) ) ;; ------------------------------------------------------------------------------------------------------------------------ ;; Fonction pour Destruction de l'ancienne nomenclature (defun AF (FOLIO / FLC OPT) (setq FLC (getvar "clayer")) (if (/= NIL FOLIO) (SETQ FOLIO (STRCASE FOLIO)) ) (setq OPT "_thaw") (if (/= FLC FOLIO) (progn (if (= FOLIO "000") (setq OPT "_F")) (command "_-layer" "_thaw" FOLIO "_set" FOLIO "_F" FLC OPT "000" "_thaw" "0" "" ) ) ) (princ) )
  17. merci beaucoup zebulon et Patrick_35 , ca marche d'enfer
  18. j'ai suivit vos indications mais je n'arrive pas a avoir le choix entre mes 2 possibilité et en plus autocad m'affiche l'erreur suivante "structure incorrecte de la liste en entrée" Voici mon programme corrigé export : dialog { label = "Exportation Excel"; : boxed_radio_row { label = "Exportation : "; key = "export"; : radio_button { label = "Numeros de Filerie"; key = "Filerie"; value = "1";} : radio_button { label = "Numeros de Câble"; key = "Cable";} } ok_cancel_err; : button { key = "about"; label = "A propos...";} } (defun c:excel ( / OldCmd dcl_id ) (setq OldCmd (getvar "CMDECHO") dcl_id (load_dialog "ERAS-EL.dcl") ) (setvar "CMDECHO" 0) ; Création de la boite (new_dialog "export" dcl_id) ; Fonction d'appel en retour (action_tile "about" "(about)") (action_tile "cancel" "(done_dialog 0)") (action_tile "accept" "(do_accept)") ; Affichage de la boite (setq What_next (start_dialog)) (if (= What_next 2) (progn ; Création du fichier xls avec nom et chemin d'accés (setq nom (getfiled "Nom du fichier excel à créer" "T:\\" "xls" 1)) ;(set_tile "montexte" nom) ; Exportation des attributs (if (= EXPORT 1) (command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\Aide\\FIL.blk" "Xls" nom)) (if (= EXPORT 2) (command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\Aide\\CAB.blk" "Xls" nom)) ) (setvar "CMDECHO" OldCmd) ) ; Déchargement de la boite (unload_dialog dcl_id) ; Fonction pour Récupération des informations de la boite DCL (defun do_accept () (setq EXPORT (get_tile "export")) (done_dialog 2) )
  19. Merci zébulon pour ton aide zebulon_ ainsi que pour ta remarque Patrick_35, j'en ai pris note et modifier mon code. J'ai a nouveau besoin d'un renseignement. Tou d'abord voici mon code : Lisp (defun c:excel ( / dcl_id NFilerie NCable ) (setq OldCmd (getvar "CMDECHO") dcl_id (load_dialog "ERAS-EL.dcl") ) (setvar "CMDECHO" 0) ; Création de la boite (new_dialog "export" dcl_id) ; Fonction d'appel en retour (action_tile "about" "(about)") ; (action_tile "filerie" "(fil 1)") (action_tile "Filerie" "(setq fil 1)" ) ; Affichage de la boite (setq Code_retour (start_dialog)) ; Déchargement de la boite (unload_dialog dcl_id) ; Impression du ou des folios demandés (if (= Code_retour 1) ; Création du fichier xls avec nom et chemin d'accés (if (setq nom (getfiled "Nom du fichier excel à créer" "T:\\" "xls" 1)) (progn ; Exportation des attributs (if (= fil 1) (command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\Aide\\FIL.blk" "Xls" nom)) (if (= (get_tile "Cabble") "1") (command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\Aide\\CAB.blk" "Xls" nom)) ) ) ) ) DCL export : dialog { label = "Exportation Excel"; : radio_button { label = "Numeros de Filerie"; key = "Filerie"; value = "1";} : radio_button { label = "Numeros de Câble"; key = "Cable";} ok_cancel_err; : button { key = "about"; label = "A propos...";} } Le probléme c'est que je n'arrive pas à faire le lien entre les boutons de ma boîte et le code Lisp afin de savoir quel type d'attributs je doit extraire du fichier DAO. Merci d'avance.
  20. Bonjour à tous, Je suis actuellement en train de développer un lisp me permettant d'extraire des attributs d'un ou plusieurs bloc d'un schémas électrique dans un fichier excel. Mon probléme est d'automatiser mon code avec une boite de dialoque DCL. Dans cette boitte il sera possible de déterminer le nom du fichier et le chemin du répertoire de destination ou à défaut prendre le nom et le chemin d'accés du fichier DWG pour l'enregistrement du fichier excel et de choisir le type d'attributs à extraire N° de FiIerie et/ou N° de câble. Ci-dessous mon code Lsp et DCL. Merci d'avance pour votre aide. (defun c:excel ( / OldCmd dcl_id Fichier ) (setq OldCmd (getvar "CMDECHO") dcl_id (load_dialog "ERAS-EL.dcl") ) (setvar "CMDECHO" 0) ; Création de la boite (new_dialog "export" dcl_id) ; Affichage de la boite (start_dialog) ; Déchargement de la boite (unload_dialog dcl_id) ; Concatenation Adresse Réseau et Nom du Fichier (setq str "fichier") (setq nom (strcat "T:\\" str)) ; Exportation des attributs (command "-eattext" "dwgCourant" "Non" "Non" "w:\\technique\\autocad\\Symboles DAO 2003\\FIL.blk" "Xls" nom)[/surligneur][/surligneur] ; Ouverture du fichier Excel (vl-load-com) (if (equal nil msEm-open) (vlax-import-type-library :tlb-filename "c:/program files/Microsoft Office/Office/Excel9.olb" :methods-prefix "msEm-" :properties-prefix "msEp-" :constants-prefix "msEc-" ) ) (setq msE (vlax-get-object "Excel.Application.9")) (setq ExclWorkbs (vlax-get-property msE 'Workbooks)) (setq NWorkb (msEm-open ExclWorkbs "T:\\FIL1")) (vla-put-visible msE 1) ) export : dialog { label = "Exportation Excel"; : edit_box { // Créer un champ de saisie label = "Nom du fichier :"; key = "fichier"; edit_width = 10; } : column { : row { fixed_width = true; ok_button; : spacer { width = 0; } cancel_button; : spacer { width = 0; } } } }
×
×
  • 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é