diff --git a/src/controleur.c b/src/controleur.c
index 836c81320979820d9632673bc1be7089668b94d0..454022d013be22403da74487a8fd7616b7b49d34 100644
--- a/src/controleur.c
+++ b/src/controleur.c
@@ -16,6 +16,7 @@
 #include "gamePackage.h"
 #include "roxml.h"
 #include "SDL.h"
+#include "structures.h"
 
 Partie * partieGlobale;
 Game_Package packGlobal;
@@ -196,17 +197,11 @@ char ** obtenirDescriptionCarte(){
  * \param les coordonnées x et y d'une case (pas en pixels mais bien en colonne et ligne), ainsi que la carte utilisée
  * \return un pointeur vers cette case
  */
-Case * trouverCase(Carte c, int x, int y)
-{
-    if((x<0)||(x>=LARGEUR_CARTE)){
-        return NULL;
-    }
-    else if((y<0)||(y>=HAUTEUR_CARTE)){
-        return NULL;
-    }
-    else{
-        return &c[(y*LARGEUR_CARTE)+x];
+Case * trouverCase(Carte_Jeu * c, int x, int y){
+    if((x>=0)&&(x<LARG_MAX_CARTE)&&(y>=0)&&(y<HAUT_MAX_CARTE)){
+       return &c->Tab_Cases[x][y];
     }
+    return NULL;
 }
 
   /*!
@@ -230,7 +225,7 @@ int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur){
     }
 
     //Création du personnage
-    Personnage * p = default_personnage(i,packGlobal,trouverCase(packGlobal.Cartes_Package[0],0,0));
+    Personnage * p = default_personnage(i,packGlobal);
 
     //Ajout du Personnage à l'équipe du Joueur
     switch (numJoueur){
@@ -253,14 +248,43 @@ int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur){
     else{
         return 0;
     }
-
-
-
 }
 
+  /*!
+ * \fn int selectionnerCarte(char * nomCarte)
+ * \brief La fonction ajoute la Carte dont le nom est en parrametre à la Partie.
+ *        Les Terrains de la Carte sont initialisé à partir des cartes décrites en XML
+ *        Les Personnages sont placés à leur position de départ sur la carte.
+ *
+ * \param Le nom de la Carte décrite en XML.
+ * \return 1 si la carte est correctement initialisée, 0 sinon.
+ */
+int selectionnerCarte(char * nomCarte){
+    int i;
+    i=0;
+    //Recherche de la Carte dans le Package
+    while((strcmp(nomCarte,packGlobal.Cartes_Package[i].nom)!=0)&&(i<nbCartes())){
+        i++;
+    }
+    if(i>=nbCartes()){
+        return 0;
+    }
+    //Initialisation de la Carte_Jeu
+    if(initCarte(&packGlobal.Cartes_Package[i],getCarte(partieGlobale),&packGlobal)==0){
+        return 0;
+    }
 
-
-
+    // Positionnement des Personnages sur la Carte_Jeu.
+    setOnFirstJoueur(partieGlobale->participants);
+    for(i=0;i<TAILLE_MAX_GROUPE;i++){
+        setPosition(getCurrentJoueur(partieGlobale->participants)->groupe[i],&partieGlobale->c->Tab_Cases[6+i][0]);
+    }
+    nextJoueur(partieGlobale->participants);
+    for(i=0;i<TAILLE_MAX_GROUPE;i++){
+        setPosition(getCurrentJoueur(partieGlobale->participants)->groupe[i],&partieGlobale->c->Tab_Cases[6+i][HAUT_MAX_CARTE-1]);
+    }
+    return 1;
+}
 
 
 
diff --git a/src/controleur.h b/src/controleur.h
index 8f29efe726a97bfbb99a519a062fad481cea7ecd..ab085f7f5dd99cc3ae61841aa7e5fa0735c63355 100644
--- a/src/controleur.h
+++ b/src/controleur.h
@@ -22,9 +22,11 @@ char ** obtenirNomsCartes();
 char ** obtenirDescriptionCarte();
 void freeCartes(char **);
 
-Case * trouverCase(Carte c, int x, int y);
+Case * trouverCase(Carte_Jeu * c, int x, int y);
 
-void ajouterPersonnage(char * nomClasse, int numTab, int numJoueur);
+int ajouterPersonnage(char * nomClasse, int numTab, int numJoueur);
+
+int selectionnerCarte(char * nomCarte);
 
 
 #endif // CONTROLEUR_H
diff --git a/src/controleurSDL.c b/src/controleurSDL.c
index 1a9a452ecd0d91c70d8a7a68297249098802142d..bd3cd92731e7aaeacea5fa492ad9e95e551daf73 100644
--- a/src/controleurSDL.c
+++ b/src/controleurSDL.c
@@ -9,6 +9,7 @@
 #include "deplacements.h"
 #include "SDL.h"
 #include "controleurSDL.h"
+#include "controleur.h"
 
 /*!
 * \file controleurSDL.c
@@ -34,7 +35,7 @@ void init_controleur(SDL_Rect Position_Case[])
        init_case(&Carte_actuelle[i],Position_Case[i].x,Position_Case[i].y,NULL);
      }
     for(i=0;i<NB_PERSO;i++)
-    set_personnage(&ListePersos[i],NULL,&Carte_actuelle[i]);
+    set_personnage(&ListePersos[i],NULL);
 }
 
 /*!
diff --git a/src/personnage.c b/src/personnage.c
index 914b4b6ed5fce24a26c518e733090de0d5ddbcb2..bf2e0c97c12078783214a56ee3099418e82a2521 100644
--- a/src/personnage.c
+++ b/src/personnage.c
@@ -36,7 +36,7 @@ Personnage* init_personnage()
  * \param Un personnage.
  * \return Un personnage initialisé.
  */
-Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart)
+Personnage* set_personnage(Personnage *perso, Classe *c)
 {
     perso->classe=c;
     if(c!=NULL){
@@ -44,8 +44,7 @@ Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart)
         perso->PV=c->PV_max;
         perso->mana=c->mana_max;
     }
-    perso->position=casedepart;
-    marquer_occupee(casedepart);
+    perso->position=NULL;
     return perso;
 }
 
@@ -56,10 +55,10 @@ Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart)
  * \param Le numéro de la défination du personnage dans le fichier XML, un game_package.
  * \return Un personnage pret a l'action.
  */
-Personnage* default_personnage(int numero, Game_Package Pack,Case *casedepart)
+Personnage* default_personnage(int numero, Game_Package Pack)
 {
     Personnage* Perso = init_personnage();
-    set_personnage(Perso, &Pack.Classes_Package[numero], casedepart);
+    set_personnage(Perso, &Pack.Classes_Package[numero]);
     return Perso;
 }
 
@@ -106,7 +105,7 @@ Classe * getClasse(Personnage *p){
 }
 
 /*!
- * \fn Classe * getPosition(Personnage *p)
+ * \fn Case * getPosition(Personnage *p)
  * \brief La fonction renvoie la position d'un personnage.
  *
  * \param Un personnage.
@@ -116,6 +115,17 @@ Case * getPosition(Personnage *p){
     return p->position;
 }
 
+/*!
+ * \fn void setPosition(Personnage *p)
+ * \brief La fonction initialise la position d'un personnage.
+ *
+ * \param Un personnage.
+ */
+void setPosition(Personnage * p, Case * c){
+    p->position=c;
+    marquer_occupee(c);
+}
+
 /*!
  * \fn Classe * get_PV(Personnage *p)
  * \brief La fonction renvoie les points de vie d'un personnage.
diff --git a/src/personnage.h b/src/personnage.h
index cbb2402f8e2d988635d92f830f23d781cf4da97b..66470a67639a3e5eea5f19e7a2addf9f44b6bd69 100644
--- a/src/personnage.h
+++ b/src/personnage.h
@@ -6,11 +6,11 @@
 #ifndef PERSONNAGE_H_INCLUDED
 #define PERSONNAGE_H_INCLUDED
 
-Personnage* set_personnage(Personnage *perso, Classe *c, Case *casedepart);
+Personnage* set_personnage(Personnage *perso, Classe *c);
 
 Personnage* init_personnage();
 
-Personnage* default_personnage(int numero, Game_Package Pack, Case *casedepart);
+Personnage* default_personnage(int numero, Game_Package Pack);
 
 void freePersonnage(Personnage * p);
 
@@ -18,6 +18,8 @@ void setNumero(Personnage * p, int n);
 
 int getNumero(Personnage * p);
 
+void setPosition(Personnage * p, Case * c);
+
 Case* getPosition(Personnage *p);
 
 int get_PV(Personnage *p);
@@ -32,7 +34,7 @@ char * getNomPersonnage(Personnage * p);
 
 boolean est_paralyse(Personnage *p);
 
-int deplacer_personnage (Personnage *perso, Case *destination);
+int deplacer_personnage(Personnage *perso, Case *destination);
 
 int estSurLaCase(Personnage * p, Case * c);