whitesquare Posté(e) le 18 juillet 2007 Posté(e) le 18 juillet 2007 j'ai decouvert recemment, le lisp de patrick_35 'lxl' qui permet d'avoir des données excel dans autocad et inversemment, je remercie bien sur le créateur de ce lisp et felicite le travail accompli, meme si je n'ai pas toutes les connaissances requises pour en juger. j'ai pris connaissance du post initial et des remarques de chacun, mais certaines interrogations persistent. tout d'abord voici mon souhait :je souhaite utiliser lxl pour inserer des données excel dans des cartouches autocad.pour chaque projet, un fichier excel contient les données à insérer dans le cartouche.mon souhait etait que lorsqu'on debute un nouveau projet, on charge le fichier excel, et le cartouche se met a jour. j'ai reussi à faire les 3/4 du chemin, seulement ce qui est un peu embettant est le fait que je doive recharger le fichier excel pour chaque présentation (si j'ai bien lu le post initial, il n'y a pas d'autre possibilité) Ce qui fait que le temps que j'ai gagné a ne pas recopier les données excel est reperdu par le fait que je dois charger mon fichier excel pour chaque présentations au départ et en cas de modif tout recharger. je m'interroge sur : _ ma compréhension exacte de ce lisp_ l'utilité de ce lisp dans mon cas précis_ l'existence d'une autre methode pour repondre a mon souait je precise que les données excel que je rappatrie dans autocad sont des données fixes qui ne sont pas amenées à changer (maitre d'ouvrage / tel / fax / adresse / type de projet / et si ev. la phase) tel que j'ai compris ce lisp, si je souhaite changer de phase (donnée cartouche insrite dans excel)je dois recharger chacune de mes présentations, la ou avant une simple edition de bloc suffisait.
Patrick_35 Posté(e) le 18 juillet 2007 Posté(e) le 18 juillet 2007 Salut ce qui est un peu embettant est le fait que je doive recharger le fichier excel pour chaque présentationC'est à dire ?Une fois que les liaisons sont faites, il ne reste plus qu'à lancer la mise à jour quand c'est nécessaire. Soit depuis Excel ou d'autocad. Cela dépend du sens que l'on souhaite tel que j'ai compris ce lisp, si je souhaite changer de phase (donnée cartouche insrite dans excel)je dois recharger chacune de mes présentations, la ou avant une simple edition de bloc suffisait.Ben non, tu cliques simplement sur le bouton Mise à jour des attributs et le lisp fait le reste.Pas besoin de charger le fichier Excel pour la mise à jour. Le lisp s'en charge @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
stephan35 Posté(e) le 18 juillet 2007 Posté(e) le 18 juillet 2007 De temps en temps, le perfectionnisme tue la productivité ....... (à méditer ) :casstet: Si, et seulement si, les données à remplir se trouvent identiques pour chaque présentation, inclue dans un cartouche (avec/sans) attributs, ma solution est la suivante : Je créée un Xref qui contient les données répétitivesJe redéfini la format graphique de mon cartouche qui pointe avec ce xref en plus.je remet à jour mon cartouche partout ou il est utilisé.(_insert =) (Perso sur un dossier de + de 3000 fichiers, ça s'impose ....)a+
whitesquare Posté(e) le 19 juillet 2007 Auteur Posté(e) le 19 juillet 2007 bonjour messieurs, et merci de vos reponses je vais tenter de me rexprimer plus clairement quant a mon utilisation de ce lisp - j'ai un cartouche bloc attribut dans une presentation- je lance lxl, charge un fichier excel, associe en affectation libres les cellules, puis mise a jour attribut- le cartouche se met correctement a jour- je copie mon cartouche dans une autre présentation du meme dessin- je relance lxl, je change de fichier excel- resultat, les données ne changent que dans le cartouche initial 1--- il me semblait avoir lu, en reponse de lili.. sur le post initial que la procedure consisitait a charger le lisp pour chaque présentation 2 ---je ne sais meme pas comment faire pour reaffecter les cellules du cartouche non modifié, puisque lxl affiche pourtant que le bon fichier excel est chargé, d'ou ma question sur l'utilité ou non de selectionner le cartouche avant de lancer le lisp (il me semble que cela ne sert a rien ...) 3 ---mon intention est que ces cartouches soient intégrés aux fichierx gabarits et enfin je lis dans ton post patrick que tu evoque une mise a jour possible depuis excel :quelle est la procedure, les fichiers autocad doivent ils etre ouverts ? encore merci pour ton travail patrick,merci stephan et pour te repondre, c'est justement la ou je m interroge, je ne suis pas sur que dans mon cas, ce lisp, aussi merveilleux soit il, soit adapté. et j'attend avec impatience que patrick viennent me contredire. whitesquare_(du 35) :) [Edité le 19/7/2007 par whitesquare]
stephan35 Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 Salut tout le monde, Une petite note d'optimise .... D'une façon générale j'ai toujours réussi à faire ce que je souhaitait avec le Lisp .... (grâce aussi, il faut le dire, les vétérants de ce site ;) ) Après, c'est une question de temps, d'investissement, et de motivation. Bref, Je ne connais pas ce lisp de patrick, mais, à priori, si je t'ai bien compris, tu mets à jour dynamiquement le contenu d'un cartouche par rapport au contenu d'un fichier exel ??? Comment fais-tu pour indiquer que telle cellule excel va dans tel attribut ???? Car si c'est dynamique, patrick génère peut-être un fichier mouchard de correspondance ???Ou alors il travail avec les handle ??? Tu peux me mettre un lien ???
whitesquare Posté(e) le 19 juillet 2007 Auteur Posté(e) le 19 juillet 2007 salut stephan, va voir dans les lisp de patrick_35 : http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=11303#pid55908 et dans le post original ou beaucoup de questions ont deja été posées : http:// http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=13519#pid55066 [Edité le 19/7/2007 par whitesquare]
stephan35 Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 Ok, après un test rapide, Le programme de pratick fait référence à ce que l'on appelle les handles , qui est un identificateur unique d'une entité, soit par exemple "7ef74E50" , c'est ce qui lui sert à retrouver et à associer la case d'une cellule excel au contenu d'un attribut..... et ce pour le cartouche du folio du fichier que tu traites. Si tu changes de fichier, si tu fais un wblock, quoi que tu fasses, tu ne pourras jamais faire un copier / coller des relations existantes !!!!!!La sauvegarde de cette relation, à mon avis, car je me suis arrêté là , doit être de la forme Xdata, c'est à dire des données supplémentaire sauvegardée dans ton fichier autocad. C'est le moteur même du lisp qu'il faut changer (sauf erreur de ma part) Dans ton cas, il aurait fallu faire une relation Bloc/Attribut <-> cellule attacher à un fichier de paramêtre..... Facile à dire, mais pas à faire, car les softs de patrick sont relativement optimisés, de plus il utilise le vlisp (Que je ne maitrise pas trop .... pas du tout !) Bref, Cherche une solution native autocad ....A+
whitesquare Posté(e) le 19 juillet 2007 Auteur Posté(e) le 19 juillet 2007 merci stephan, bah si j en crois ce que tu me dis, il me reste plus qu a revenir a mes vieux blocs attributs
stephan35 Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 Je crois que patrick est en vacances ??? Et sincèrement ta modification de programme n'est pas simple .... si tu me laisses 2 semaines c'est faisable :casstet: Mais le mieux serait de voir directement avec l'intéressé ..... Pour ta solution, il y aurait peut-être une étape intermédiaire .... imaginons : 10 projets = 10 répertoires100 DWG par projetsChaque projet pointe une zone différente dans le fichier excelDonc :Je cree un fichier master.dwg qui contient le cartocuhe et les éléments du fichier excel supposés modifié et modifiable.Je recree le bloc cartouche auquel je rajoute le xref qui pointe sur masterJe vais dans chaque dwg et je fais un inserer = pour le cartouche ..... faire attention lors de la redéfinition à ne pas rajouter ou supprimer des attribtus sinon il faudra lancer un attredef ! ;) A voir si ça apporte quelque chose ... a+
whitesquare Posté(e) le 19 juillet 2007 Auteur Posté(e) le 19 juillet 2007 merci du conseil j'avoue que ça semble seduisant, je test ça de suite,et je ne demande pas que le lisp soit changé, j'essaye juste pour le moment de comprendre réellement l'etendu des possibilités offertes et par consequent ses limites. apres si mon souhait repond a une réelle attente, que n'offre pas ce lisp actuellemnt et que tu te sens toi ou bien patrick d'y repondre je n y vois pas dinconvénients bien sur.mais il me semblerait surprenant que cela se produise, car j ai l impression que ce lisp convaint bcp de gens dans sa config actuelle, apres.......je ne suis pas apte a décider etant donné mon incomprehension du langage lisp voila, merci encore
Patrick_35 Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 1--- il me semblait avoir lu, en reponse de lili.. sur le post initial que la procedure consisitait a charger le lisp pour chaque présentationBen non, une fois que le lisp est chargé, inutile de le recharger de nouveau 2 ---je ne sais meme pas comment faire pour reaffecter les cellules du cartouche non modifiéDans la partie Attributs, tu fais modifier et enfin je lis dans ton post patrick que tu evoque une mise a jour possible depuis excel :quelle est la procedure, les fichiers autocad doivent ils etre ouverts ?La mise à jour se lance toujours depuis Autocad.Soit cette mise à jour modifie le fichier Excel depuis les valeurs indiquées dans les attributs ou les attributs sont modifiés avec les valeurs indiquées dans Excel Dans le cas d'une nouvelle présentation sur le même fichier, il faut refaire d'autres liaisons stephan35 a bien analysé le lisp J'ajouterai juste une chose afin de garder les liaisonsIl est possible de sauvegarder le dessin sous un autre nom de manière à conserver les handles contrairement au wbloc et ensuite de réaffecter les fichiers Excel, voir même les onglets Et une dernière, car tu as aussi la possibilité de sélectionner juste un bloc, de donner uniquement la cellule de départ et tous les attributs du bloc seront affectés selon le mode d'affectation des cellules Je crois que patrick est en vacances ???Et non, mais je ne suis pas 24/24 sur cadxp ;) Et sincèrement ta modification de programme n'est pas simple .... si tu me laisses 2 semaines c'est faisable :casstet: Banco :) Mais le mieux serait de voir directement avec l'intéressé .....Mais non, mais non, comme cela je me sentirai un peu moins seul avec excel ;) ps : on travaille entre Bretons dirait-on ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
stephan35 Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 Mais non, mais non, comme cela je me sentirai un peu moins seul avec excel ps : on travaille entre Bretons dirait-on <acronym class=dict title= :laugh: Bon, récapitulons, et rédigeons un mini cahier des charges ..... :laugh: Pour faire simple, et pour confirmer :1 - Ajouter la possibilité de traiter plusieurs présentations dans un même fichier DWG en mode texte (Bloc / Attribut) et non plus en handle.2 - La paramétrage de la liaison de contenus par présentation est commune ou individuelle ???2a - commune : On défini les liaisons pour un cartouche, et à chaque utilisation de ce cartouche dans les présentations on utilisera les mêmes paramêtres2b - individuelle : rien à faire ça marche déjà comme ça ! : il faut reparamétrer les liaisons pour chaque attribut de chaque cartouche.... 3 - fonctionner avec un fichier de configuration pour exporter les paramêtres dans d'autre projets Merci de confirmer whitesquare, tu peux me faire parvenir 1 fichier exemple à buchholz point s at free point fr PS : Corrige patrick si je dérrape !!
Patrick_35 Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 Cela me parait bien.Je vais juste t'indiquer comment sont conçu mes listestu fais un (setq a (vlax-ldata-get cle "0")) pour avoir la première entréecle --> (setq cle "Patrick_35_Excel")Un (car a) te donnes le fichierUn (cdr a) te donnes les ongletsJe prends le premier onglet(setq b (cadr a)) ou (setq b (nth 1 a))Un (car b) te donnes le nom de l'ongletUn (cdr b) te donnes la liste des attributs avec leurs affectations (j'ai pris le principe d'une paire)Il n'y a plus qu'à ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
stephan35 Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 Merci patrick ! Bon, J'attends les éléments de whitesquare Bien entendu, je ne vais pas réinventer l'eau chaude, donc il y aura 90% de copier/coller et 10%de bibi .... Merci pour ton aide, A+
whitesquare Posté(e) le 19 juillet 2007 Auteur Posté(e) le 19 juillet 2007 je t ai envoyé un dwg + 2 xls fais moi signe si ya erreure dans l adresse a : whitesquare at hotmail point fr
stephan35 Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 je t ai envoyé un dwg + 2 xls fais moi signe si ya erreure dans l adresse a : whitesquare at hotmail point fr C'est ok ! Je regarde comme ça, et je te tiens au parfum ....
stephan35 Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 Bon,...... J'ai une bonne et une mauvaise nouvelle ... 1 - Je ne pense pas que l'on prenne le problème dans le bon sens .....ça fait un peu usine à gaz de vouloir prendre un fichier excel pour modifier de façon récursive des cartouches d'un fichier ...Le fichier excel pour les données , c'est un impératif ???? 2 - J'ai développé un outils qui répondrait à tes attentes, j'ai juste une ou deux petites modifs à apporter 3 - Tu n'utilises pas correctement les étiquettes des attributs !!!!!Il faut mettre un nom unique qui les permets de les différenciers les uns des autres et non pas XXXX !!!!! 4 - Que ce soit une adaptation du prog de pratrick ou du mien, tu as ça à corriger !!!! Je continue .... a+ PS, je ne suis pas très loin du lieu des travaux ....
Patrick_35 Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 1 - Je ne pense pas que l'on prenne le problème dans le bon sens .....ça fait un peu usine à gaz de vouloir prendre un fichier excel pour modifier de façon récursive des cartouches d'un fichier ...Le fichier excel pour les données , c'est un impératif ????Pour rester dans le même esprit de LXL, ce serait bien de travailler dans les deux sens ;) 3 - Tu n'utilises pas correctement les étiquettes des attributs !!!!!Il faut mettre un nom unique qui les permets de les différenciers les uns des autres et non pas XXXX !!!!!Ce n'est pas grave, tu peux de servir de la position de l'attribut dans les tables.exemple :(setq sel (vlax-ename->vla-object (car (entsel "\nVeuillez sélectionner un bloc avec attributs : ")))) (setq att (vlax-invoke sel 'getattributes))La variable ATT contient maintenant une liste en vla des attributs. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
stephan35 Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 Pour rester dans le même esprit de LXL, ce serait bien de travailler dans les deux sens Je crois avoir compris ce que cherchais whitesquare, c'est un outils qui sert à remplir automatiquement le contenu de ses cartouches à partir de données externes (Excel ou autres ???) Et dans son cas, je ne crois pas à la rétroannotation dans le fichier source .... Ce n'est pas grave, tu peux de servir de la position de l'attribut dans les tables. En fait ça m'arrangeais de fonctionner avec les noms des attributs, car mes tables étaient déjà existantes ....Et si l'attribut est déplacé, ça ne fonctionne plus .... :casstet: A suivre ...
whitesquare Posté(e) le 19 juillet 2007 Auteur Posté(e) le 19 juillet 2007 oui c ça stephan tu as compris ce que je cherche,et pour ce qui est des etiquettes tu as raison, mea culpa, j'utilise les attributs depuis peu,cela n est pas genant pour ce probleme il me semble.............ceci dit je corrige ça de suite........... j avoue avoir un peu de mal a suivre qd tu parle de retroannotation, mais j'ai l impression que tu te pose les bonnes questions.
stephan35 Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 oui c ça stephan tu as compris ce que je cherche, Bon, je dois modifier un moteur lisp, et j'en profite pour intégrer tes paramètres. Je te donnes des nouvelles demain ! A+
lili2006 Posté(e) le 19 juillet 2007 Posté(e) le 19 juillet 2007 Bonsoir à tous, Trés interessant tout ça,...Quand les Bretons se retrouvent,...(Je le suis aussi!)Je pense avoir les mêmes besoins que whitesquare et à mon avis, je ne suis pas le seul,... je refait un tour demain soir sur ce post pour suivre ce feuilleton. Bon travail à tous,..(Je pense comme whitesquare idée de ce lisp trés séduisante et utilisation optimale surement possible puisque même son créateur le pense,...). @+ et bravo encore pour l'esprit,.... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
stephan35 Posté(e) le 20 juillet 2007 Posté(e) le 20 juillet 2007 Bonjour, A - Pour ma réponse, je complêtement sorti du contexte LXL de patrick_35, ceci afin de répondre à ton besoin B - On peut considéré le listing qui suit comme une bidouille , elle nécéssitera la mise en place de réacteurs, on aura très certainement besoin de l'aide de BRED ou PATRICK_35 qui maitrisent parfaitement la chose, 1 - Modifie ton acad2006.lsp pour y ajouter le lanceur: ; Teste de lancement automatique macro ; Stéphan BUCHHOLZ - 07/2007 (defun @remplissage_cartouche ( / ) (if (findfile "@remplissage_cartouche.lsp")(load (findfile "@remplissage_cartouche.lsp"))) ) Elle s'activera à chaque ouverture de fichier, si le fichier macro @xxx.lsp est rouvé 2 - Creer le fichier "@remplissage_cartouche.lsp" dans ton répertoire de travail.ceci pour qu'il soit trouvé à l'ouverture de ton fichier. ; Stéphan BUCHHOLZ - 07/2007 ;********************************************************************************************************************************************************* ; Macro à optimiser Unique @R code Valeur & @W Code Valeur ..... dans quelques semaines bon ben c'est fait !!! ;Lecture ou ecriture d'un attribut dans un bloc (defun @S_AE ( #SSN $T $E #t $valeur / &Be $Be0 R) (if (not #SSN)(progn (alert (strcat "@S_AE \nValeur nil pour #SSN"))(exit))) (if (not $T)(progn (alert (strcat "@S_AE \nValeur nil pour $T"))(exit))) (if (not $E)(progn (alert (strcat "@S_AE \nValeur nil pour $E"))(exit))) (if (not #t)(progn (alert (strcat "@S_AE \nValeur nil pour #t"))(exit))) (setq &Be (entget #SSN)) (setq $Be0 (@R 0 &Be)) (while (and (/= $Be0 "SEQEND") (/= (entnext #SSN) nil)) (setq &Be (entget (setq #SSN (entnext #SSN)))) (setq $Be0 (@R 0 &Be)) (if (= $Be0 $T) ;Attribut (if (= $E (@R 2 &Be)) ; Si Etiquette ok (if (not $valeur) (progn (cond ((= #t 8)(setq R (@R 8 &Be))) ((= #t 1)(setq R (@R 1 &Be))) ((= #t 2)(setq R (@R 2 &Be))) ) ) (progn (cond ((= #t 8)(setq R (@W 8 &Be $valeur))) ((= #t 1)(setq R (@W 1 &Be $valeur))) ((= #t 2)(setq R (@W 2 &Be $valeur))) ) ) ) ) ) ) R ) (defun @R ( #code &entget / tmp ) (if (not #code)(progn (alert (strcat "@R \nValeur nil pour #code"))(exit))) (if (not &entget)(progn (alert (strcat "@R \nValeur nil pour &entget"))(exit))) (cdr(assoc #code &entget)) ) ;********************************************************************************************************************************************************* ; Texte, Attribut (defun @W ( #code &entget $Valeur / tmp ) (if (not #code)(progn (alert (strcat "@W \nValeur nil pour #code"))(exit))) (if (not &entget)(progn (alert (strcat "@W \nValeur nil pour &entget"))(exit))) (if (not $Valeur)(progn (alert (strcat "@W \nValeur nil pour $Valeur"))(exit))) (setq &entget (subst (cons #code $Valeur) (assoc #code &entget) &entget)) (entmod &entget) (entupd (@R -1 &entget));Pour faire une mise a jour ponctuelle ) ; Extraction des "cartouche" à modifier ; Cette liste de cartouche peut être extraite d'une base de donnée ; J'ai rajouté ton cartouche dans la liste (setq &selection (ssget "X" (list (cons 2 "EEEEE,F11NOMEN,F0204SS")))) (if &selection (progn ; Pour chaque cartouche, on scrute les attributs et on écrit les valeurs ; Nota, une nouvelle fonction plus optimisée sera bientot releasée, qui ne scrute une fois la base .... ; Attention pour les attributs aux étiquettes, ne pas prendre la définition du bloc, ; mais vérifier au préalable ne nom réél dans autocad ! ça fait gagner du temps .... (setq #count 0) (repeat (sslength &selection) (setq #ent (cdr (assoc -1 (entget (ssname &selection #count))))) (print (entget #ent)) (@S_AE #ent "ATTRIB" "MAIRIE" 1 "Les meilleurs") (@S_AE #ent "ATTRIB" "COMMUNE" 1 "sont les bretons !") (@S_AE #ent "ATTRIB" "2" 1 "02-99-00-00-00"); et vive les bretons ;-) (@S_AE #ent "ATTRIB" "T" 1 "02-99-00-00-00"); et vive les bretons ;-) (setq #count (1+ #count)) ) ) (alert "Pas de selection trouvée dans @remplissage_cartouche") ) Lit bien le code, il y a trois parties, la définition des macros, la définition de la selection à partir d'un filtre de cartouches, et enfin le traitement sur chaque bloc trouvé. Maitenant, à chaque création d'onglet de présentation et que tu y insère un cartouche il faudra tapper la commande (@remplissage_cartouche), ou mettre un bouton qui appelle le lisp, ou mieux encore créé un réacteur (si c'est possible) qui détecte le changement d'onglet ...... Allo BRED ????Allo PATRICK_35 ????ou quiconque maitrisant les réacteurs .... merci pour lui. a+
Patrick_35 Posté(e) le 20 juillet 2007 Posté(e) le 20 juillet 2007 elle nécéssitera la mise en place de réacteurs, Tu veux faire quoi ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
whitesquare Posté(e) le 20 juillet 2007 Auteur Posté(e) le 20 juillet 2007 merci stephan pour tout le travail que tu acompli,je suis content d apprendre que ce lisp semble interresser d'autres gens,et en plus des bretons.je n ai pas eu le temps de me pencher sur ce que tu as mis en ligne, (dur journée o taf)je test ça ce soir ou demain et te rend compte de mes impressions .... encore merci en tout cas. euh par contre, p tet trouver ma remarque un peu deplacé, mais qd tu dis "modifier le lisp acad2006, il faut faire quoi je rajoute ton code au bout, j imagine que c'est pas aussi simple. j aimerai un jour pouvoir te rendre l appareil.PS / j'ai corrigé mon cartouche meussieur :P
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