I get a recursive call when i try to activate another cell (grid.ActiveCell=...) from inside BeforeCellDeactivate event. Is this correct?
It makes sense, actually. BeforeCellDeactivate fires BEFORE the cell has been deactivated. By setting focus to another cell, you are causing the same cell (which is still active) to try to deactivate again.
This is very easy to get around. Use the EventManager to disable the BeforeCellDeactivate event while you are in it.