PHILPHIL Posté(e) le 6 octobre 2019 Posté(e) le 6 octobre 2019 bonjour voici un LISP pour changer les caractéristiques d'un tableau existantmerci a Gile de son aide attention il change tout les textes en "arial" sauf la première rangéemodifier "arial" en autre chose a tester 5 sec pour modifier 3 tableaux de 1750 cases bon week end Phil ; ------------------------------------------- ; CHANGEMENT DES CARACTERISTIQUE D UN TABLEAU ; ------------------------------------------- (defun c:change_caracteristique_tableau (/ bl lst nbcolonne nbrangee compt) (setvar "cmdecho" 0) (setvar "dimzin" 0) (prompt "\nCLIQUER SUR LE(S) TABLEAU(X) A MODIFIER :") (setq bl nil) (while (null bl) (setq bl (ssget (list (cons 0 "ACAD_TABLE"))))) (setq ent nil) (setq compt 0) (setq com (sslength bl)) (setq tablargcolon1 (getcfg "APPDATA/tablargcolon1")) (setq tablargcolon2 (getcfg "APPDATA/tablargcolon2")) (setq tablargcolon3 (getcfg "APPDATA/tablargcolon3")) (setq tablargcolon4 (getcfg "APPDATA/tablargcolon4")) (setq tablargcolon5 (getcfg "APPDATA/tablargcolon5")) (setq tablargcolon6 (getcfg "APPDATA/tablargcolon6")) (setq tablargcolon7 (getcfg "APPDATA/tablargcolon7")) (setq tablargcolon8 (getcfg "APPDATA/tablargcolon8")) (setq tablargcolon9 (getcfg "APPDATA/tablargcolon9")) (setq tablargcolon10 (getcfg "APPDATA/tablargcolon10")) (setq tabhautmax (getcfg "APPDATA/tabhautmax")) (setq tablargeentrcolon (getcfg "APPDATA/tablargeentrcolon")) (setq tabmargehori (getcfg "APPDATA/tabmargehori")) (setq tabmargevert (getcfg "APPDATA/tabmargevert")) (setq tabhauttexte (getcfg "APPDATA/tabhauttexte")) (setq tabaligntexte (getcfg "APPDATA/tabaligntexte")) (setq tabhautrangee (getcfg "APPDATA/tabhautrangee")) (setq lst nil) (setq lst (cons (cons '"HAUTEUR DU TEXTE" tabhauttexte) lst)) (setq lst (cons (cons '"TYPE ALIGNEMENT DU TEXTE DANS LA CELLULE [1,2,3,4,5,6,7,8,9]" tabaligntexte) lst)) (setq lst (cons (cons '"HAUTEUR DE LA RANGEE" tabhautrangee) lst)) (setq lst (cons (cons '"MARGE VERTICALE DU TEXTE DANS LA CELLULE" tabmargevert) lst)) (setq lst (cons (cons '"MARGE HORIZONTALE DU TEXTE DANS LA CELLULE" tabmargehori) lst)) (setq lst (cons (cons '"HAUTEUR MAXI DU TABLEAU [ 0: UNE COLONNE DE TABLEAU, MAXI : PLUSIEURS COLONNES DE TABLEAU ]" tabhautmax) lst)) (setq lst (cons (cons '"LARGEUR ENTRE COLONNE DE TABLEAU" tablargeentrcolon) lst)) (setq lst (cons (cons '"LARGEUR COLONNE 1 DU TABLEAU" tablargcolon1) lst)) (setq lst (cons (cons '"LARGEUR COLONNE 2 DU TABLEAU" tablargcolon2) lst)) (setq lst (cons (cons '"LARGEUR COLONNE 3 DU TABLEAU" tablargcolon3) lst)) (setq lst (cons (cons '"LARGEUR COLONNE 4 DU TABLEAU" tablargcolon4) lst)) (setq lst (cons (cons '"LARGEUR COLONNE 5 DU TABLEAU" tablargcolon5) lst)) (setq lst (cons (cons '"LARGEUR COLONNE 6 DU TABLEAU" tablargcolon6) lst)) (setq lst (cons (cons '"LARGEUR COLONNE 7 DU TABLEAU" tablargcolon7) lst)) (setq lst (cons (cons '"LARGEUR COLONNE 8 DU TABLEAU" tablargcolon8) lst)) (setq lst (cons (cons '"LARGEUR COLONNE 9 DU TABLEAU" tablargcolon9) lst)) (setq lst (cons (cons '"LARGEUR COLONNE 10 DU TABLEAU" tablargcolon10) lst)) (setq lst (reverse lst)) (7-10inputbox "CHANGER LES CARACTERISTIQUES DES TABLEAUX" "CARACTERISTIQUES DU TABLEAU" "LARGEURS DES COLONNES" lst ) (setcfg "APPDATA/tabhauttexte" (cdr (nth 0 res))) (setcfg "APPDATA/tabaligntexte" (cdr (nth 1 res))) (setcfg "APPDATA/tabhautrangee" (cdr (nth 2 res))) (setcfg "APPDATA/tabmargevert" (cdr (nth 3 res))) (setcfg "APPDATA/tabmargehori" (cdr (nth 4 res))) (setcfg "APPDATA/tabhautmax" (cdr (nth 5 res))) (setcfg "APPDATA/tablargeentrcolon" (cdr (nth 6 res))) (setcfg "APPDATA/tablargcolon1" (cdr (nth 7 res))) (setcfg "APPDATA/tablargcolon2" (cdr (nth 8 res))) (setcfg "APPDATA/tablargcolon3" (cdr (nth 9 res))) (setcfg "APPDATA/tablargcolon4" (cdr (nth 10 res))) (setcfg "APPDATA/tablargcolon5" (cdr (nth 11 res))) (setcfg "APPDATA/tablargcolon6" (cdr (nth 12 res))) (setcfg "APPDATA/tablargcolon7" (cdr (nth 13 res))) (setcfg "APPDATA/tablargcolon8" (cdr (nth 14 res))) (setcfg "APPDATA/tablargcolon9" (cdr (nth 15 res))) (setcfg "APPDATA/tablargcolon10" (cdr (nth 16 res))) (while (< compt com) (setq ent1 (cdr (car (entget (ssname bl compt))))) (setq nbcolonne (vla-get-columns (vlax-ename->vla-object ent1))) (setq nbrangee (vla-get-rows (vlax-ename->vla-object ent1))) (vla-put-regeneratetablesuppressed (vlax-ename->vla-object ent1) :vlax-true) ; Suppress table regen (vla-put-vertcellmargin (vlax-ename->vla-object ent1) (atof (cdr (nth 3 res)))) ; marge verticale dans les cellules (vla-put-horzcellmargin (vlax-ename->vla-object ent1) (atof (cdr (nth 4 res)))) ; marge horizontale dans les cellules (vla-put-tablebreakheight (vlax-ename->vla-object ent1) (atof (cdr (nth 5 res)))) ; hauteur maxi du tableau (vla-put-breakspacing (vlax-ename->vla-object ent1) (atof (cdr (nth 6 res)))) ; espace entre les colonnes de tableau (setq rang 1 colon 0 ) (repeat (- nbrangee 1) (progn (setq colon 0) (repeat nbcolonne (vla-setcelltextstyle (vlax-ename->vla-object ent1) rang colon "Arial") ; gere le style de texte (vla-setcelltextheight (vlax-ename->vla-object ent1) rang colon (atof (cdr (nth 0 res)))) ; gere la hauteur du texte dans la case (vla-setcellalignment (vlax-ename->vla-object ent1) rang colon (atof (cdr (nth 1 res)))) ;1: haut gauche, 2: haut centre, 3:haut droit, 4: milieu gauche, 5: mileu centre, 6: milieu droit, 7: bas gauche, 8: bas centre, 9: bas droit (setq colon (1+ colon)) ) (vla-setrowheight (vlax-ename->vla-object ent1) rang (atof (cdr (nth 2 res)))) ; gere la hauteur de la rangée (setq rang (1+ rang)) ) ) (setq colon 0) (repeat nbcolonne (vla-setcolumnwidth (vlax-ename->vla-object ent1) colon (atof (cdr (nth (+ 7 colon) res)))) ; largeur de la colonne 0 (setq colon (1+ colon)) ) (vla-put-regeneratetablesuppressed (vlax-ename->vla-object ent1) :vlax-false) (setq compt (1+ compt)) ) (prompt "\n") (setvar "dimzin" 8) ) (defun 7-10inputbox (box col1 col2 lst / temp file keys i dcl_id ;;; res ) (setq temp (vl-filename-mktemp "Tmp.dcl") file (open temp "w") keys '("val1" "val2" "val3" "val4" "val5" "val6" "val7" "val8" "val9" "val10" "val11" "val12" "val13" "val14" "val15" "val16" "val17" ) ) (write-line (strcat "xInputBox:dialog{key=\"box\";initial_focus=\"val1\"; :row{ :column{label=\"" col1 "\";" ) file ) (setq i 0) (repeat 7 (write-line (strcat ":edit_box{label=" (vl-prin1-to-string (car (nth i lst))) ";key=\"val" (itoa (setq i (1+ i))) "\";edit_width=10;allow_accept=true;}spacer;" ) file ) ) (write-line (strcat "} :column{label=\"" col2 "\";" ) file ) (repeat 10 (write-line (strcat ":edit_box{label=" (vl-prin1-to-string (car (nth i lst))) ";key=\"val" (itoa (setq i (1+ i))) "\";edit_width=10;allow_accept=true;}spacer;" ) file ) ) (write-line "}} spacer; ok_cancel; }" file) (close file) (setq dcl_id (load_dialog temp)) (if (not (new_dialog "xInputBox" dcl_id)) (exit) ) (set_tile "box" box) (mapcar 'set_tile keys (mapcar 'cdr lst)) (action_tile "accept" "(setq res (mapcar 'cons (mapcar 'car lst) (mapcar 'get_tile keys))) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete temp) res ) FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
Elun Posté(e) le 7 octobre 2019 Posté(e) le 7 octobre 2019 Bonjour PHILPHIL, Ce code me semble fort intéressant !En revanche, les tableaux devant être mis à jour ne peuvent pas avoir plus de 10 colonnes (et s'ils en ont moins, doit-on alors entrer une largeur de colonne de 0 pour toutes celles qui n'existe pas ?), cela ne risque-t-il pas de créer des erreurs ? Etant donné que tu créer un fichier DCL temporaire, il pourrait être intéressant de créer une boîte de dialogue adapté au tableau que l'on souhaite modifier. :P Loin de moi l'idée de critiquer ce magnifique code, car je pense m'en inspirer fortement pour mes prochains développements !! ^^ Bravo à toi (et (gile) bien évidemment) :D
PHILPHIL Posté(e) le 7 octobre 2019 Auteur Posté(e) le 7 octobre 2019 hello le tableau doit etre existant 10 colonnes pour moi me paraissait deja pas mal, mais il suffit de modifier le lisp pour avoir plus de colonnes le lisp verifie le nombre de colonne dans les tableaux sélectionnés,et ne modifie pas au dela meme si tu rentres une largeur pour la colonne 5 alors que ton tableau n'a que 4 colonne il ne s'occupera pas de ce que tu as entré en colonne 5,6,7,8,9,10 dans la boite de dialogue, mais par contre sauvegardera les données pour plus tard Phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
markovkieffer Posté(e) le 8 février 2023 Posté(e) le 8 février 2023 Bonjour et tout d'abord merci pour ce lisp qui fonctionne parfaitement. Etant une bille en lisp, je voulais savoir si c'était facile d'en créer un concernant la mise en forme avec paramètres fixes d'un tableau issu d'un import depuis Excel ? Je m'explique : j'ai fréquemment besoin de copier/coller des tableaux depuis Excel vers AutoCAD, jusque là pas de problème (Coller > Collage spécial > Entités AutoCAD), mais une fois le ou les tableaux importés, j'ai de nombreuses manipulations manuelles pour le façonner à mes besoins (voir séquence ci-dessous), je n'ai pas réussi à trouver mon bonheur avec les styles de tableau. J'ajoute en pièces jointes un dwg contenant un tableau brut après collage spécial et un tableau avec mise en forme finale, j'ajoute également le fichier Excel depuis lequel j'ai copié les données, si quelqu'un a des pistes pour un noob comme moi en lisp, je suis preneur 🙂 La séquence manuelle que j'effectue pour mettre en forme mon tableau (l'ordre a son importance) : 1 - Sélection du tableau complet : Style de texte = Calibri Hauteur du texte = 2.5 Marge horizontale de la cellule = 1 Marge verticale de la cellule = 0 2 - Sélection de la colonne A : Type de données = Texte Alignement = Au milieu au centre Largeur de cellule = 15 3 - Sélection de la colonne B : Type de données = Nombre entier (message d'alerte à valider) Alignement = Au milieu au centre Largeur de cellule = 10 4 - Sélection de la colonne C : Type de données = Texte Alignement = Au milieu au centre Largeur de cellule = 34 5 - Sélection de la colonne D : Type de données = Texte Alignement = Au milieu à gauche Largeur de cellule = 160 5 - Sélection de la colonne E : Type de données = Texte Alignement = Au milieu à gauche Largeur de cellule = 110.11 6 - Sélection de la colonne F : Type de données = Texte Alignement = Au milieu à gauche Largeur de cellule = 53 7 - Sélection du tableau complet : Hauteur de cellule = 5 Cordialement. Exemple import tableau.dwg Exemple import tableau.xlsx
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