nazemrap Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 Bonsoir, Speedy:tu remplaces la ligne [surligneur] valeur=poly.area[/surligneur] par [surligneur]valeur= poly.length [/surligneur] Pour plus de sélection, sagit-il de plusieurs polylignes ? que souhaites-tu exactement. Nono64:il n 'est pas question de transformer du vba en Lisp.Si tu veux l 'utiliser, il ne s 'agit que d 'un exemple mais adaptable, va voir la procédure donnée par Sechanbask ici Je n 'ai pas précisé, mais il faut bien sûr charger depuis vba autocad, la bibliothèque des éléments Excel.Menu outils >> references >> Microsoft Excel object Library
lili2006 Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 Re, Tien oui, c'est bizarre, quand je rouvre EXCel, j'ai un fichier nommé "classeur 2" qui remplit les cellules A1 à E1 avec ces caractères : "GP093 58.5 17 Base 3'-6 1/4" Bizarre, Bizarre cette affaire,... Lorsque j'éteind ce fichier, je retrouve le fichier "Test.xls" rempli des mêmes informations !!!???Si je le fais plusieurs foix, j'ai différents fichiers créés (Classeur1; 2 ; 3 ; 4,...) et toujours avec ce même remplissage de cellules ! 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 lili2006, C'est normal, l'exemple ouvre un nouveau fichier : ;; ouvrir un nouveau classeur(OpenExcel nil "Feuille1" nil) Le premier argument pour OpenExcel est nil. Pour ouvrir et écrire dans le fichier le fichier Test.xls, il faudrait mettre : (OpenExcel (strcat "C:\\Documents and Settings\\" getvar "LOGINNAME") "\\Bureau\\Test.xls") "Feuille1" nil) Ceci explique aussi le message que tu as eu, les fichiers sont créés mais ni fermés ni enregistrés. Pour utiliser ces routines il faut bien comprendre ce qu'elles font et à quoi correspondent leurs arguments (c'est dans les commentaires en en_tête et au début de chaque routine). [Edité le 7/11/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 7 novembre 2007 Posté(e) le 7 novembre 2007 Re, J'essayerai plus tard, mais je crois avoir compris le message. Merci encore (gile) . @+, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Nono64 Posté(e) le 9 novembre 2007 Auteur Posté(e) le 9 novembre 2007 Merci (gile) et les autres pour toute votre aide.J'ai enfin réussi à faire ce que je voulais. Je me suis servi de GetExcel que tu m"as filé et j'ai rajouté quelques lignes de codes pour que ce ne soient pas des valeurs pré-enregistrées mais des variables (exemple surface ou périmètre d'une ou plusieurs polylignes sélectionnées à l'écran) et oh miracle ca marche !!Merci pour tout. Si ca intéresse certains d'entre vous je pourrai mettre en ligne ce que j'ai rajouté lorsque le programme sera bien finalisé et rodé. Bred, en ce qui concerne tes routines, cela marche effectivement très bien, mais cela ne correspondait pas exactement à ce que je recherchais, merci quand même !A bientôt. Arno
mimiingerop Posté(e) le 9 novembre 2007 Posté(e) le 9 novembre 2007 Bonjour à tous, J'ai un problème très similaire à celui que vous avez résolu, sauf que moi c'est un cumul de surface de hachures par calque que j'ai besoin d'envoyer en dynamique sur un tableau excel existant ....puis-je y arriver à partir des routines proposées, est-ce que je peux changer le poly-area en hatch-area ou quelque chose du genre ? Merci de votre aide si quelqu'un a un bout de routine dans ce sens ...Mireille
(gile) Posté(e) le 10 novembre 2007 Posté(e) le 10 novembre 2007 J'ai ajouté 3 petites routines à GetExcel.lsp : Cell-p : pour évaluer la validité d'un nom de référence de celluleColumn+n : pour incrémenter sur les colonnesRow+n : pour incrémenter sur les rangées [Edité le 10/11/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Nono64 Posté(e) le 12 novembre 2007 Auteur Posté(e) le 12 novembre 2007 Salut à tous,petite question supplémentaire : GetExcel.lsp ne fonctionne pas si la case de destination sur Excel est nommée.Exemple : (PutCell "C21" (list "GP093" 58.5 17 "Base" "3'-6 1/4\"")) fonctionne mais si l'on nomme la case C21 cela ne fonctionne plus.En effet, si l'on écrit : (PutCell "Surface" (list "GP093" 58.5 17 "Base" "3'-6 1/4\"")) Autocad renvoie " erreur: fonction incorrecte: "surface" ". (gile) aurais-tu une idée ? Merci encore.
(gile) Posté(e) le 12 novembre 2007 Posté(e) le 12 novembre 2007 Salut, PutCell est prevue pour fonctionner avec des références de cellules du type "B6" qui sont ensuite converties en liste (2 6) (2ème colonne 6ème rangée).Je ne suis pas sûr qu'il soit possible en LISP de retouver une cellule nommée, j'essayerais de regarder... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Nono64 Posté(e) le 12 novembre 2007 Auteur Posté(e) le 12 novembre 2007 Ok c'est gentil, merci beaucoup (gile).Bonne journée et à bientôt. Arno
Patrick_35 Posté(e) le 12 novembre 2007 Posté(e) le 12 novembre 2007 Salut (gile) Je décompose la démarche afin de t'indiquer la logique. (setq fic (getfiled "Veuillez sélectionner un fichier Excel" "" "xls" 16)) ; Lance Excel si besoin, sinon se connecte dessus (setq xl (vlax-get-or-create-object "Excel.Application")) (setq wks (vlax-get xl 'Workbooks)) ; Regarde si le fichier Excel n'est pas ouvert (vlax-for sel wks (and (eq (strcase (vlax-get sel 'fullname)) (strcase fic)) (setq xls sel) ) ) ; Si le fichier Excel n'est pas ouvert, on l'ouvre (or xls (setq xls (vlax-invoke wks 'open fic)) ) (setq classeur (vlax-get xls 'sheets)) (setq dest "Un_Nom_de_Cellule") ; Choix de la cellule ou du nom (setq val "Test") ; Valeur à écrire ; On recherche dans le classeur pour trouver la feuille avec la cellule nommée et y écrire la valeur (vlax-for feuille classeur (or (vl-catch-all-error-p (setq cel (vl-catch-all-apply 'vlax-get-property (list feuille 'range dest)))) (vlax-put cel 'value2 val) ) ) ; Si on connait la feuille où se trouve la cellule nommée pour éviter la boucle, on peut faire (setq feuille "Une_Feuille_Nommée") ; Choix de la feuille par son nom (vlax-put (vlax-get-property (vlax-get-property classeur 'item feuille) 'range dest) 'value2 val) ; Fermer le fichier sans sauvegarde (vlax-invoke-method xls 'close :vlax-false) ; Nettoyage de la mémoire (foreach sel (list xl wks xls classeur) (vlax-release-object sel) ) (setq xl nil wks nil xls nil classeur nil) (gc)(gc) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 12 novembre 2007 Posté(e) le 12 novembre 2007 Merci Patrick, Je vais essayer d'inclure ça dans GetExcel. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 12 novembre 2007 Posté(e) le 12 novembre 2007 J'ai modifié PutCell dans GetExcel.lsp (Réponse 7), on peut désormais utiliser un nom de cellule comme argument pour PutCell (la cellule nommée doit exister dans la feuille active) Encore merci à Patrick_35 qui m'a bien aiguillé sur la voie. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Nono64 Posté(e) le 13 novembre 2007 Auteur Posté(e) le 13 novembre 2007 J'ai testé ta nouvelle version de putcell, et ca marche nikel !!!Encore bravo à vous deux, c'est parfait. Arno
lovecraft Posté(e) le 13 novembre 2007 Posté(e) le 13 novembre 2007 bonjour,Je viens de teste getexcel.Mais je rencontre un p'tit soucis , certainement par manque d'expérience... Voila j'ai chargé le lisp getexcell.lspPuis ensuite ce que je voulais faire c'était d'ouvrir un fichier existant (OpenExcel "C:\\AFFAIRES\\A41-IMP_OH.xls" "OH" nil) Et là rien je pense qu'il est ouvert en arriere plan , mais comment le rendre visible? Merci http://www.youtube.com/user/CADMINATOR?feature=mhee
(gile) Posté(e) le 13 novembre 2007 Posté(e) le 13 novembre 2007 Salut, Lis bien les commentaire (pour une fois qu'il y en a), le dernier argument pour OpenExcel c(est : Nil pour invisible. T pour visible. Mais avant de relancer OpenExecl, pense à refermer le fichier : (CloseExcel "C:\\AFFAIRES\\A41-IMP_OH.xls") Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 1 décembre 2007 Posté(e) le 1 décembre 2007 J'ai mis à jour les routines column+n et row+n (réponse 7 première page) pour éviter les retours non valides du style : "@2" ou "B0" aux expressions (column+n "B2" -2) et (row+n "B2" -2) , les retours sont désormais respectivement "A2" et "B1". Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
-Olivier- Posté(e) le 16 février 2015 Posté(e) le 16 février 2015 Bonjour à tous, Je fais un joli déterrage de sujet.Je suis en ce moment sur un petit programme ou j'ai besoin de lire et d'enregistrer des données depuis un tableau Excel. Les routines fournis dans ce sujet me sujet mais j'aimerais comprendre comment vous faites pour les construire notamment pour la partie enregistrer sous. Dans l'aide, il n'est question uniquement d'enregistrement de fichier Autocad. (defun c:Example_SaveAs() ;; The following example saves current drawing as "test.dwg" (setq acadObj (vlax-get-acad-object)) (setq doc (vla-get-ActiveDocument acadObj)) (vla-SaveAs doc "test.dwg") ) Comment arrive tu à ceci. (vlax-invoke-method (vlax-get-property *ExcelApp% "ActiveWorkbook") "SaveAs" ExcelFile$ -4143 "" "" :vlax-false :vlax-false nil ) J'arrive parfaitement en enregistrer mon fichier avec une extension .XLS et non .XLSXJe suppose que le -4143 joue un rôle mais je ne trouve rien là dessus. Merci pour vos éventuelles réponses.OlivierPS : Je suis débute en Vlisp et patauge un peu dans l'aide.
Patrick_35 Posté(e) le 16 février 2015 Posté(e) le 16 février 2015 Salut Après une rechercheC'est le type de fichier. 51 pour le xlsx Pour retrouver tes petits :(setq xls (vlax-get-or-create-object "excel.application"))Ensuite, il reste pluq qu'a lire ;)(vlax-dump-object xls T)Libérer ou supprimer Excel de la mémoire (s'il n'a pas été lancé auparavant)(vlax-release-object xls) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
-Olivier- Posté(e) le 16 février 2015 Posté(e) le 16 février 2015 Salut Patrick35, Merci pour cette réponse rapide. Je commences à comprendre. Ensuite, il reste pluq qu'a lire ;)(vlax-dump-object xls T) La cela va prendre un peu de temps ;) :D Olivier
-Olivier- Posté(e) le 16 février 2015 Posté(e) le 16 février 2015 Après de nouvelle recherche, Ici par exemple 51 ;format du fichier "" ;mot de passe ?? "" ;pourquoi 2 lignes ?? :vlax-false ;lecture seule ne recomandée :vlax-false ;pas de création de backup nil ;alors là aucune idée. ) Cela marche nickel mais je comprends pas tout (et j'aime pas ne pas comprendre ce que j'écris :( ). Olivier
Patrick_35 Posté(e) le 17 février 2015 Posté(e) le 17 février 2015 Salut Un autre lien.Bonne question. Si tu regardes bien, tu peux donner jusqu'a 12 arguments pour la commande saveas, mais 8 sont requis au minimum sinon --> ; erreur: nombre de paramètres réels insuffisant. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
-Olivier- Posté(e) le 17 février 2015 Posté(e) le 17 février 2015 Merci Patrick35, Cela correspond exactement à ce que je recherchais. B) Je garde ce lien pour la suite. @+Olivier
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