Calgary trailed 2-0 after the first period but stormed back with four unanswered goals, two in the second period and two more in the third.
On the go ahead goal in the third, Jeff Friesen's shot from the wing was stopped by Roberto Luongo but the long rebound caromed right to Mark Giordano at the blue-line. His shot was deflected in front by Ritchie as the Flames centre was knocked to the ice.
It was the eighth goal of the season for Ritchie, who had been a healthy scratch Friday night in the Flames win against Columbus but got back into the line-up due to an injury to Stephane Yelle.
Kristian Huselius extended his scoring streak to 12 games (8 goals, 10 assists) with a goal at 16:39 and that would be the game-winner as Taylor Pyatt got Vancouver back within a goal at 18:10.
Daymond Langkow and Alex Tanguay also scored for Calgary (29-17-6), which has earned points in each of their last seven games (5-0-2).
The Flames also continued their domination at Pengrowth Saddledome, where over the three months they have gone 20-2-0.
Daniel Sedin, Henrik Sedin also scored for Vancouver (29-20-4). The Canucks suffered their second regulation loss since Christmas (12-2-3).
The Canucks and Flames entered the night tied atop for the lead in the Northwest with 62 points each. Vancouver now finds itself tied with Minnesota for second spot.
Down 2-0 after the first period, Calgary rallied back with two goals of its own in the second to tie it.
With Canucks Trevor Linden and Marc Chouinard penalized, Tanguay curled out front and sent a short pass to Langkow in the slot who one-timed a shot inside the far post.
Jarome Iginla picked up his second assist of the night at 13:00 when he carried the puck into the Canucks zone on a two-on-one, faked a shot drawing defenceman Mattias Ohlund to the ice, then slid the puck across to Tanguay who fired a perfect shot over Luongo into the top corner.
After killing off three penalties in the first 10 minutes, Vancouver jumped in front 1-0 at 13:18 when Henrik Sedin batted a rebound out of the air and past Kiprusoff.
It was another Kiprusoff rebound that led to the Canucks second goal four minutes later. Taylor Pyatt's slapshot was too hard for Kiprusoff to control and Daniel Sedin was right there at the side of the net to jam in his 20th of the season.
Sedin has five of his goals against the Flames and is the Canucks top point getter in the season series with 10 points.
Luongo was superb in the Canucks net all night, making 38 saves.
His best stop of the night came in the second period when Huselius got behind the Canucks defence and then made a nifty deke in-close only to have Luongo sprawl across and acrobatically get his glove on it just before the puck crossed the line.
Making his 13th straight start in a row, Kiprusoff finished with 26 saves.
Calgary lost defenceman Rhett Warrener to an undisclosed injury on the first shift of the game.
Notes: Calgary C Stephane Yelle did not play after being hobbled by a shot off his foot Friday night versus Columbus... Referee Mick McGeough worked his 1000th NHL game. The 49-year-old's NHL officiating career began in 1989... The Flames drop to 6-1-1 in the second game of back-to-back games... RW Eric Godard in the line-up, Calgary has yet to lose in regulation (8-0-2)... Calgary (22-0-0) is one of only two teams that are perfect when leading after two periods. The other is Carolina (18-0-0)... Calgary has a plus-35 goal differential when playing five-on-five while Vancouver is minus-13.