Aller au contenu

LXL + cartouche +presentations


Messages recommandés

Posté(e)

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.

 

 

 

 

  • Réponses 60
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Posté(e)

Salut

 

ce qui est un peu embettant est le fait que je doive recharger le fichier excel pour chaque présentation

C'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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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étitives

Je 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+

Posté(e)

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]

Posté(e)

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

 

Posté(e)

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+

 

Posté(e)

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épertoires

100 DWG par projets

Chaque projet pointe une zone différente dans le fichier excel

Donc :

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 master

Je 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+

Posté(e)

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

Posté(e)
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

Ben 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 liaisons

Il 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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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êtres

2b - 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 !!

 

 

Posté(e)

Cela me parait bien.

Je vais juste t'indiquer comment sont conçu mes listes

tu fais un (setq a (vlax-ldata-get cle "0")) pour avoir la première entrée

cle --> (setq cle "Patrick_35_Excel")

Un (car a) te donnes le fichier

Un (cdr a) te donnes les onglets

Je prends le premier onglet

(setq b (cadr a)) ou (setq b (nth 1 a))

Un (car b) te donnes le nom de l'onglet

Un (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 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 !

 

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+

Posté(e)
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 ....

Posté(e)

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

Posté(e)
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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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.

 

 

Posté(e)

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+

Posté(e)

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/

Posté(e)

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+

Posté(e)

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

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é