Aller au contenu

Lisp et VBA


Thelduin

Messages recommandés

Bonjour (ou bonsoir :D ) à tous !

 

Je suis en licence pro CAO DAO, et j'ai un projet de fin d'étude à réaliser.

Je me tourne vers vous car j'ai un soucis. Mon projet consiste à tracer et ferrailler (donc calculer) automatiquement un relevé/garde-corps/acrotère en béton armé.

J'ai écris un lisp permettant de dessiner le relevé, j'ai donc toutes les données du relevé (hauteur, largeur etc...). Seulement, pour le calcul du ferraillage, j'ai besoin de balancer ces données sur une feuille excel. Et une fois le calcul fait, j'ai besoin de récupérer le résultat pour l'exploiter et permettre de dessiner le ferraillage (le résultat de ma feuille excel c'est 2Ha10 par exemple).

Je voulais donc savoir si quelqu'un pouvait m'éclairer sur la liaison autocad/excel et/ou lisp/vba.

 

Merci d'avance ! :D

 

Ah oui, et je voulais aussi savoir comment gérer des blocs dynamiques avec le lisp (je ferais sûrement un autre sujet sur le forum, mais si quelqu'un a quelques pistes que je peux explorer concernant la manipulation des propriétés des blocs dynamiques, je suis preneur, parce que je me suis rendu compte que ces dites propriétés (liés au paramètres dynamiques) n'apparaissent pas dans les clés dxf de l'objet, et je ne sais donc pas comment faire)

Lien vers le commentaire
Partager sur d’autres sites

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

Meilleurs contributeurs dans ce sujet

Je sais exactement comment calculer le ferraillage d'un relevé/garde-corps/acrotère, sinon je ne ferais pas ça comme projet de fin d'étude !

Je fais justement mon alternance dans un bureau d'étude structure BA, et j'ai eu l'occasion, et même à plusieurs reprises, de demander comment cela se calcule et pourquoi (DTU sous les yeux)

En attendant, tu réponds pas tellement à ma question...

Lien vers le commentaire
Partager sur d’autres sites

je vais un peu, m'expliquer, je viens de voir que tu es étudiant.

Le calcul de ferraillage demande des connaissances approfondies en calcul de résistance des matériaux.

 

seul, les ingénieurs en béton armé sont habilités à le faire, surtout que cela entraîne beaucoup de responsabilités.

même, si en pratique, si tu as un niveau math sup, tu peux appliquer les bons algorithmes pour un balcon...

Lien vers le commentaire
Partager sur d’autres sites

Ouai bon bref, là n'est pas la question.

 

Mon projet est validé par deux des ingénieurs du bureau, et l'idée m'a été présentée par un projeteur qui me forme.

 

Pendant les phases exe, on va pas aller embêter l'ingé juste pour un garde-corps au bout d'un balcon, il a autre chose à faire de bien plus complexe.

 

Donc je comprends pas pourquoi vous venez me faire un discours là dessus, me faisant comprendre que je n'ai pas à le faire, sous couvert de responsabilités que je n'ai pas, sachant qu'un projeteur est tout aussi responsable que l'ingé sur certaines grosses affaires....

Lien vers le commentaire
Partager sur d’autres sites

J'aurais mieux fais de poser ma question comme cela :

 

Bonjour,

 

J'ai fait un lisp pour dessiner un truc, je voudrais balancer certaines données de ce truc sur excel pour faire un calcul, et rebalancer le résultat sur autocad pour l'exploiter

 

Merci d'avance

 

 

C'est mieux ? Désolé si je parais désinvolte, mais je n'aime pas qu'on vienne me faire une pseudo morale dans un français bancal, sans pour autant répondre à ma question ...

Lien vers le commentaire
Partager sur d’autres sites

c'etait pour te dire que je ne pense pas que si tu trouves un Lisp qui te fais cela, soit la bonne solution pour toi.

calcul, c'est plus formateur.

et tous les plans de ferraillage que j'ai pus faire, on été vérifies par l' ingénieur qui m'avait fourni une feuille de calcul avant que je fasse mes plans.

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

COOL / ZEN !

 

SVP que les anciens Pros soient "un peu sympas / souples / gentils / etc" avec les jeunes qui manquent d'expérience !

 

Même si parfois les jeunes montent un peu vite dans les tours ?!

 

Merci, Bye, lecrabe (61 ans)

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Oui voilà, moi aussi mes détails de ferraillage sont systématiquement vérifié, moi aussi j'ai une feuille de calcul pour les relevés, j'en ai aussi une pour les renforts de dalles au droit des trémies etc...

 

Mais le projet que je fais, c'est vraiment que pour les études, je suis quasi-certain qu'il ne sera jamais utilisé au bureau. Mais c'est juste que je dois le faire, pour mes études, mais que c'est quand même quelque chose qui m'intéresse. J'aime pas mal coder sous autocad (un peu moins excel mais j'essaye de faire de mon mieux :D ), et je me dis qu'en pratiquant, je finirai bien par trouver des routines qui seront vraiment utile !

 

Sur ce, je vous demande quand même pardon pour m'être emporté, c'était idiot

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Personnellement j'ai toujours trouvé les liaison LISP / Excel plutôt lourdingues, aussi j'essayerais de faire les calculs directement dans le LISP.

Si le passage par Excel est vraiment incontournable, une recherche avec GetExcel te dirigeras vers plusieurs sujets qui traitent de ça.

 

Je n'aurais pas le temps de t'aider plus avant aujourd'hui.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Ce n'est pas la première fois qu'on lit ce genre de discours, le travail de fin d'études...

 

Dans les faits s'il faut aller dans Excel ce qu'on aimerait bien, Theldien, c'est un exemple du code réalisé jusqu'ici et un exemple des données à transférer, ça aidera grandement à comprendre.

Créer un "simple" fichier texte formaté CSV et dans Excel trois clics ou une macro et le tour est joué est une solution, ou tu calcules dans le lisp comme te le suggère (gile).

 

Permets-moi de te dire que je te trouve quelque peu incisif, nous on sait faire, on partage, alors on se calme et tout le monde sera content, c'est comme le volontaire aux restos du cœur qui se fait engueuler pour la température de la soupe...

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Je vais essayer de répondre à tout le monde, donc ça va faire un gros pavé :D

 

aussi j'essayerais de faire les calculs directement dans le LISP.

J'aimerais vraiment pouvoir faire le calcul dans le lisp, seulement, je sais pas si il est possible de créer une base de données, ou en tout cas quelques chose qui s'en rapproche, dans laquelle je vais pouvoir aller "piocher" le ferraillage qui correspond à ce qui a été calculé.

 

J'aurais une seule question. Quel est ton niveau en lisp ?

Je ne saurais pas te dire. Je sais pas vraiment jusqu'où on peut aller avec le lisp, donc je n'arrive pas à me "jauger". Je peux tout de même te passer quelques codes que j'ai fait jusque là (dont la plupart fait dans le cadre d'exercice pour l'IUT).

 

Je pourrais te guider, mais pas te faire le lisp.

Ça tombe bien, je n'ai pas envie qu'on me donne le lisp déjà fait. Je suis venu sur ce forum pour chercher de l'aide et apprendre :D

 

Dans les faits s'il faut aller dans Excel ce qu'on aimerait bien, Theldien, c'est un exemple du code réalisé jusqu'ici et un exemple des données à transférer, ça aidera grandement à comprendre.

 

(defun c:trace_relevé()
(setq acob(getvar "osmode"))
(setq unitang(getvar "aunits"))
(command "_-dimstyle" "_r" "COT25")
(setvar "osmode" 0)
(setvar "aunits" 3)
(setq kw "Oui")
(while ( = kw "Oui")
(setq dclid (load_dialog "relevé.dcl"))
(new_dialog "trace" dclid)
(action_tile "accept" "(recup)")
(action_tile "cancel" "(done_dialog)")
(start_dialog)

 ;calcul des paramètres utiles
 
(setq niv_inf_dalle(- brut epdalle))
(setq x_insert(car(getpoint "\nSpécifiez le point d'insertion du point inférieur droit (seul le x est retenu) : "))) ;à revoir
(setq p1(list (+ x_insert eprel 50) brut 0))
(setq p2(list (+ x_insert eprel 50) niv_inf_dalle 0))
(setq p3(polar p1 (+ 0 pi) 50))
(setq p4(polar p2 (+ 0 pi) (+ 50 eprel)))
(setq p5(list (car p4) arase_sup 0))
(setq p6(list (+ (car p5) eprel) (- (cadr p5) 1) 0))
(setq diff_niv(- fini brut))
(setq p7(polar p3 (/ pi 2) diff_niv))
(setq p8(polar p1 (/ pi 2) diff_niv))


 (setq test(tblsearch "LAYER" "01_BA_Coupe"))
 (if not (= test nil) ;test la présence du calque de coupe
(setvar "clayer" "01_BA_Coupe") 
 )
   	(command "-calque" "e" "01_BA_Coupe" "CO" 6 "" "EP" 0 "" "TL" "Continuous" "" "")
 
(command "_pline" p1 p3 p6 p5 p4 p2 "")

 (setq test(tblsearch "LAYER" "01_BA_Fini"))
 (if not (= test nil) ;test de présence
   	(setvar "clayer" "01_BA_Fini")
 )
 	(command "-calque" "e" "01_BA_Fini" "co" 3 "" "ep" 0 "" "tl" "AXES" "" "")
 
(command "ligne" p7 p8 "")

 (setq test(tblsearch "LAYER" "01_BA_Cotation"))
 (if not (= test nil) ;test de présence
   	(setvar "clayer" "01_BA_Cotation")
 )
 	(command "-calque" "e" "01_BA_Cotation" "co" 2 "" "ep" 0 "" "tl" "Continuous" "" "")

(command "cotord" p7 "TE" "<>f" (polar p7 0 30))
(command "cotord" p3 "TE" "<>b" (polar p3 0 30))
(command "cotlin" p2 p1 (polar p1 0 10) "cotcont" p8 p6 p5 "" "")
(command "cotord" p5 (polar p5 0 (+ eprel 30)))
 
(initget 1 "Oui Non")
 (setq kw(getkword "\nVoulez-vous tracer un autre relevé/garde-corps/acrotère ? [Oui/Non]"))
)
(setvar "clayer" "0")
(setvar "osmode" acob)
(setvar "aunits" unitang)
)

;=========Fonction de récupération DCL========;

(defun recup()
(setq epdalle(get_tile "epdalle"))
 		(setq epdalle(atof epdalle))
(setq brut(get_tile "brut"))
 		(setq brut(atof brut))
(setq fini(get_tile "fini"))
 		(setq fini(atof fini))
(setq eprel(get_tile "eprel"))
 		(setq eprel(atof eprel))
(setq arase_sup(get_tile "arase_sup"))
 		(setq arase_sup(atof arase_sup))
(done_dialog)
)

 

Le DCL :

trace : dialog{

label = "Données";

: edit_box {
 label = "Epaisseur de la dalle";
 key = "epdalle";
 }

: edit_box {
 label = "Niveau brut";
 key = "brut";
 }

: edit_box {
 label = "Niveau fini";
 key = "fini";
 }

: edit_box {
 label = "Epaisseur du relevé";
 key = "eprel";
 }

: edit_box {
 label = "Arase supérieure du relevé";
 key = "arase_sup";
 }

: row {
 : button {
   label = "OK";
   is_default = true;
   key = "accept";
   }

 : button {
   label = "Annuler";
   is_default = false;
   is_cancel = true;
   key = "cancel";
   }
}
}

Voilà l'état de mon code à l'heure actuelle. Je pense qu'il y a moyen de l'optimiser.

Les données que je voudrais envoyer sur excel c'est l'épaisseur de mon relevé, l'arase sup du relevé, le niveau fini, le brut et l'épaisseur de la dalle (en gros, toutes les données :D ) plus la longueur que je demanderais à l'utilisateur au moment d'envoyer les données (ou avant, je sais pas encore).

Ces données vont me servir à calculer le ferraillage nécessaire, à l'aide de cette feuille de calcul :

https://image.noelshack.com/fichiers/2018/15/3/1523468551-partie-calcul-excel.png

Les cellules vertes correspondent aux données entré par l'utilisateur, les bleus c'est du calcul, et le jaune c'est le résultat.

Ensuite, je me sers de cette petite base de données (que je compte alimenter encore), qui reprends les ferraillages les plus communs :

https://image.noelshack.com/fichiers/2018/15/3/1523468654-base-donnees.png

Et le résultat final c'est ça :

https://www.noelshack.com/2018-15-3-1523468726-resultat.png

Tout se fait automatiquement (à part l'entrée des données dans les cellules vertes).

 

Le résultat que j'ai à la fin, ici 2Ha14, je voudrais le rebalancer sur Autocad pour tracer le ferraillage.

 

J'espère que ça vous éclairera sur mon projet :D

 

Permets-moi de te dire que je te trouve quelque peu incisif

J'ai très clairement sur réagit, et c'était absurde et idiot de ma part de réagir comme ça. Je suis vraiment désolé.

 

 

C'est quoi le programme d'une licence "pro CAO DAO" ?

On fait beaucoup d'info. On a vu excel, access, un peu de vba, et du LISP. On fait aussi du web (je sais pas trop pourquoi mais bon :D ), ainsi que de la "maintenance informatique". En gros on nous montre ce qu'il y a dans un PC, et comment le monter.

Ensuite, on fait pas mal de dessin, sur plusieurs logiciel (mais aussi à la main, mais trop peu). Autocad, Covadis ou encore Revit font partie des logiciels qu'on utilise.

A côté de ça, on a aussi un peu de mécanique des structures. On utilise notamment SCIA pour faire de la maquette analytique et faire du calcul avec. (beaucoup moins poussé qu'en DUT Génie Civil ou il fallait réellement dimensionner les éléments).

Cette année, il y a une nouveauté, c'est ce qu'ils appellent le "Projet BIM". En gros, on part d'une maquette Revit type archi (qu'on fait nous même), et de cette maquette, on extrait le gros oeuvre pour faire des plans de coffrage, mais aussi des modèles analytiques qu'on transfert sur SCIA.

Et ensuite, on a aussi un peu de matières générales (math, com, anglais).

Je pense avoir tout dit, j'ai peut-être zappé deux trois modules :D

 

J'espère avoir répondu à tout le monde :D

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

A mon tour de m'excuser, voila.

 

du coup me lance le 1er, je vais etre suivis par les masters.

 

tout d'abord, bravo pour ton courage, le lisp n'est pas si facile, tu verras.

 

1er truc qui me gène, est le non encapsulage des variables.

quand tu créé une variable avec setq il faut les déclarées aussi comme cela

 

defun c:trace_relevé(/ acob unitang ...)

 

sinon elles deviennent globales.

et il faut mettre un espace après ta variable

(setq acob (getvar "osmode"))

tu as aussi clos tes if trop tôt, du coup le else (non ecrit en lisp) s'effectue a tout les coup, et les conditions sont mal présentées. if test suffit normalement

 

(if  test  ;test la présence du calque de coupe
       (setvar "clayer" "01_BA_Coupe") 
 
       (command "-calque" "e" "01_BA_Coupe" "CO" 6 "" "EP" 0 "" "TL" "Continuous" "" "")
)

 

n'hesite pas à aller consulter l'aide des développer

 

pas testé l'algo, et ne me sert jammais du dcl

 

à pluch

Lien vers le commentaire
Partager sur d’autres sites

Je savais pas du tout qu'il fallait déclarer les variables comme tu me le dis ! Merci

Mais du coup, c'est quoi une variable globale ?

Pour le if, je l'avais fermé comme toi, sauf que j'avais une erreur, qui me disait qu'il y avait trop d'arguments. Après, j'avais peut être mal écrit la ligne de code (je me souviens plus de ce que j'avais mis), mais je testerai dès que possible ce que tu me dis :D

 

tout d'abord, bravo pour ton courage, le lisp n'est pas si facile, tu verras

Je profite de ton encouragement (que j'apprécie, merci !) pour demander si quelqu'un a un ouvrage à me recommander pour apprendre le LISP (si cela existe)

Lien vers le commentaire
Partager sur d’autres sites

Une variable globale est disponible tout le temps.

Elle reste stockée dans la ram, et peux devenir génante.

Exemple tu as appeler une variable TEXT.

et que tu lance un lisp qui se sert aussi de la variable text, au départ elle n'est pas nil.

il y a d'autres conséquences qui me viennent pas à l'esprit vu l'heure et que suis en bretagne...

par contre depuis mes debut j'ecrit comme cela pendant mes phases de teste

 

(defun c:trace_relevé(/ ;acob unitang ...
                            )

car tu peux appeler ta variable globale en faisant simplement !TEXT dans la barre de commande d'autocad, très pratique pour débugguer, quand ta finis t'enleve ;

Lien vers le commentaire
Partager sur d’autres sites

a oui, vient de poser les yeux sur un accent interdit pour les fonctions et commandes, celui de relevé !!!

 

vois bien les bases, et essais des petites routines avant de te lancer dans une usines à gaz.

 

Bonne nuit et désolé du premier retours, mais ton message etais mal formulé.

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Je vois pas mal de choses qui ne vont pas ou qui ne sont pas des bonnes pratiques

Mais on a l'habitude avec les étudiants, on a déjà le souci avec les profs (lili2006 si tu nous lis (hihi))

 

Les variables, si les profs t'en ont pas parlé : faute

S'ils t'en ont parlé et que t'as séché : faute

C'est très important.

 

Voir ici : SETQ en fin de page.

 

Je ne comprends pas l'utilisation du DCL c'est pour faire joli ?

Parce qu'une saisie en ligne de commande fera amplement l'affaire.

 

Que saisis-tu au juste dans ce DCL ?

Est-ce que tu dessines une polyligne depuis les données ?

C'est ce que je comprends mais ce qui serait vraiment utile serait de sélectionner une polyligne dessinée dans AutoCAD et ensuite en extraire les sommets, c'est l'intérêt de la programmation : extraire les données utiles au calcul depuis des entités graphiques.

 

Pense à "internationaliser tes commandes", voir ICI (auto-promo)

 

La variable test dans le tblsearch est inutile :

Lance directement le tblsearch, si le calque existe on se met dedans sinon on le

 

(if (tblsearch "LAYER" "01_BA_Cotation")
(setvar "clayer" "01_BA_Cotation")
(command "_layer" "_M" "01_BA_Cotation" "_co" 2 "" "ep" 0 "" "tl" "Continuous" "" "")
)

 

Voici après une lecture rapide (et une journée dure)

Ensuite pour l'Excel je te parlais de CSV ça te suffirait ou tu en veux plus ?

 

Petite "leçon" de "morale" : (je me permets ?)

Pour ce qui est de l'apprentissage il en est de même qu'avec la musique, on progresse très vite au début, on saute les cours de solfège, puis on stagne... alors on revient aux cours de solfège, on en bave des ronds de chapeaux puis on se remet enfin à progresser régulièrement

 

Amicalement

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Effectivement, le prof qui nous a fait cours de lisp ne nous a pas parlé de l'utilité de renseigner les variables

J'ai fait le choix de faire un DCL pour deux raisons :

1/ je trouve ça plus intuitif pour un utilisateur, même s'il est vrai qu'une saisie en ligne suffit amplement

2/ ça m'entraîne =D

 

Je note ton conseil sur l'extraction des données de la polyligne, mais pour ce que je veux faire, je trouvais plus simple de réutiliser les données que je demande (arase, épaisseur etc ...), après, je me trompe peut-être !

 

Pour ce qui est du CSV, tout ce que j'en sais c'est que c'est, en gros, un tableau mais sous forme de texte, dont les valeurs sont séparés par un point virgule, mais je n'en ai jamais vu, et je ne connais pas l'utilité d'un tel fichier et je ne sais pas comment on s'en sert

Lien vers le commentaire
Partager sur d’autres sites

L'intérêt d'un fichier csv (ou autre type de fichier texte) c'est que c'est beaucoup plus facile et rapide à lire ou à écrire qu'un fichier Excel.

 

On ne peut pas faire de 'base de données' ou 'table de données' en LISP, mais on peut faire des fonctions qui retournent une liste de données en fonction d'une clé.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

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é