Marko,
Your untested lisp works perfectly!
But what if I want to change all attributes except one?
(attsyncit (list '"UND" '"COD" '"CAD" '"TIP" '"PUN" '"LAR" '"COMP" '"OBS" '"QTDJ" '"NMCNJ" '"POS" '"FLRMT" '"DESC" '"PRF"))
(defun attsyncit( altmp / rbl a al n altmp s i bl )
(if (/=(setq rbl LastBlockOfMaterials)nil)
(progn
(setq a rbl)
(while (and (setq a (entnext a)) (= (cdr (assoc 0 (entget a))) "ATTRIB"))
(setq al (cons (list (cdr (assoc 2 (entget a))) (cdr (assoc 1 (entget a)))) al))
)
(if al
(progn
(setq n (apply 'max (mapcar 'strlen (mapcar 'car al))))
(setq al (vl-remove-if-not '(lambda ( x ) (vl-position (car x) altmp)) al))
(setq s (ssget "_X" (list '(0 . "INSERT") '(66 . 1) '(8 . "EM_IndPos") (assoc 2 (entget rbl)))))
(ssdel rbl s)
(repeat (setq i (sslength s))
(setq bl (ssname s (setq i (1- i))))
(setq a bl)
(while (= (cdr (assoc 0 (entget (setq a (entnext a))))) "ATTRIB")
(if (vl-position (cdr (assoc 2 (entget a))) (mapcar 'car al))
(entupd (cdr (assoc -1 (entmod (subst (cons 1 (cadr (assoc (cdr (assoc 2 (entget a))) al))) (assoc 1 (entget a)) (entget a))))))
)
)
)
)
)
)
)
(princ)
)