diff --git a/src/deplacements.c b/src/deplacements.c
index 8e1fbe557aed07a84e8b7ac4a990d3e54feda51a..3b64b813bc90c5ac03c3083abd4d9e3b3d7de443 100644
--- a/src/deplacements.c
+++ b/src/deplacements.c
@@ -113,9 +113,10 @@ boolean deplacement_unitaire_possible(Case* depart,Case* destination){
 boolean deplacement_possible(Personnage* perso, Case* c, Carte_Jeu* carte){
     int pts_mvt = perso->points_deplacement;
     Case* depart=perso->position;
+    if(depart->coord_x>c->coord_x+pts_mvt||depart->coord_x<c->coord_x-pts_mvt||depart->coord_y>c->coord_y+pts_mvt||depart->coord_y<c->coord_y-pts_mvt) return faux;
     int x,y;
-    for(x=0;x<LARG_MAX_CARTE;x++){
-        for(y=0;y<HAUT_MAX_CARTE;y++){
+    for(x=depart->coord_x-pts_mvt;x<LARG_MAX_CARTE&&x<=depart->coord_x+pts_mvt;x++){
+        for(y=depart->coord_y-pts_mvt;y<HAUT_MAX_CARTE&&y<=depart->coord_y+pts_mvt;y++){
             if(deplacement_unitaire_possible(depart,&carte->Tab_Cases[x][y])==vrai){
                 if(deplacement_possible_recursif(&carte->Tab_Cases[x][y],c, carte,pts_mvt-carte->Tab_Cases[x][y].terrain->PD_requis)==vrai){
                     return vrai;
@@ -137,8 +138,8 @@ boolean deplacement_possible_recursif(Case* dep, Case* dest, Carte_Jeu* carte, i
     int x,y;
     if(dep==dest) return vrai;
     if(pts_restants<1) return faux;
-    for(x=0;x<LARG_MAX_CARTE;x++){
-            for(y=0;y<HAUT_MAX_CARTE;y++){
+    for(x=dep->coord_x-pts_restants;x<LARG_MAX_CARTE&&x<=dep->coord_x+pts_restants;x++){
+        for(y=dep->coord_y-pts_restants;y<HAUT_MAX_CARTE&&y<=dep->coord_y+pts_restants;y++){
                 if(deplacement_unitaire_possible(dep,&carte->Tab_Cases[x][y])==vrai){
                     if(deplacement_possible_recursif(&carte->Tab_Cases[x][y],dest, carte,pts_restants-carte->Tab_Cases[x][y].terrain->PD_requis)==vrai){
                         return vrai;