"Explode" object by ID

I wrote a little maxscript and it is the problem because it seems to not handle large objects polycount. (i'm a poor scripter too)

The idea :
- one object with many ids. I want to separate différents IDs to see them and texture them, or for animate ids positions.
- I copy this object
- I apply my script on this second object to move each Ids with a step
- select fist object and apply a morpher modifier with the created object as target.
- delete second object
- now I can move the Id with the morpher. cool

If somebody want to make it workable on large polycount objects...it would be nice :-)

oops : it would be great to detach to element per ID..
try destroyDialog rlMover catch()
global rlMover = rollout rlMover "MOVE IDs"
button butconnect "GO" pos:[2,2]
spinner spX "X " width:90 range:[-1000,1000,0] type:#float pos:[55,5]
spinner spY "Y " width:90 range:[-1000,1000,0] type:#float pos:[55,20]
spinner spZ "Z " width:90 range:[-1000,1000,0] type:#float pos:[55,35]
--spinner SPID"IDs " width:90 range:[2,50,2] type:#integer pos:[55,5]
on butconnect pressed do
ids = $.material.materialIDList
for id in ids do
$.selectbymaterial id
_faceSel = polyOp.getFaceSelection $
face_vertices = (polyOp.getVertsUsingFace $ _faceSel) as array
XX = spX.value * BO
YY = spY.value * BO
ZZ = spZ.value * BO
BO = BO + 1
for v in face_vertices do
vertex_position = (polyOp.getVert $ v)
polyOp.setVert $ v (vertex_position + [0 + XX ,0 + YY,0 + ZZ] )
createDialog rlMover 160 55