Thank you, i will give it a try. Could you tell me if i well integrated your routine into my code ?
(defun c:TagID (/ counter blkss)
(vl-load-com)
(defun CLEANROUTINE ()
(setq block_objs nil)
)
(defun sort_by_y (ss)
(vl-sort
(mapcar
(function
(lambda (ename)
(list ename (cdr (assoc '10 (entget ename))))
)
)
(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
)
(function (lambda (e0 e1) (< (cadadr e0) (cadadr e1))))
)
)
(setq counter 0)
(setq blkss (ssget '((0 . "INSERT")(66 . 1))))
(if blkss
(progn
(setq n (sslength blkss))
(setq block_objs '())
(repeat n
(setq blk (vlax-ename->vla-object (ssname blkss (setq n (1- n)))))
(setq blk_name (vla-get-effectiveName blk))
(setq block_objs (cons (cons blk blk_name) block_objs))
)
(setq sorted_blocks (sort_by_y blkss)) ; Sort blocks by Y-position
(setq prev_blk_name nil)
(foreach obj_blk sorted_blocks
(setq blk (car obj_blk))
(setq blk_name (cdr obj_blk))
(if (not (equal blk_name prev_blk_name))
(setq counter (1+ counter))
)
(foreach attr (vlax-invoke blk 'getattributes)
(if (= "ITEM" (strcase (vla-get-tagstring attr)))
(vla-put-textstring attr (if (< counter 10) (strcat "0" (itoa counter)) (itoa counter)))
)
)
(setq prev_blk_name blk_name)
)
)
)
(command "_updatefield" "")
(command "_regenall" "")
(princ)
)