Nono64 Posté(e) le 6 novembre 2007 Posté(e) le 6 novembre 2007 Bonjour à tous, ma question ressemble à d'autres déjà posées et je m'en excuse, malheureusement je n'ai toujours pas trouvé la solution. Je voudrais en fait être capable de transferer une valeur (longueur, surface, ou autre) de Autocad vers Excel avec la contrainte suivante : le fichier excel est un fichier déjà existant, et je veux pouvoir enregistrer la valeur (et uniquement cette valeur) dans la case que je veux (B4, W32, ...). Quelqu'un pourrait-il m'aider à ce sujet ?Merci beaucoup d'avance. Nono64 PS : j'ai deja essayé les commandes EXTATTBE ou LONG_LINE mais elles ne correspondent pas à ma recherche, puisque déjà il n'est pas possible de choisir l'emplacement (la case dans le fichier Excel) de l'enregistrement.
(gile) Posté(e) le 6 novembre 2007 Posté(e) le 6 novembre 2007 Salut et bienvenue, Il me semble Bred et/ou Patrick_35 ont fait quelque chose à ce sujet -tu peux faire une recherche. Tu peux utiliser les routines contenues dans GetExcel de Terry Miller (ici) auquel j'ai très (très) modestement participé. (j'attends une réponse pour publier ici une version traduite en français). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 6 novembre 2007 Posté(e) le 6 novembre 2007 Bonsoir à toutes et tous, Heu, c'est quoi cette commande "LONG_LINE " ???.Sinon, cette requête est ma fois trés intéressante,.... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 6 novembre 2007 Posté(e) le 6 novembre 2007 Long_line (sur cette page) est un LISP que j'avais fait il y a quelque temps qui retourne la longueur totales des lignes et polylignes d'un calque et permet l'enregistrement dans un fichier Excel. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 6 novembre 2007 Posté(e) le 6 novembre 2007 Re, Oui, je me souviens maintenant avoir testé cette routine. J'ai eu peur, je croyais que c'était encore une de ces satanée commande clavier (par défaut d'AutoCAD S.V.P !) super utile que je ne connaissais pas,,, ouf !! @+, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
nazemrap Posté(e) le 6 novembre 2007 Posté(e) le 6 novembre 2007 Bonsoir, j'ai un vba qui enregistre dans la cellule B2 (par ex) du classeur "Classeur1.xls" sur C: la valeur de la surface d'une polyligne choisie à l 'écran. Dim returnObj As AcadObject Dim basePnt As Variant Dim poly As AcadLWPolyline Dim MyXL As Object Dim feuille As Worksheet Dim cellule As Range Public Sub aire_poly() ' récupère la surface d' une polyligne présente à l 'écran ThisDrawing.Utility.GetEntity returnObj, basePnt, "Selectionnez la polyligne" If returnObj.ObjectName = "AcDbPolyline" Then Set poly = returnObj valeur = poly.Area ' Définit la variable objet faisant référence au fichier à ouvrir. Set MyXL = GetObject("c:\Classeur1.XLS") MyXL.Application.Visible = True MyXL.Parent.Windows(1).Visible = True Set feuille = MyXL.Worksheets("Feuil1") 'enregistre dans la cellule B2 feuille.Cells(2, 2).Value = valeur End If 'Quitte excel qui demandera un enregistrement éventuel MyXL.Application.Quit End Sub
lili2006 Posté(e) le 6 novembre 2007 Posté(e) le 6 novembre 2007 Re, Pas mal non plus,... Merci pour ce partage nazemrap. @+, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 6 novembre 2007 Posté(e) le 6 novembre 2007 J'ai eu le feu vert de Terry pour publier ses routines avec mes traductions : EDIT : petites modifications dans les traductions de commentaires EDIT2 : Ajout de 3 petites routine pour la validité et l'incrémentation des références de cellule EDIT3 : réparé un bug avec les routines Row+n et Column+n EDIT4 : Ajout de la possibilité de donner un nom de cellule comme argument à PutCell ;;------------------------------------------------------------------------------- ;; Program Name: GetExcel.lsp ;; Created By: Terry Miller (courriel: terrycadd@yahoo.com) ;; (URL: http://web2.airmail.net/terrycad) ;; Date Created: 9-20-03 ;; Function: Several functions to get and put values into Excel cells. ;;------------------------------------------------------------------------------- ; Revision History ; Rev By Date Description ;------------------------------------------------------------------------------- ; 1 TM 9-20-03 Initial version ; 2 TM 8-20-07 Rewrote GetExcel.lsp and added several new sub-functions ; including ColumnRow, Alpha2Number and Number2Alpha written ; by Gilles Chanteau from Marseille, France. ; 3 TM 12-1-07 Added several sub-functions written by Gilles Chanteau ; including Cell-p, Row+n, and Column+n. Also added his ; revision of the PutCell function. ; 4 GC 9-20-08 Revised the GetExcel argument MaxRange$ to accept a nil ; and get the current region from cell A1. ;; ;;------------------------------------------------------------------------------- ;; Aperçu des principales fonctions* ;;------------------------------------------------------------------------------- ;; ;; GetExcel - Stocke les données d'un classeur Excel dans la liste *ExcelData@ ;; Syntaxe: (GetExcel ExcelFile$ SheetName$ MaxRange$) ;; Exemple: (GetExcel "C:\\Dossier\\Fichier.xls" "Feuil1" "L30") ;; ;; GetCell - Retourne la valeur d'une cellule depuis la liste *ExcelData@ ;; Syntaxe: (GetCell Cell$) ;; Exemple: (GetCell "H15") ;; ;; Exemple d'utilisation des fonctions: ;; (defun c:Get-Example () ;; (GetExcel "C:\\Folder\\Filename.xls" "Feuil1" "L30");<-- Editer Filename.xls ;; (GetCell "H21");Ou juste utiliser la liste dans la variable globale *ExcelData@ ;; );defun ;; ;;------------------------------------------------------------------------------- ;; ;; OpenExcel - Ouvre un classeur Excel ;; Syntax: (OpenExcel ExcelFile$ SheetName$ Visible) ;; Example: (OpenExcel "C:\\Dossier\\Fichier.xls" "Feuil1" nil) ;; ;; PutCell - Met des données dans des cellules Excel ;; Syntaxe: (PutCell StartCell$ Data$) or (PutCell StartCell$ DataList@) ;; Exemple: (PutCell "A1" (list "GP093" 58.5 17 "Base" "3'-6 1/4\"")) ;; ;; CloseExcel - Ferme la session Excel ;; Syntaxe: (CloseExcel ExcelFile$) ;; Exemple: (CloseExcel "C:\\Dossier\\Fichier.xls") ;; ;; Exemple d'utilisation des fonctions: ;; (defun c:Put-Example () ;; (OpenExcel "C:\\Folder\\Filename.xls" "Feuil1" nil);<-- Editer Filename.xls ;; (PutCell "A1" (list "GP093" 58.5 17 "Base" "3'-6 1/4\"")); Répéter à volonté ;; (CloseExcel "C:\\Folder\\Filename.xls");<-- Editer Filename.xls ;; (princ) ;; );defun ;; ;; Note: Point sur les conditions de chaque argument dans les entêtes des fonctions ;; ;; *Traduction en français : Gilles Chanteau ;; ;; Modifications : ;; Ajout des routines Column+n Row+n et Cell-p ;; Ajout de la possibilité de donner un nom de cellule dans PutCell ;; ;;------------------------------------------------------------------------------- ;; 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 (ou nil pour toute la region depuis la cellule A1) ;; 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 ;;------------------------------------------------------------------------------- (defun GetExcel (ExcelFile$ SheetName$ MaxRange$ / Column# ColumnRow@ Data@ ExcelRange^ ExcelValue ExcelValue ExcelVariant^ MaxColumn# MaxRow# Range$ Row# Worksheet ) (if (= (type ExcelFile$) 'STR) (if (not (findfile ExcelFile$)) (progn (alert (strcat "Fichier Excel " ExcelFile$ " non trouvé.")) (exit) ) ) (progn (alert "Fichier Excel non specifié.") (exit) ) ) (gc) (if (setq *ExcelApp% (vlax-get-object "Excel.Application")) (progn (alert "Fermeture de toutes les feuilles Excel.") (vlax-release-object *ExcelApp%) (gc) ) ) (setq *ExcelApp% (vlax-get-or-create-object "Excel.Application")) (vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Open ExcelFile$ ) (if SheetName$ (vlax-for Worksheet (vlax-get-property *ExcelApp% "Sheets") (if (= (vlax-get-property Worksheet "Name") SheetName$) (vlax-invoke-method Worksheet "Activate") ) ) ) (if MaxRange$ (setq ColumnRow@ (ColumnRow MaxRange$) MaxColumn# (nth 0 ColumnRow@) MaxRow# (nth 1 ColumnRow@) ) (setq CurRegion (vlax-get-property (vlax-get-property (vlax-get-property *ExcelApp% "ActiveSheet") "Range" "A1" ) "CurrentRegion" ) MaxRow# (vlax-get-property (vlax-get-property CurRegion "Rows") "Count" ) MaxColumn# (vlax-get-property (vlax-get-property CurRegion "Columns") "Count" ) ) ) (setq *ExcelData@ nil Row# 1 ) (repeat MaxRow# (setq Data@ nil Column# 1 ) (repeat MaxColumn# (setq Range$ (strcat (Number2Alpha Column#) (itoa Row#)) ExcelRange^ (vlax-get-property *ExcelApp% "Range" Range$) ExcelVariant^ (vlax-get-property ExcelRange^ 'Value) ExcelValue (vlax-variant-value ExcelVariant^) ExcelValue (cond ((= (type ExcelValue) 'INT) (itoa ExcelValue)) ((= (type ExcelValue) 'REAL) (rtosr ExcelValue)) ((= (type ExcelValue) 'STR) (vl-string-trim " " ExcelValue) ) ((/= (type ExcelValue) 'STR) "") ) Data@ (append Data@ (list ExcelValue)) Column# (1+ Column#) ) (or (member (type ExcelValue) '(INT REAL STR)) (setq ExcelValue "") ) ) (setq *ExcelData@ (append *ExcelData@ (list Data@)) Row# (1+ Row#) ) ) (vlax-invoke-method (vlax-get-property *ExcelApp% "ActiveWorkbook") 'Close :vlax-False ) (vlax-invoke-method *ExcelApp% 'Quit) (vlax-release-object *ExcelApp%) (gc) (setq *ExcelApp% nil) *ExcelData@ ) ;;------------------------------------------------------------------------------- ;; GetCell - Retourne la valeur d'une cellule depuis la liste *ExcelData@ ;; Argument : 1 ;; Cell$ = Référence de la cellule ;; Exemple de syntaxe : (GetCell "E19") = valeur de la cellule E19 ;;------------------------------------------------------------------------------- (defun GetCell (Cell$ / Column# ColumnRow@ Return Row#) (setq ColumnRow@ (ColumnRow Cell$) Column# (1- (car ColumnRow@)) Row# (1- (cadr ColumnRow@)) Return "" ) (if *ExcelData@ (if (and (>= (length *ExcelData@) Row#) (>= (length (nth 0 *ExcelData@)) Column#) ) (setq Return (nth Column# (nth Row# *ExcelData@))) ) ) Return ) ;;------------------------------------------------------------------------------- ;; OpenExcel - Ouvre une feuille Excel ;; Arguments : 3 ;; ExcelFile$ = Nom de fichier excel ou nil pour une nouvelle feuille ;; SheetName$ = Nom de la feuille ou nil pour non spécifié ;; Visible = T pour visible ou nil pour cachée ;; Exemples de syntaxe : ;; (OpenExcel "C:\\Temp\\Temp.xls" "Feuil2" t) = Ouvre C:\Temp\Temp.xls sur la Feuille2 en session visible ;; (OpenExcel "C:\\Temp\\Temp.xls" nil nil) = Ouvre C:\Temp\Temp.xls sur la feuille courante ;; (OpenExcel nil "Parts List" nil) = Ouvre un nouveau classeur et crée une feuille "Parts List" en session cachée ;;------------------------------------------------------------------------------- (defun OpenExcel (ExcelFile$ SheetName$ Visible / Sheet$ Sheets@ Worksheet) (if (= (type ExcelFile$) 'STR) (if (findfile ExcelFile$) (setq *ExcelFile$ ExcelFile$) (progn (alert (strcat "FichierExcel " ExcelFile$ " non trouvé.")) (exit) ) ) (setq *ExcelFile$ "") ) (gc) (if (setq *ExcelApp% (vlax-get-object "Excel.Application")) (progn (alert "Fermeture de toutes les feuilles.") (vlax-release-object *ExcelApp%) (gc) ) ) (setq *ExcelApp% (vlax-get-or-create-object "Excel.Application")) (if ExcelFile$ (if (findfile ExcelFile$) (vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Open ExcelFile$ ) (vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Add ) ) (vlax-invoke-method (vlax-get-property *ExcelApp% 'WorkBooks) 'Add ) ) (if Visible (vla-put-visible *ExcelApp% :vlax-true) ) (if (= (type SheetName$) 'STR) (progn (vlax-for Sheet$ (vlax-get-property *ExcelApp% "Sheets") (setq Sheets@ (append Sheets@ (list (vlax-get-property Sheet$ "Name")))) ) (if (member SheetName$ Sheets@) (vlax-for Worksheet (vlax-get-property *ExcelApp% "Sheets") (if (= (vlax-get-property Worksheet "Name") SheetName$) (vlax-invoke-method Worksheet "Activate") ) ) (vlax-put-property (vlax-invoke-method (vlax-get-property *ExcelApp% "Sheets") "Add" ) "Name" SheetName$ ) ) ) ) (princ) ) ;;------------------------------------------------------------------------------- ;; PutCell - Met des données dans des cellules Excel ;; Arguments: 2 ;; StartCell$ = Référence de la cellule de départ ou nom de la cellule ;; Data@ = Donnée ou liste de données ;; Exemples de syntaxe : ;; (PutCell "A1" "PART NUMBER") = Met PART NUMBER dans la cellule A1 ;; (PutCell "B3" '("Dim" 7.5 "9.75")) = À partir de la cellule B3 met Dim, 7.5 et 9.75 ;; (PutCell "Surface" '(35.4)) = Met 35.4 dans la cellule nommée Surface ;;------------------------------------------------------------------------------- (defun PutCell (StartCell$ Data@ / Cell Column# ExcelRange Row#) (if (= (type Data@) 'STR) (setq Data@ (list Data@)) ) (setq ExcelRange (vlax-get-property *ExcelApp% "Cells")) (if (Cell-p StartCell$) (setq Column# (car (ColumnRow StartCell$)) Row# (cadr (ColumnRow StartCell$)) ) (if (vl-catch-all-error-p (setq Cell (vl-catch-all-apply 'vlax-get-property (list (vlax-get-property *ExcelApp% "ActiveSheet") "Range" StartCell$ ) ) ) ) (alert (strcat "Cellule \"" StartCell$ "\" introuvable.")) (setq Column# (vlax-get-property Cell "Column") Row# (vlax-get-property Cell "Row") ) ) ) (if (and Column# Row#) (foreach Item Data@ (vlax-put-property ExcelRange "Item" Row# Column# (vl-princ-to-string Item) ) (setq Column# (1+ Column#)) ) ) (princ) ) ;;------------------------------------------------------------------------------- ;; CloseExcel - Ferme le classeur Excel ;; Arguments: 1 ;; ExcelFile$ = Nom d'enregistrement du fichier Excel ou nil pour fermer sans enregistrer ;; Exemples de syntaxe : ;; (CloseExcel "C:\\Temp\\Temp.xls") = Enregistre C:\Temp\Temp.xls et ferme ;; (CloseExcel nil) = Ferme sans enregistrer ;;------------------------------------------------------------------------------- (defun CloseExcel (ExcelFile$ / Saveas) (if ExcelFile$ (if (= (strcase ExcelFile$) (strcase *ExcelFile$)) (if (findfile ExcelFile$) (vlax-invoke-method (vlax-get-property *ExcelApp% "ActiveWorkbook") "Save" ) (setq Saveas t) ) (if (findfile ExcelFile$) (progn (vl-file-delete (findfile ExcelFile$)) (setq Saveas t) ) (setq Saveas t) ) ) ) (if Saveas (vlax-invoke-method (vlax-get-property *ExcelApp% "ActiveWorkbook") "SaveAs" ExcelFile$ -4143 "" "" :vlax-false :vlax-false nil ) ) (vlax-invoke-method (vlax-get-property *ExcelApp% "ActiveWorkbook") 'Close :vlax-False ) (vlax-invoke-method *ExcelApp% 'Quit) (vlax-release-object *ExcelApp%) (gc) (setq *ExcelApp% nil *ExcelFile$ nil ) (princ) ) ;;------------------------------------------------------------------------------- ;; ColumnRow - Retourne une liste des indices de colonne et rangée ;; Function By: Gilles Chanteau from Marseille, France ;; Arguments: 1 ;; Cell$ = Référence de la cellule ;; Exemple de syntaxe : (ColumnRow "IV987") = '(256 987) ;;------------------------------------------------------------------------------- (defun ColumnRow (Cell$ / Column$ Char$ Row#) (setq Column$ "") (while (< 64 (ascii (setq Char$ (strcase (substr Cell$ 1 1)))) 91) (setq Column$ (strcat Column$ Char$) Cell$ (substr Cell$ 2) ) ) (if (and (/= Column$ "") (numberp (setq Row# (read Cell$)))) (list (Alpha2Number Column$) Row#) '(1 1) ;_ default to "A1" if there's a problem ) ) ;;------------------------------------------------------------------------------- ;; Alpha2Number - Convertit une chaîne alphabétique en nombre entier ;; Function By: Gilles Chanteau from Marseille, France ;; Arguments: 1 ;; Str$ = Chaîne à convertir ;; Exemple de syntaxe : (Alpha2Number "BU") = 73 ;;------------------------------------------------------------------------------- (defun Alpha2Number (Str$ / Num#) (if (= 0 (setq Num# (strlen Str$))) 0 (+ (* (- (ascii (strcase (substr Str$ 1 1))) 64) (expt 26 (1- Num#)) ) (Alpha2Number (substr Str$ 2)) ) ) ) ;;------------------------------------------------------------------------------- ;; Number2Alpha - Convertit un nombre entier en chaîne alphabétique ;; Function By: Gilles Chanteau from Marseille, France ;; Arguments: 1 ;; Num# = Nombre à convertir ;; Exemple de syntaxe : (Number2Alpha 73) = "BU" ;;------------------------------------------------------------------------------- (defun Number2Alpha (Num# / Val#) (if (< Num# 27) (chr (+ 64 Num#)) (if (= 0 (setq Val# (rem Num# 26))) (strcat (Number2Alpha (1- (/ Num# 26))) "Z") (strcat (Number2Alpha (/ Num# 26)) (chr (+ 64 Val#))) ) ) ) ;;------------------------------------------------------------------------------- ;; rtosr - Utilisé pour changer un nombre réel en chaîne numérique avec les ;; zéros de fin supprimés. ;; Function By: Gilles Chanteau from Marseille, France ;; Arguments: 1 ;; RealNum~ = Nombre réel à convertir en chaîne raccourcie ;; Retourne: ShortReal$ la chaîne numérique de la valeur du nombre réel. ;;------------------------------------------------------------------------------- (defun rtosr (RealNum~ / old_dimzin ShortReal$) (and (numberp RealNum~) (setq old_dimzin (getvar "DIMZIN")) (setvar "DIMZIN" 8) (setq ShortReal$ (rtos RealNum~ 2 15)) (setvar "DIMZIN" old_dimzin) ) ShortReal$ ) ;;------------------------------------------------------------------------------- ;; Cell-p Evalue si l'argument est une référence de cellule valide ;; Function By: Gilles Chanteau from Marseille, France ;; Argument: 1 ;; cell = la chaîne à évaluer ;; Exemples de syntaxe : ;; (Cell-p "B12") = T ;; (Cell-p "BT") = nil ;;------------------------------------------------------------------------------- (defun Cell-p (cell) (and (= (type cell) 'STR) (or (= (strcase cell) "A1") (not (equal (ColumnRow cell) '(1 1))) ) ) ) ;;------------------------------------------------------------------------------- ;; Row+n Retourne la cellule située à n rangées de cell ;; Function By: Gilles Chanteau from Marseille, France ;; Arguments: 2 ;; cell = cellule à incrémenter ;; n = incrément ;; Exemple de syntaxe : (Row+n "B12" 3) = "B15" ;;------------------------------------------------------------------------------- (defun Row+n (cell n) (setq cell (ColumnRow cell)) (strcat (Number2Alpha (car cell)) (itoa (max 1 (+ (cadr cell) n))) ) ) ;;------------------------------------------------------------------------------- ;; Column+n Retourne la cellule située à n colonnes de cell ;; Function By: Gilles Chanteau from Marseille, France ;; Arguments: 2 ;; cell = cellule à incrémenter ;; n = incrément ;; Exemple de syntaxe : (Column+n "B12" 3) = "E12" ;;------------------------------------------------------------------------------- (defun Column+n (cell n) (setq cell (ColumnRow cell)) (strcat (Number2Alpha (max 1 (+ (car cell) n))) (itoa (cadr cell)) ) ) ;;------------------------------------------------------------------------------- (princ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 6 novembre 2007 Posté(e) le 6 novembre 2007 Re, (gile), question récurante que je pose encore : Quel nom de fichier Lisp pour lancer la routine ? Merci d'avance. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 6 novembre 2007 Posté(e) le 6 novembre 2007 Il s'agit d'un ensemble de routines (sous routines) à utiliser dans un programme LISP. Les commentaires expliquent leurs utilisations possible (un aperçu dans le commentaire de tête et au début de chaque routine. Un exemple d'ecriture de données dans un nouveau fichier et enregistrement sur le bureau sous Test.xls (defun c:Test1 () ;; ouvrir un nouveau classeur (OpenExcel nil "Feuille1" nil) ;; écrire les données à partir de la cellule A1 (PutCell "A1" (list "GP093" 58.5 17 "Base" "3'-6 1/4\"")) ;; fermer enregistrer Test.xls sur le bureau (CloseExcel (strcat "C:\\Documents and Settings\\" (getvar "LOGINNAME") "\\Bureau\\Test.xls" ) ) (princ) ) Exemple de lecture de la cellule E1 du fichier Test.xls (defun c:Test2 () ;; lire et créer la liste des données jusqu'à E1 (GetExcel (strcat "C:\\Documents and Settings\\" (getvar "LOGINNAME") "\\Bureau\\Test.xls" ) "Feuille1" "E1" ) ;; afficher la donnée de la cellule E1 (alert (getcell "E1")) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 6 novembre 2007 Posté(e) le 6 novembre 2007 Rerre, Ok (gile). Merci encore. Bonne soirée. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
speedy Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 Bonjour à touspour le fun, une question à Nazemrap, comment modifier ton code vba pour récupérer les longueurs ??? et si c'est possible avec plus de sélection...... @+ Michel a
Nono64 Posté(e) le 7 novembre 2007 Auteur Posté(e) le 7 novembre 2007 Je n'ai pas eu le temps de tester encore vos propositions mais merci beaucoup, en particulier pour la vitesse de vos réponses, c'est impressionnant !!!Je vous tiens au courant .... A+ Arno
Bred Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 Salut,tu trouvreas des routines lisp ici. Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Nono64 Posté(e) le 7 novembre 2007 Auteur Posté(e) le 7 novembre 2007 Bon, il faut se rendre à l'évidence, je ne dois vraiment pas être doué, mais je n'arrive pas à exécuter vos commandes :- Nazemrap, ta version semble parfaite mais je ne sais absolument pas comment transformer du VBA en LISP ;- (gile), concernant ce que tu m'as envoyé, je n'arrive pas à m'en servir malheureusement ... je ne sais pas s'il faut récupérer une partie de tes lignes de programme, l'insérer dans autre chose, ou bien tout copier et lancer directement la commande sur Autocad, ca fait plusieurs heures que je cherche et je commence à perdre espoir.Pourriez-vous m'aiguiller svp car je suis vraiment super nul !Merci à tous. Arno Question subsidiaire : y a-t-il une version de long_line avec les surfaces à la place des longueurs ... ? Ou encore mieux, une version qui permette de choisir soit la surface soit la longueur, soit les deux ?
(gile) Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 Salut, Si tu veux utiliser les routines de GetExcel, il faut que tu enregistres (sous GetExcel.lsp par exemple) et que tu charges le fichier. Comme expliqué plus haut, ces routines sont des fonctions à utiliser dans ton programme suivant tes besoins (lecture écriture enregistrement etc...) Je te donne un exemple, tu charges aussi le LISP ci dessous, il contient une sous-routine (DoubleInputBox) pour récupérer les données (donnée à écrire dans le fichier et référence de la cellule) ansi qu'une commande LISP : data2cell. Une fois tout ça chargé, tu entre data2cell à la ligne de commande et une première boite de dialogue te demande de choisir le fichier (à créer ou existant) puis une seconde pour entrer la donnée à écrire et la cellule. ;; 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 (defun DoubleInputBox (box msg1 msg2 val1 val2 / temp file dcl_id lst) (defun subr (str / pos) (if (and ( (setq pos (vl-string-position 32 (substr str 1 50) nil T)) ) (strcat ":text_part{label=\"" (substr str 1 pos) "\";}" (subr (substr str (+ 2 pos))) ) (strcat ":text_part{label=\"" str "\";}") ) ) (setq temp (vl-filename-mktemp "Tmp.dcl") file (open temp "w") ) (write-line (strcat "DoubleInputBox:dialog{key=\"box\";initial_focus=\"val1\";:paragraph{" (subr msg1) "}:edit_box{key=\"val1\";edit_width=54;allow_accept=true;}spacer;:paragraph {" (subr msg2) "}:edit_box{key=\"val2\";edit_width=54;allow_accept=true;}spacer;ok_cancel; }" ) file ) (close file) (setq dcl_id (load_dialog temp)) (if (not (new_dialog "DoubleInputBox" dcl_id)) (exit) ) (foreach n '("box" "val1" "val2") (set_tile n (eval (read n))) ) (action_tile "accept" "(setq lst (list (get_tile \"val1\") (get_tile \"val2\"))) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete temp) lst ) (defun c:data2cell (/ file data) (and (setq file (getfiled "Créez ou sélectionnez un fichier" "" "xls" 33)) (setq data (DoubleInputBox "Donnée vers Excell" "Donnée à entrer" "Référence de la cellule (ex: B3)" "" "" ) ) (OpenExcel (cond ((findfile file))) nil nil) (PutCell (cadr data) (car data)) (CloseExcel file) ) (princ) ) (princ "\nData2Cell correctement chargé. Taper data2cell pour lancer la commande.") (princ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 re,tu as testés les routines que je te donne dans mon messge précedent ?je les utilises continuellement, et elles fonctionnent trés bien.... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
lili2006 Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 Bonjour à toutes et tous, (gile), une fois de plus, merci pour tes explications. Cela marche super bien ! @+, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 On peut utiliser de la même façon les routines données par Bred. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 Re, Je regarde ça de suite,.. Merci à vous deux. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 Rerere, Bred, j'ai aplellé le fichier lisp "Routines Bred"fichier support AutoCAD, l'ai chargé. A présent, peux-tu me dire comment tu utilises tes routines ? Merci d'avance. (désolé de vous solliciter tous le tps, mais je veux être sûr d'avoir bien compris,...déformation professionnelle !!) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 A présent, peux-tu me dire comment tu utilises tes routines ? De la même façon que celles de GetExcel, seuls les arguments sont un peu différents (defun c:data2cell (/ file data) (and (setq file (getfiled "Créez ou sélectionnez un fichier" "" "xls" 33)) (setq data (DoubleInputBox "Donnée vers Excell" "Donnée à entrer" "Référence de la cellule (ex: B3)" "" "" ) ) (XL-Ouv-Feuill file "Feuil1" 0) (XL-Put-Txt-Cell (car data) (cadr data)) (XL-Close) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 Rererere, Merci (gile), je teste ça. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 Re, (gile), le test de la réponse N° 9 me renvoi : Pour test 1 : Fermer toutes les feuilles Ecel pour continuer ! , alors que je n'ai rien d'ouvert dans ce format. Pour test2 : Il ne trouve pas le fichier Test.xls que j'ai créé au préalable ??,!!! Je suis sous Vista, un rapport ? Les chemins ont l'air bons pourtant . [Edité le 7/11/2007 par lili2006] Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 Fermer toutes les feuilles Ecel pour continuer ! C'est qu'un classeur Excel (invisible) a du être mal refermé par un LISP, mais normalement le LISP s'occupe de le fermer et continue. Ça ne devrait pas empêcher d'écrire ou de lire. [Edité le 7/11/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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