diff --git a/src/controleur.c b/src/controleur.c
index d4fe9d8fb22b57c9736899ababa2ccaa3fbf52bb..6e5b64e612c76e2ba013237e3c8f781e5d33ad7f 100644
--- a/src/controleur.c
+++ b/src/controleur.c
@@ -836,6 +836,53 @@ char * joueurVictorieux(){
     return getNomJoueur(getCurrentJoueur(getListJoueur(partieGlobale)));
 }
 
+  /*!
+ * \fn int lancerAttaque(int numDepart, int numCible)
+ * \brief La fonction lance un sort du Personnage numDepart vers le Personnage numCible (entier définis dans la SDL)
+ *
+ * \param des entiers vers les personnages départs et cible (définit par la SDL)
+ * \return 1 si l'attaque a été correctement lancée, 0 sinon.
+ */
+int lancerAttaque(int numDepart, int numCible, char * nomAttaque){
+    int indiceAttaque,i;
+    Personnage * dep=NULL;
+    Personnage * cible = NULL;
+    Joueur * actuel = getCurrentJoueur(getListJoueur(partieGlobale));
+    i=-1;
+
+    if((numDepart<=3)&&(numDepart>0)){
+        setOnFirstJoueur(getListJoueur(partieGlobale));
+        dep=getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),numDepart-1);
+    }
+    if((numDepart<=6)&&(numDepart>3)){
+        setOnFirstJoueur(getListJoueur(partieGlobale));
+        nextJoueur(getListJoueur(partieGlobale));
+        dep=getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),numDepart-4);
+    }
+
+    for(i=0;i<NB_ATTAQUES_MAX;i++){
+        if((strncmp(getNomAttaques(getClasse(dep),i),nomAttaque,TAILLE_NOMS))==0){
+           indiceAttaque=i;
+        }
+    }
+
+    if(indiceAttaque==-1){
+        return 0;
+    }
+
+    if((numCible<=3)&&(numCible>0)){
+        setOnFirstJoueur(getListJoueur(partieGlobale));
+        dep=getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),numCible-1);
+    }
+    if((numCible<=6)&&(numCible>3)){
+        setOnFirstJoueur(getListJoueur(partieGlobale));
+        nextJoueur(getListJoueur(partieGlobale));
+        dep=getPersonnage(getCurrentJoueur(getListJoueur(partieGlobale)),numCible-4);
+    }
+    setOnJoueur(getListJoueur(partieGlobale),actuel);
+    return lancerSort(getCarte(partieGlobale),dep,cible,indiceAttaque);
+}
+
 // Je met ici mes tests réalisés dans le main pour éviter de les réécrire si jamais il y a un problème.
 // Si vous voulez tester aussi, à recopier dans le main avant l'appel à initJeu().
 void testControlleurConsole(){
diff --git a/src/controleur.h b/src/controleur.h
index 68cd4765c1ac8d90253b381b088e56aacdf14fef..4e49350aac6a9067c86aebcb9c1a1d26fa0cc7b1 100644
--- a/src/controleur.h
+++ b/src/controleur.h
@@ -60,6 +60,8 @@ int finDuTour();
 void personnageSuivant();
 char * joueurVictorieux();
 
+int lancerAttaque(int numDepart, int numCible, char * nomAttaque);
+
 void testControlleurConsole();
 #endif // CONTROLEUR_H