He did okay captaincy in last WC though but India always reach in semis no matter who captaining the Indian side so i agree in limited over cricket he mess things up regularly. Only Rohit Sharma has capability of replacing him in the shorter format, Dhawan is big no as he can't even lead team in the franchise level.
I also believe that Rohit Sharma can be a good replacement. But then, Virat has captained the Indian team for such a long time. Critics may argue that it can have a negative impact on team bonding and morale (although Rohit has been a regular member of the squad for many years). And then there is always the concern that Rohit and Virat may form their own closed groups, just like the case we had when Dhoni was playing for India.