Lyon beat Lille on penalties after a dramatic 2-2 draw at the Groupama Stadium on Tuesday to reach their sixth French League Cup final, setting up a possible clash with record eight-time winners Paris Saint-Germain.
Renato Sanches dragged what proved to be the last penalty of the shootout wide to send Lyon through.
This is the final season of the League Cup after the French league voted to suspend the competition from next term to ease fixture congestion.
Lille have never won the tournament, losing once in the final in 2016.
Lyon will bid to lift the trophy for the second time when they take on the winner of Wednesday’s second semi-final between Reims and PSG on April 4 at the Stade de France.
Portugal midfielder Sanches gave visitors Lille a 13th-minute lead with a low left-footed strike from outside the area to score his second goal for the club since joining from Bayern last August.
But the hosts were gifted a way back into the game four minutes later when centre-back Gabriel handled inside the area.
Moussa Dembele, who missed a penalty in the 4-3 French Cup win at Nantes on Saturday, drilled the spot-kick into the top corner to grab his sixth goal in five games.
Neither side created many chances either side of half-time, but Houssem Aouar appeared to have fired Lyon into the final with a fine long-range strike with five minutes remaining.
There was another twist in the tale, though, as, despite a lengthy delay for a VAR review, Lille were awarded an injury-time penalty for what appeared to be an excellent tackle by former Manchester United full-back Rafael on Jonathan Bamba.
Loic Remy, on as a 78th-minute substitute, stepped up with a cool ‘Panenka’ finish down the middle of the goal to force more spot-kicks.
But Ciprian Tatarusanu, playing in place of usual Lyon goalkeeper Anthony Lopes, saved Bamba’s opening penalty before Sanches’ miss sealed Lille’s fate.