Sytuacja Rzymu stała się groźna, cześć sprzymierzeńców przeszła na stronę Hannibala (Samnici, Lukanowie, Brucjowie, Kapua i inne miasta kampańskie i greckie). Rzym, nie mogąc pokonać Hannibala, postanowił uderzyć w Hiszpanii i na Sycylii, gdzie Syrakuzy opowiedziały się po stronie Hannibala. W 212 p.n.e. armia dowodzona przez Marka Klaudiusza Marcellusa zdobyła Syrakuzy. W rękach rzymskich znalazła się cała Sycylia.
Również sytuacja w Hiszpanii zaczęła sprzyjać Rzymowi. W latach 218 i 217 p.n.e. bracia Scypionowie, Publiusz i Gnejusz, podjęli ofensywę i zdobyli Sagunt. Jednak w 211 p.n.e. zginęli, a ich dzieło kontynuował syn Publiusza, Publiusz Korneliusz Scypion Afrykański. Zdobył on w 209 p.n.e. Nową Kartaginę i pokonał pod Baeculą w 208 p.n.e. brata Hannibala – Hazdrubala. Do 206 p.n.e. cała południowa część Półwyspu Pirenejskiego została podbita przez Rzymian. Tymczasem Hazdrubal podążył przez Pireneje i Alpy na pomoc bratu, którego sytuacja znacznie się pogorszyła, gdy w 211 p.n.e. Rzymianie zdobyli jego główną bazę w Italii – Kapuę, a następnie zajęli całą Kampanię i Tarent (209 p.n.e.).