Ok I get it working perfectly now, it was because of a missing inotebutton, one that cover the whole zbrush size in pixel, so all items positions was relative to that first note item.
sadly the offset on h and V was exactly the pixel size of the floating menu, that made me confuse haha
.
The build_routines do not run at runtime, the loop is a top level command, so it create the routines at the startup.
Now i got some issue with the use of varload, when the variable has a different size.
the issue i got is that with the way i code things, the result of the varload is most of the time equal to 0 even if the zvr file got dozen of variables
So here is a script for testing purpose, it generate randomly a size for the varlist,
and after i generate another random value, so i can test when both aren’t the same size
in some case it should matches but when the second random value is greater than the previous one when i run the code, it will fail telling me taht the variable type is not correct.
the objective with that is with the subtool toolbar I 'd added.
it check and rechek all subtool to gather each subtool names, but i want something that can compare if the subtool list has changed or not, because to generate all subtool names, even with that process encapsulated into an [IFreeze], let show on the ui (the progress bar on top), that it switches from subtool to subtool.
so it take long time and the subtool toolbar do not show up as fast as i d liked it.
and is the reasonf why i want to generate a key code, i want it based on the subtoolcount,
and a random value, that i will store in a varsave (zvr).
so what is you opinion on that you might have other suggestion to make sure the menu show the very last version of the tool and his subtools.
[RoutineDef, saveVariable,
[VarDef, itemsList(items), ""]
// [VarSet, x, 0]
[Loop, items,
[VarSet, text, [StrMerge, "item-", n]]
[Note, text,,-1]
[VarSet, itemsList(n), text]
// [VarInc, x]
,n]
[Note,]
[VarSave, itemsList, path]
// [MemDelete, itemslist]
,path, items]
[RoutineDef, init,
[VarSet, items, INT(RAND(5)+1)]
[Note, [StrMerge, "random:: ", items,"\n"],,]
[RoutineCall, saveVariable, "data/varsave.zvr", items]
]
[IButton, "???", "Save variable array on disk",
[RoutineCall, init]
[VarSet, count, [Val,INT(RAND(5))+1]]// 0 crash ZBrush
[Note, [StrMerge, "random item count :: ", count,"\n"],,]
[VarDef, itemsList(count), ""]
[VarSet, check, [VarLoad, itemsList, "data/varsave.zvr",1]]
[VarSet, size, [VarSize, itemsList]]
[Note, itemList(0),,-1]
[Note, [StrMerge, "result::\Cff0000", check, "\n\Cffffff"],,-1]
[Note, [StrMerge, "varsize::\Cff0000", size, "\n\Cffffff"],,-1]
[If, count != size,
[FileDelete, "data/varsave.zvr"]
[Note, "values are different.."]
,//else
// then do something
[If, check == count,
[VarLoad, itemsList, "data/varsave.zvr"]
[Loop, count,
[Note, "List :\n",,-1]
[Note, [StrMerge, item >>, itemsList(n)],,-1]
,n]
[Note,]
,//else
[Note, "\Cffffffvalues are different.."]
]
// [Note, "do something",,-1]
]
]
Oh and a last one, hope i can complete everything without to ask for your help again and again 
so second question is abou tthe main Note interface frame, the thickness of the frame is too wide because of the blinking red light on the top left corner. IS there a way to reduce that gap ?
as the invisible button that exit the note interface, i d liked to have a value of 1 for hpos/vpos, but that do not work because of that icon, i tried to replace the note icon using the very last parameter, with a black 1px size icon, so i can turn its opactiy to zero, but unfortunately the gap is even bigger while I am trying to lessen it 
Nicolas