Accessible by departmental roads 6 and 27, Charmeil is located 5 kilometres (3.1 mi) northwest of Vichy, 3 kilometres (1.9 mi) south of Saint-Rémy-en-Rollat, 4 kilometres (2.5 mi) east of Vendat, and 4 kilometres (2.5 mi) north of Bellerive-sur-Allier.