The Pretoria side entered the clash needing only a bonus point to cement their place in the top eight in Pool A of the competition for a playoff spot, but this task proved too tough for them in cold and wet conditions in Lyon, where the hosts registered their first victory of the tournament.
Lyon dominated the first half, capitalising on their try-scoring opportunities effectively, while the Vodacom Bulls struggled to convert their chances into points, and this saw the hosts score three unanswered tries in the first stanza for an encouraging 24-0 lead.
The second half proved much tighter as both sides threw everything at one another but only managed to score one try apiece.
Lyon hooker Guillaume Marchand had the first say in the match as he scored a try in the fourth minute from a rolling maul, and minutes later flyhalf Leo Berdeu added a penalty goal to hand them a 10-0 lead.
The French club continued to dominate possession in the first quarter, and this paid off with further potential scoring opportunities, but the team was shut out by the Vodacom Bulls on at least two occasions.
The Pretoria outfit, in turn, created chances and came within striking range of the tryline on a few occasions, but errors at crucial times denied them from scoring points in the first half.
In stark contrast, Lyon continued to make their presence felt on attack and earned their second try in the 37th minute compliments of scrumhalf Jean-Marc Doussain who received the ball from a ruck and forced his way through the defence.
The Vodacom Bulls lost prop Simphiwe Matanzima to a yellow card shortly before halftime following repeated infringements by the team close to the tryline and this paved the way for Marchand to score his second try on the stroke of halftime from more powerful forward play, which saw the hosts take a handy 24-0 halftime lead.
The South Africans showed their intent from the outset in the second half as Springbok wing Kurt-Lee Arendse scored a runaway try two minutes after play resumed, and the successful conversion by flyhalf Johan Goosen pushed their score to seven points.
They worked their way close to the tryline again soon after with no success, while Lyon continued to stamp their authority on attack with Berdeu dashing through the defence to score their bonus-point try shortly before the last quarter for a 31-7 lead.
Both sides tried hard to add their scores before fulltime, but neither team was able to breach the defence, which saw Lyon seal the rewarding victory.
Lyon 31 (24) – Tries: Guillaume Marchand (2), Jean-Marc Doussain, Leo Berdeu. Conversions: Berdeu (3). Penalty goal: Berdeu.
Vodacom Bulls 7 (0) – Try: Kurt-Lee Arendse. Conversion: Johan Goosen.