# Is it possible programatically evaluate one cell several times with distinct parameters?

I have an input cell wich I need to evaluate several times with distinct set of parameters. For sure, it is possible to convert the cell into a Module and run it in a cycle from another cell. Just for fun, I tried to find some other solution. Here is MWE example. It consists of two cells.

Clear[sets]
sets = 2;
Print["*** sets=", sets]
nb = EvaluationNotebook[]
runCell = NotebookLocate["RunCell2"]
FrontEndTokenExecute["EvaluateCells"]

sets = 4;
Print["*** sets=", sets]
(*nb=EvaluationNotebook[]*)
runCell = NotebookLocate["RunCell2"]
FrontEndTokenExecute["EvaluateCells"]


Main cell:

(* Run Cell *)
Clear[ab];
nb = EvaluationNotebook[]; cell =
EvaluationCell[]; cellTagOld =.; cellTag =.;
SetOptions[cell, CellTags -> {"RunCell"}, ShowCellTags -> True];
Print["sets=", sets];

Do[
cellTag = ToString@SessionTime[];
CellPrint[
TextCell[
ToString@
StringForm["Do cycle ", ToString[i] <> "/" <> ToString[sets]],
"Subsection", CellTags -> {cellTag}, ShowCellTags -> True,
CellDingbat -> "\[SmallCircle]"]];
Do[Print[ab[i, j]], {j, 4}];

NotebookLocate[cellTagOld];
Pause[5];
FrontEndTokenExecute["SelectionCloseAllGroups"];
cellTagOld = cellTag;
Pause[1]
, {i, sets}]


First cell tries to evaluate the second cell 2 times with parameter sets equal to 2 and 4. However, in fact the RunCell is evaluated twice with sets=4. Evidently, this is because Mathematica does not wait for the first evaluation FrontEndTokenExecute["EvaluateCells"] to finish and evaluates the first cell to the end. Can it be corrected somehow?