Lyon joined Bayern Munich, Arsenal, Lokomotiv Moscow, Monaco, Deportivo Coruna, Juventus and Real Sociedad in the last 16 from the teams that played on Wednesday.
Juve crowned their campaign and celebrated their already-secured place with a 7-0 trouncing of Olympiakos Piraeus -- the biggest win in Champions League history.
AS Monaco already knew their place was secure too so their 0-0 draw at AEK Athens had little bearing on their future.
There was drama almost everywhere but none more than at the Stade Gerland in Lyon where the fates of Lyon and Celtic turned throughout the match.
Then with just four minutes to play Juninho Pernambucano scored from a penalty awarded after Swiss referee Urs Meier ruled that Dianbobo Balde's raised arm brushed against the ball in the box -- but it was the faintest of touches.
With the score at 2-2 Celtic were through and Lyon out but the penalty changed that and put Lyon through instead.
Lyon had earlier led thanks to a Giovane Elber header which John Hartson cancelled out. Then Juninho's second for Lyon was cancelled out by a reply from Chris Sutton, until the final joy and heartbreak for the two teams.
While Lyon qualified with their win over Celtic, UEFA Cup runners-up last season, four-time European champions Bayern Munich also made it through to the knockout phase from the same group with a 1-0 win over Anderlecht.
Bayern, who began the night bottom of the group and topped the standings before Lyon's late winner, went through in second place thanks to a 42nd minute penalty from Dutchman Roy Makaay.
Lyon finished first with 10 points, Bayern second on nine, Celtic (7 points) finished third to take a UEFA Cup spot, while Anderlecht, who started the night second, were eliminated.
ARSENAL THROUGH
In Group B Arsenal got the perfect start against Lokomotiv Moscow at Highbury when Robert Pires scored with a well-taken near-post shot after only 12 minutes that left goalkeeper Sergei Ovchinnikov embarrassed for not covering his post properly.
That goal set Arsenal up for the victory confirmed with a second from Fredrik Ljungberg after 67 minutes.
But Lokomotiv Moscow, who had Jacob Lekgetho sent off after 45 minutes, also qualified because Dynamo Kiev scored a late equaliser against Inter Milan in the other match.
Daniele Adani scored for Inter after 69 minutes but Diogo Rincon's equaliser five minutes from time effectively knocked out Inter.
Arsenal, bottom after three matches, finished top on 10 points followed by Lokomotiv (8), who pipped Inter (8) on a better head-to-head record. Inter go into the UEFA Cup, which they last won in 1998, while Kiev go out.
Monaco were already sure of qualifying from Group C while Deportivo Coruna would accompany them as long as they avoided either a 2-0 defeat or a three-goal loss at PSV Eindhoven.
AEK's goalless draw with Monaco merely confirmed the French team as group winners but there was real drama in Eindhoven were PSV went 2-0 up through John De Long (14) and Arjen Robben (48), before Deportivo struck back with Albert Luque (58) and Walter Pandiani (83) scoring.
De Jong's second goal and PSV's third three minutes into stoppage time could not save the Dutch side, so Monaco and Deportivo qualify for the last 16, PSV go into the UEFA Cup while AEK are eliminated.
JUVE RECORD
Juventus, who were already assured of advancing from Group D, crushed Olympiakos Piraeus 7-0 in front of only 12,578 home fans who at least had a Champions League record victory to savour.
After a bright opening by the Greeks, who were chasing a UEFA Cup place, Juve totally dominated.
David Trezeguet scored twice in the first 25 minutes and other goals rained in from Fabrizio Miccoli (19), Enzo Maresca (28), Marco Di Vaio (62), Alessandro Del Piero (67) and Marcelo Zalayeta (79).
Real Sociedad clinched a place in the knockout phase with a nervy 1-1 home draw with Galatasaray who led after 26 minutes thanks to striker Hakan Sukur.
Real equalised through Oscar de Paula six minutes into the second half and weathered the storm to move into the next phase. Galatasaray go into the UEFA Cup, which they won in 2000 when they became the first Turkish side to win a European trophy.
Juventus finished clear at the top on 13 points, followed by Sociedad (9), Galatasaray (7) and Olympiakos (4).
Reigning European champions AC Milan, Manchester United, VfB Stuttgart, Real Madrid, Porto, Chelsea, Sparta Prague and Celta Vigo are the other eight teams into Friday's second phase draw after completing their opening group matches on Tuesday.
More from rediff