DenisHen Posté(e) le 14 octobre 2016 Auteur Posté(e) le 14 octobre 2016 Salut Goldorak (c'est drole, je regarde en ce moment Capitaine Flam... ;) ) Merci pour ton aide, mais oui, (vl-load-com) est dans un lisp de base que je charge à chaque nouveau dessin... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 14 octobre 2016 Posté(e) le 14 octobre 2016 Je supposes que tu utilises bien l'éditeur Visual LISP.As-tu essayé de mettre un point d'arrêt dans ton code (F9), puis de faire un "pas à pas" avec F8 pour voir l'état de tes variables au fur et à mesure de l'exécution du code ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 14 octobre 2016 Auteur Posté(e) le 14 octobre 2016 Oui, j'utilise toujours l'éditeur Visual LISP... Je vais suivre ton conseil... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 14 octobre 2016 Auteur Posté(e) le 14 octobre 2016 Effectivement, avant la lecture de la cellule, j'ai placé un arrêt, et voilà mes variables :_1_$ Mon_Appli #<VLA-OBJECT _Application 000002189069adf8> _1_$ Mon_Classeur nil _1_$ Ma_Feuille nil Donc, si Mon_Classeur est nil, il ne peut lire une cellule... Mais pourquoi ça ne plante pas avant ? Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 14 octobre 2016 Posté(e) le 14 octobre 2016 Je viens de faire un test et, chez moi (Office 2013), il y a un problème avec la fonction ouvrir_fichier de API_XLS.lsp. (vl-catch-all-apply 'vlax-get (list activex 'caption)) retourne "Excel", donc pas de correspondance avec "MICROSOFT EXCEL*" et la fonction ouvrir_fichier retourne nil. Ce qui pourrait expliquer l'erreur qu'a DenisH. À ce dernier, je recommanderais de pas essayer de courir avant de savoir marcher.Malgré toute l'estime que je peux avoir pour Patrick_35, je ne suis pas partisan de pousser les débutants à utiliser des fonctionnalités qui sont trop au dessus de leur niveau actuel.Programmer Excel en LISP n'est pas une chose simple, et même si on utilise des routines fournies par d'autres, il faut au moins savoir les déboguer, faute des comprendre. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 14 octobre 2016 Auteur Posté(e) le 14 octobre 2016 Merci pour ton aide (gile). Effectivement, je marche encore en titubant avec le Lisp... Le marathon n'est pas pour aujourd'hui... J'en conviens aisément... Je trouvais l'idée intéressante d'utiliser un fichier XLS plutôt que de me battre avec un ASCII... Et avec son "API_XLS", je pensais cela abordable... Dommage... J'aurais pû aussi faire du VBA, mais je ne suis pas sûr de sa pérennité... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 14 octobre 2016 Auteur Posté(e) le 14 octobre 2016 J'ai aussi essayé GetCellsFunction de Jefferypsanders, mais ça plante J'essaye GetExcel de Terrycad, mais c'est en anglais... Si je n'y arrive pas, je suis les conseils de (gile) et j'abandonne l'idée... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 14 octobre 2016 Auteur Posté(e) le 14 octobre 2016 Bon, GetExcel fonctionne, mais ça met une plombe pour lire une seule cellule... Je retourne à mon fichier ASCII... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Patrick_35 Posté(e) le 14 octobre 2016 Posté(e) le 14 octobre 2016 Malgré toute l'estime que je peux avoir pour Patrick_35, je ne suis pas partisan de pousser les débutants à utiliser des fonctionnalités qui sont trop au dessus de leur niveau actuel.Je ne peux qu'être d'accord, mais toutes les fonctions sont normalement facile d'accès, d'où ma proposition.Et ces fonctions doivent être nickel pour un utilisateur lambda.Apparemment, il y a eu une évolution qui fait planter le lisp. Merci Je trouvais l'idée intéressante d'utiliser un fichier XLS plutôt que de me battre avec un ASCII...Ben moi aussi Sinon, j'ai fais un exemple beaucoup plus simple et donc facile(defun c:test() (setq fichier (findfile "d:/test/Doss_IC_CadXP.xls")) (setq xls (vlax-get-or-create-object "Excel.Application")) (setq classeur (vlax-invoke (vlax-get xls 'Workbooks) 'open fichier)) (setq feuille (vlax-get-property (vlax-get classeur 'Sheets) 'Item "Personnel")) (setq valeur (vlax-get (vlax-get-property feuille 'Range "A1") 'Value)) (alert valeur) (vlax-invoke classeur 'close :vlax-false) (mapcar 'vlax-release-object (list feuille classeur xls)) (gc)(gc) (princ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 14 octobre 2016 Auteur Posté(e) le 14 octobre 2016 Merci Patrick_35, c'est nickel... Et comme je n'ouvre qu'une seule fois le classeur, c'est beaucoup plus rapide que GetExcel... Je pars là-dessus... Si je n'y arrive pas, je ne m'obstinerais pas... Encore merci à tous... 1 Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 14 octobre 2016 Auteur Posté(e) le 14 octobre 2016 Que dire de plus... J'ai donc écris (enfin, complété) ça :(defun c:testXLS (/ Fichier File Lign NbLignXls xls classeur feuille Fonc Perso FichLstPerso FichLstMateriel) (setq fichier (findfile "Doss_IC.xls")) (setq xls (vlax-get-or-create-object "Excel.Application")) (setq classeur (vlax-invoke (vlax-get xls 'Workbooks) 'open fichier)) (setq feuille (vlax-get-property (vlax-get classeur 'Sheets) 'Item "Personnel")) (setq NbLignXls 2) (while (/= (vlax-get (vlax-get-property feuille 'Range (strcat "A" (rtos NbLignXls 2 0))) 'Value) nil) (setq Fonc (vlax-get (vlax-get-property feuille 'Range (strcat "A" (rtos NbLignXls 2 0))) 'Value)) (setq Perso (vlax-get (vlax-get-property feuille 'Range (strcat "B" (rtos NbLignXls 2 0))) 'Value)) (setq FichLstPerso (cons (strcat Fonc ";" Perso) FichLstPerso)) (princ (strcat "\n" Fonc "\t" Perso)) (setq NbLignXls (+ NbLignXls 1)) ) ;_ Fin de while (setq FichLstPerso (reverse FichLstPerso)) (vlax-ldata-put "DenisH" "FichLstPerso" FichLstPerso) (vlax-invoke classeur 'close :vlax-false) (mapcar 'vlax-release-object (list feuille classeur xls)) (gc) (gc) (princ) )Encore un grand merci à tous... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Patrick_35 Posté(e) le 14 octobre 2016 Posté(e) le 14 octobre 2016 Deux petites remarques (while (/= (vlax-get (vlax-get-property feuille 'Range (strcat "A" (rtos NbLignXls 2 0))) 'Value) nil)Revient à faire(while (vlax-get (vlax-get-property feuille 'Range (strcat "A" (rtos NbLignXls 2 0))) 'Value) Et même mieux, afin d'éviter de relire la cellule(while (setq valeur (vlax-get (vlax-get-property feuille 'Range (strcat "A" (rtos NbLignXls 2 0))) 'Value)) Ensuite, tu peux utiliser la fonction itoa à la place de rtos @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 14 octobre 2016 Auteur Posté(e) le 14 octobre 2016 Effectivement, l'attribution de la variable directement dans le (while est plus rapide... Et oui, itoa... J'avais pas percuté... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
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