Aller au contenu

D'une liste à une liste de paires pointées.


Messages recommandés

Posté(e)

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)

Posté(e)

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

Posté(e)

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)

Posté(e)

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)

Posté(e)

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

Posté(e)

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)

Posté(e)

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)

Posté(e)

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)

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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...

  • Upvote 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)

Posté(e)

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)

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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)

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é