Aller au contenu

Création d'une légende d'un plan en Lisp...


JPhil

Messages recommandés

Bonjour,

 

Je reprends un ancien Lisp (08/2010) en le mettant au goût du jour avec la fonction tableau.

Le but étant de faire apparaître la quantité, le nom du bloc, le symbole et la désignation.

 

Voici donc le Lisp de base :

(defun c:LGD ()
(progn

(setq len_l_attr 0)

(setq lgd "LEGENDE")
(setq lgdq (getstring "Corps d'état de la légende (si rien 'LEGENDE') ? : "))
    (if (/= lgdq "")
     (setq lgd (strcat "LEGENDE" (strcase lgdq)))
    )
(setq lgdt (strcat "_LGD" lgdq ".txt"))
(setq source (strcase (strcat (getvar "DWGPREFIX") (getvar "dwgname") lgdt)))

(setq pt_plan (getpoint "\nPosition écriture paramètres plans (Coin haut gauche): "))

(setq htxt 2)

(setq lg_pt1 (polar pt_plan (* 0.5 pi) (* 1.65 htxt)))
(setq lg_pt3 lg_pt1)

(command "_text" pt_plan htxt 0 "Qté")
(command "_text" (polar pt_plan 0 (* 3 htxt)) htxt  0 "Symbole")
(command "_text" (polar pt_plan 0 (* 10 htxt)) htxt 0 "Nom Bloc")
(command "_text" (polar pt_plan 0 (* 20 htxt)) htxt 0 "Type d'Appareil")
(setq pt_plan (polar pt_plan (* 1.5 pi) (* 3.3 htxt)))



(setq f (open (strcat source) "W"))
 (setq a (tblnext "block" t))
 (while a
 (progn
 (setq Bl_Data (cdr (assoc -2 a)))
  (while Bl_Data
   (if (= (cdr (assoc 0 (entget Bl_Data))) "ATTDEF")
(if (= lgd (cdr (assoc 2 (entget Bl_Data))))
(progn
(setq bb (cdr (assoc 2 a)))
(setq l_Attr (cdr (assoc 1 (entget Bl_Data))))
(setq sel (ssget "x" (list (cons 2 bb))))
(setq nb 0)
(setq nb (itoa (sslength sel)))
(setq cc (strcat "Quantité : " nb " / Nom du Bloc : " bb " / Type d'Appareil : " l_attr))
(write-line cc f)

(totolgd)


(if (> (strlen l_attr) len_l_attr)
(setq len_l_attr (strlen l_attr))
)


)
)
)
(setq Bl_Data (entnext Bl_Data))
) ; fin de while
) ; fin de progn
(setq a (tblnext "block"))
) ; fin de while du début
(close f)

(setq lg_pt4 (polar lg_pt3 0 (+ (* (+ 3 len_l_attr) htxt) (* 10 htxt))))
(setq lg_pt3b (polar lg_pt3 pi (* 1.65 htxt)))
(setq lg_pt4b (polar lg_pt4 0 (* 1.65 htxt)))
(command "_line" lg_pt3b lg_pt4b "")
(command "_line" (polar lg_pt3b (* 1.5 pi) (* 3.0 htxt)) (polar lg_pt4b (* 1.5 pi) (* 3.0 htxt)) "")
(setq lg_pt1 (polar pt_plan (* 0.5 pi) (* 1.65 htxt)))
(setq lg_pt2 (polar lg_pt1 0 (+ (* (+ 3 len_l_attr) htxt) (* 10 htxt))))
(setq lg_pt1 (polar lg_pt1 pi (* 1.65 htxt)))
(setq lg_pt2 (polar lg_pt2 0 (* 1.65 htxt)))
(command "_line" lg_pt1 lg_pt2 "")
(command "_line" lg_pt1 lg_pt3b "")
(command "_line" lg_pt2 lg_pt4b "")


)
)



(defun totolgd ()

(command "_text" pt_plan htxt 0 nb)
;;; (command "-attdef" "" (strcat "NB" bb) bb nb pt_plan htxt 0)

(command "_text" (polar pt_plan 0 (* 10 htxt)) htxt 0 bb)
(command "_text" (polar pt_plan 0 (* 20 htxt)) htxt 0 l_attr)
(command "-inserer" bb (polar pt_plan 0 (* 6 htxt)) "5" "5" "0")
(setq pt_plan (polar pt_plan (* 1.5 pi) (* 2.9 htxt)))
)

 

Et le Lisp plus évolué que j'ai trouvé sur ce forum :

;; TABLDYNBLOC 

;; Crée un tableau qui liste les blocs sélectionnés 


(defun c:tabldynbloc (/ ss refs lst ele ins tbl row) 

 (vl-load-com) 

 (or *acad* (setq *acad* (vlax-get-acad-object))) 

 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) 

 (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*))) 

 (prompt "\nSélectionnez les blocs à lister ou ") 

 (or (setq ss (ssget '((0 . "INSERT")))) 

     (setq ss (ssget "_X" '((0 . "INSERT")))) 

 ) 

 (if ss 

   (progn 

     (vlax-for x (setq ss (vla-get-ActiveSelectionSet *acdoc*)) 

       (or (vlax-property-available-p x 'Path) 

           (setq refs 

               (cons 

                       (list 

                       (cons 

                       (vla-get-EffectiveName x) 

                       (gc:GetVisibilityState x) 

                       ) 

                       (vla-get-Name x) 

                       ) 

                       refs 

               ) 

           ) 

       ) 

     ) 

     (vla-delete ss) 

   ) 

 ) 

 (foreach n refs 

   (setq lst (if (setq ele (assoc (car n) lst)) 

               (subst (list (car ele) (cadr ele) (1+ (caddr ele))) ele lst) 

               (cons (list (car n) (cadr n) 1) lst) 

             ) 

   ) 

 ) 

 (initget 1) 

 (setq ins (trans (getpoint "\nPoint d'insertion: ") 1 0)) 

 (setq tbl (vla-addtable 

             (vla-get-modelspace 

               (vla-get-activedocument (vlax-get-acad-object)) 

             ) 

             (vlax-3d-point ins) 

             (+ 2 (length lst)) 

             4 

             20                        ; Hauteur cellule 

             80                        ; Largeur cellule 

           ) 

 ) 

 (vla-put-VertCellMargin tbl 4.0)      ; Marge verticale 

 (vla-put-TitleSuppressed tbl :vlax-false) 

 (vla-put-HeaderSuppressed tbl :vlax-false) 

 (vla-setText tbl 0 0 "Légende")         ; Titre 

 (vla-setText tbl 1 0 "Nom")           ; Titre colonne 1 

 (vla-setText tbl 1 1 "Nombre")        ; Titre colonne 2 

 (vla-setText tbl 1 2 "Symbole")       ; Titre colonne 3 

 (vla-setText tbl 1 3 "Désignation")       ; Titre colonne 4 

 (setq row 2) 

 (foreach b lst 

   (vla-SetText 

     tbl 

     row 

     0 

     (if (cdar B) 

       (strcat (caar B) " (" (cdar B) ")") 

       (caar B) 

     ) 

   ) 

   (vla-SetText tbl row 1 (caddr B)) 

   (vla-SetBlockTableRecordId tbl row 2 (vla-get-ObjectId (vla-Item *blocks* (cadr B))) :vlax-true) 

   (vla-SetText tbl row 3 "LEGENDE")

   (vla-setcellalignment tbl row 0 5) 

   (vla-setcellalignment tbl row 1 5) 

   (vla-setcellalignment tbl row 3 4) 

   (setq row (1+ row)) 

 ) 

 (princ) 

) 


;; gc:GetVisibilityState 

;; Retourne l'état de visibilité d'un bloc dynamique ou nil 


(defun gc:GetVisibilityState (blk / state) 

 (if (= (vla-get-IsDynamicblock blk) :vlax-true) 

   (foreach p (vlax-invoke blk 'GetDynamicBlockProperties) 

     (if (= (type (car (vlax-get p 'AllowedValues))) 'STR) 

       (setq state (vlax-get p 'Value)) 

     ) 

   ) 

 ) 

 state 

)

 

Je coince dessus (vla-SetText tbl row 3 "LEGENDE").

Je n'arrive pas à reproduire ce que j'avais fait dans l'ancien Lisp.

L'idée étant d'y mettre le contenu (texte) de l'attribut "LEGENDE" des blocs.

Sachant que tous les blocs n'ont pas nécessairement cet attribut, je souhaiterai qu'un point "." s'affiche dans ce cas là.

Sinon, pour le reste j'en suis plutôt content car plus souple que ce que j'avais en tête à ce moment là.

Mais là je donne ma langue au chat :(

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

Après une pause, je réponds en partie à moi-même.

 

Le code :

;; TABLDYNBLOC 
;; Crée un tableau qui liste les blocs sélectionnés 
(defun c:tabldynbloc (/ ss refs lst ele ins tbl row) 
 (vl-load-com) 
 (or *acad* (setq *acad* (vlax-get-acad-object))) 
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) 
 (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*))) 
 (prompt "\nSélectionnez les blocs à lister ou ") 
 (or (setq ss (ssget '((0 . "INSERT")))) 
     (setq ss (ssget "_X" '((0 . "INSERT")))) 
 ) 
 (if ss 
   (progn 
     (vlax-for x (setq ss (vla-get-ActiveSelectionSet *acdoc*)) 
       (or (vlax-property-available-p x 'Path) 
           (setq refs 
               (cons 
                       (list 
                       (cons 
                       (vla-get-EffectiveName x) 
                       (gc:GetVisibilityState x) 
                       ) 
                       (vla-get-Name x) 
                       ) 
                       refs 
               ) 
           ) 
       ) 
     ) 
     (vla-delete ss) 
   ) 
 ) 
 (foreach n refs 
   (setq lst (if (setq ele (assoc (car n) lst)) 
               (subst (list (car ele) (cadr ele) (1+ (caddr ele))) ele lst) 
               (cons (list (car n) (cadr n) 1) lst) 
             ) 
   ) 
 ) 
 (initget 1) 
 (setq ins (trans (getpoint "\nPoint d'insertion: ") 1 0)) 
 (setq tbl (vla-addtable 
             (vla-get-modelspace 
               (vla-get-activedocument (vlax-get-acad-object)) 
             ) 
             (vlax-3d-point ins) 
             (+ 2 (length lst)) 
             4 
             20                        ; Hauteur cellule 
             80                        ; Largeur cellule 
           ) 
 ) 
 (vla-put-VertCellMargin tbl 4.0)      ; Marge verticale 
 (vla-put-TitleSuppressed tbl :vlax-false) 
 (vla-put-HeaderSuppressed tbl :vlax-false) 
 (vla-setText tbl 0 0 "Légende")         ; Titre 
 (vla-setText tbl 1 0 "Nom")           ; Titre colonne 1 
 (vla-setText tbl 1 1 "Nombre")        ; Titre colonne 2 
 (vla-setText tbl 1 2 "Symbole")       ; Titre colonne 3 
 (vla-setText tbl 1 3 "Désignation")       ; Titre colonne 4 
 (setq row 2) 
 (foreach b lst 


  (setq tag "XXXXX")
  (if (= (cdr (assoc 0 (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" (caar B))))) '("*")))) "ATTDEF")
     (if (= (cdr (assoc 2 (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" (caar B))))) '("*")))) "LEGENDE")
        (setq tag (cdr (assoc 1 (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" (caar B))))) '("*")))))
     )
  )


   (vla-SetText 
     tbl 
     row 
     0 
     (if (cdar B) 
       (strcat (caar B) " (" (cdar B) ")") 
       (caar B) 
     ) 
   ) 
   (vla-SetText tbl row 1 (caddr B)) 
   (vla-SetBlockTableRecordId tbl row 2 (vla-get-ObjectId (vla-Item *blocks* (cadr B))) :vlax-true) 
   (vla-SetText tbl row 3 tag)
   (vla-setcellalignment tbl row 0 5) 
   (vla-setcellalignment tbl row 1 5) 
   (vla-setcellalignment tbl row 3 4) 
   (setq row (1+ row)) 
 ) 
 (princ) 
) 
;; gc:GetVisibilityState 
;; Retourne l'état de visibilité d'un bloc dynamique ou nil 
(defun gc:GetVisibilityState (blk / state) 
 (if (= (vla-get-IsDynamicblock blk) :vlax-true) 
   (foreach p (vlax-invoke blk 'GetDynamicBlockProperties) 
     (if (= (type (car (vlax-get p 'AllowedValues))) 'STR) 
       (setq state (vlax-get p 'Value)) 
     ) 
   ) 
 ) 
 state 
)

 

Le résultat est que pour certains blocs, le programme m'affiche bien la valeur de l'attribut "LEGENDE" et pour les autres "XXXXX".

"BLOCK" "L1-000" --- "XXXXX"
"BLOCK" "L1-MT12" --- "XXXXX"
"BLOCK" "L1-020G" --- "XXXXX"
"BLOCK" "L1-020D" --- "Extrémité aveugle coté droit Type L1-020D"
"BLOCK" "EBT-HP" --- "Haut Parleur montage en saillie"

 

Quand je tape ma commande pour en savoir plus voici le résultat :

Commande: (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" "L1-000")))) '("*"))
((-1 . <Nom d'entité: 3f5e4420>) (0 . "LINE") (330 . <Nom d'entité: 3f5e4400>) (5 . "27A") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbLine") (10 -0.515811 0.19 0.0) (11 -0.600839 0.19 0.0) (210 0.0 0.0 1.0))

Commande: (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" "L1-MT12")))) '("*"))
((-1 . <Nom d'entité: 3f5e4640>) (0 . "ARC") (330 . <Nom d'entité: 3f5e4610>) (5 . "29C") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbCircle") (10 0.3125 -0.04 0.0) (40 . 0.0193292) (210 0.0 0.0 1.0) (100 . "AcDbArc") (50 . 1.5708) (51 . 4.71239))

Commande: (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" "L1-020G")))) '("*"))
((-1 . <Nom d'entité: 52849f70>) (0 . "LINE") (330 . <Nom d'entité: 52849f60>) (5 . "629CF") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbLine") (10 -0.0495 -0.25 0.0) (11 -0.0495 0.25 0.0) (210 0.0 0.0 1.0))

Commande: (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" "L1-020D")))) '("*"))
((-1 . <Nom d'entité: 52bf0ea0>) (0 . "ATTDEF") (330 . <Nom d'entité: 52bf0e90>) (5 . "6285A") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbText") (10 -0.806469 -0.415743 0.0) (40 . 0.05) (1 . "Extrémité aveugle coté droit Type L1-020D") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "EE_SIMPLEX") (71 . 0) (72 . 1) (11 0.0375786 -0.415743 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "LEGENDE") (2 . "LEGENDE") (70 . 9) (73 . 0) (74 . 0) (280 . 0))

Commande: (entget (cdr (assoc -2 (entget (tblobjname "BLOCK" "EBT-HP")))) '("*"))
((-1 . <Nom d'entité: 52846d70>) (0 . "ATTDEF") (330 . <Nom d'entité: 52846d60>) (5 . "62A27") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbText") (10 -0.615655 -0.171816 0.0) (40 . 0.05) (1 . "Haut Parleur montage en saillie") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "EE_SIMPLEX") (71 . 0) (72 . 1) (11 -0.00136891 -0.171816 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "LEGENDE") (2 . "LEGENDE") (70 . 9) (73 . 0) (74 . 0) (280 . 0))

 

On voit que tous les blocs non pas la valeur "ATTDEF" alors qu'il y a bien un attribut "LEGENDE" dans chaque bloc avec sa valeur :

"BLOCK" "L1-000" --- "Luminaire type L1-000"
"BLOCK" "L1-MT12" --- "MODULE TECHNIQUE 6 DISJONCTEURS pour 12 appareils (9+3)"
"BLOCK" "L1-020G" --- "Extrémité aveugle coté gauche Type L1-020G"
"BLOCK" "L1-020D" --- "Extrémité aveugle coté droit Type L1-020D"
"BLOCK" "EBT-HP" --- "Haut Parleur montage en saillie"

 

Ce qui est étrange c'est qu'avec le lisp de 2010, avec plus ou moins la même commande j'arrive à avoir toutes les infos.

 

Une idée du pourquoi du comment ?

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Super de partager ...

 

Neanmoins je te propose une excellente routine de notre Grand Maitre Francais GILLES !!

 

Cette routine "ListBlock" genere un magnifique tableau quantitatif des Blocs AutoCAD ...

 

Elle n'a qu'un seul defaut (A mon gout) :

1 - Elle ne traite pas les Blocs inclus dans les Reseaux associatifs 2012-201X !

2 - Elle ne traite pas les INSERM de Blocs

http://help.autodesk.com/view/ACD/2016/FRA/?guid=GUID-A780A2FA-4A2E-4574-950F-E788AB71F527

Mais tres tres peu de gens utilisent INSERM ...

 

Si jamais GILLES passe "nous voir" et peut l'ameliorer !?

 

Bye, lecrabe (LSP tiree de mon stock de 2000 routines)

 


;; 
;; https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/lisp-table/m-p/7822698#M365879
;; 
;; Routine: ListBlock par GC
;; 
;; Table des Blocs : Nom , Nombre , Graphisme du Bloc
;; 
;; 
;; Voir aussi ce sujet par GC :
;; https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/block-in-table/m-p/7827274#M366031
;; 
;; To be clearer, you can set the text height by row type:
;; Only data rows (bit 1)
;; (vla-SetTextHeight table 1 height)
;; Only title row (bit 2)
;; (vla-SetTextHeight table 2 height)
;; Only header row (bit 4)
;; (vla-SetTextHeight table 1 height)
;; You can also combinate this, e.g. for the entire table (+ 1 2 4):
;; (vla-SetTextHeight table 7 height)
;; 

;;;;; 
;;;;;  Hauteur des Textes dans la Table = 5.0 ;;;;; 
;;;;;  (vla-SetTextHeight table 7 5.0)
;;;;; 


(defun c:ListBlock (/ ss name block blocks insPt table row)
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (or *blocks*
     (setq *blocks* (vla-get-Blocks *acdoc*))
 )

 ;; Select blocks
 (prompt "\nSelect blocks to list or <All>")
 (or (setq ss (ssget '((0 . "INSERT"))))
     (setq ss (ssget "_X" '((0 . "INSERT")))
     )
 )
 (if ss
   (progn

     ;; Build a list of dotted pairs (blockName . numberOfReferences) from the selection set
     (vlax-for	x (setq ss (vla-get-ActiveSelectionSet *acdoc*))
(if (not (vlax-property-available-p x 'Path))
  (setq	name   (vla-get-EffectiveName x)
	blocks (if (setq block (assoc name blocks))
		 (subst (cons name (1+ (cdr block))) block blocks)
		 (cons (cons name 1) blocks)
	       )
  )
)
     )
     (vla-delete ss)

     ;; Prompt for insertion point
     (initget 1)
     (setq insPt (trans (getpoint "\nInsertion point: ") 1 0))

     ;; Create the table
     (setq table (vla-addtable
	    (vla-get-modelspace *acdoc*)
	    (vlax-3d-point insPt)
	    (+ 2 (length blocks)) ; number of rows (including title and header)
	    3			; number of colums
	    20			; cell height
	    80			; row width
	  )
     )
     (vla-put-VertCellMargin table 4.0)
     (vla-put-TitleSuppressed table :vlax-false)
     (vla-put-HeaderSuppressed table :vlax-false)

     ;; Fill the titel and the header
;     (vla-setText table 0 0 "Blocks")
;     (vla-setText table 1 0 "Name")
;     (vla-setText table 1 1 "Count")
;     (vla-setText table 1 2 "Symbol") 

     ;; Textes version Francaise
     (vla-setText table 0 0 "Quantitatif des Blocs")
     (vla-setText table 1 0 "Nom")
     (vla-setText table 1 1 "Nombre")
     (vla-setText table 1 2 "Symbole") 

;;;;; Hauteur des Textes dans la Table = 5.0 ;;;;; 
(vla-SetTextHeight table 7 5.0)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

     ;; fill the following rows from the list contents
     (setq row 2)
     (foreach item blocks
(vla-settext table row 0 (car item)) ; block name
(vla-settext table row 1 (cdr item)) ; references count
(vla-SetBlockTableRecordId	; block symbol
  table
  row
  2
  (vla-get-ObjectId (vla-Item *blocks* (car item)))
  :vlax-true
)
(setq row (1+ row))
     )
   )
 )
 (princ)
)

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Merci lecrabe.

Je teste à l'occasion.

 

Par contre une idée du pourquoi ces blocs là (dans cet exemple) ne contiennent pas "ATTDEF" alors qu'il y a réellement un attribut (voir plus) dedans ?

"BLOCK" "L1-000" --- "LINE"
"BLOCK" "L1-MT12" --- "ARC"
"BLOCK" "L1-020G" --- "LINE"

 

Y'a peut-être une erreur dans le code puisque ça fonctionne avec le lisp de 2010 :unsure:

 

 

Si j'arrive un jour à franchir cette étape (qui pourra être utile même à mes collègues ARCHI), je pourrai passer à l'étape n°2 :)

Faire des calculs de puissance en fonction de la zone, du couloir, du niveau, du type d'appareils, de la source (permanent/délestable) .... pour Caneco d'ALPI.

Lien vers le commentaire
Partager sur d’autres sites

Je viens de trouver une solution pour les blocs qui passent avec le Lisp de 2010 et qui passent pas avec le Lisp de 2019 -> refaire le bloc :rolleyes:

 

Je suis partie d'un bloc avec l'attribut "LEGENDE" qui fonctionne, et j'ai refait le dessin, et là ça fonctionne sans problème :D

J'ai fait l'essai, juste avant, de copier l'attribut "LEGENDE" dans un bloc qui ne l'a pas, ben ça fonctionne pas <_<

 

 

Merci aux intervenants :)

 

Par contre pour des besoins plus pratique, je viens juste de renommer "TABLDYNBLOC" en "LGD".

J'aurais dû le faire plus tôt dans mes phases de test :P

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Super de partager ...

 

Neanmoins je te propose une excellente routine de notre Grand Maitre Francais GILLES !!

 

Cette routine "ListBlock" genere un magnifique tableau quantitatif des Blocs AutoCAD ...

 

Elle n'a qu'un seul defaut (A mon gout) :

1 - Elle ne traite pas les Blocs inclus dans les Reseaux associatifs 2012-201X !

2 - Elle ne traite pas les INSERM de Blocs

http://help.autodesk.com/view/ACD/2016/FRA/?guid=GUID-A780A2FA-4A2E-4574-950F-E788AB71F527

Mais tres tres peu de gens utilisent INSERM ...

 

Si jamais GILLES passe "nous voir" et peut l'ameliorer !?

 

Bye, lecrabe (LSP tiree de mon stock de 2000 routines)

 

[...]

Testé à l'instant.

Ressemble très fortement (au niveau résultat) à "TABLDYNBLOC".

Concernant les défauts que tu évoques, difficile de répondre quand on n'y est pas confronter :unsure:

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é