Thank you very much, I didn't describe clearly, see attach for my questions
For at least that first step, can't you have the HMI pointing to the DB, instead of having the HMI point to the M and then copy to the DB?
For the Indirect addessing part, if you define the DB as a big array, then you can set an index based on your conditional and do the block move based on DBName.ArrayName[IndexTag].
Symbolic programming is your friend, you want to get away from absolute addressing if at all possible within the PLC.