diff --git a/applicationQT2048/MenuPage.qml b/applicationQT2048/MenuPage.qml
index dd718bd73ca87aacbffc5a58035cd5389761f5ee..5f04abc10eb6dba3dc42f45346da96984b431d4d 100644
--- a/applicationQT2048/MenuPage.qml
+++ b/applicationQT2048/MenuPage.qml
@@ -71,6 +71,33 @@ Rectangle {
         }
     }
 
+    Rectangle {
+
+        width: 90; height: 30
+        anchors.horizontalCenter: parent.horizontalCenter
+        y:250
+        radius:5
+
+
+
+        MenuBar {
+               Menu {
+                   title: "Charger une ancienne partie"
+
+                   Repeater {
+                       model: gameManager.partieHistorique
+                       MenuItem {
+                           text: modelData
+                           background: Rectangle { color: "grey"; radius: 5 }
+                           onTriggered: gameManager.chargerPartie(modelData)
+                       }
+                   }
+               }
+           }
+
+
+    }
+
     Rectangle {
 
         color:"blue"
@@ -92,3 +119,6 @@ Rectangle {
         }
     }
 }
+
+
+
diff --git a/applicationQT2048/gamemanager.cpp b/applicationQT2048/gamemanager.cpp
index 7c2810f08192f46a859d34aaac20415273352a8f..ceaf2046f5415ee00485cb99320769a213f27bc9 100644
--- a/applicationQT2048/gamemanager.cpp
+++ b/applicationQT2048/gamemanager.cpp
@@ -1,5 +1,9 @@
 #include "gamemanager.h"
 #include "random"
+#include <QFileInfo>
+#include <QInputDialog>
+#include <QLineEdit>
+#include <QDebug>
 
 GameManager::GameManager(QObject *parent) : QObject(parent), grid(4, std::vector<int>(4, 0)) {
 
@@ -183,9 +187,19 @@ void GameManager::moveDown() {
 
 void GameManager::restartGame() {
 
-    //sauvergarder la partie précédente
+    //demander pour sauvergarder la partie précédente
+
+    bool ok;
+    QString nomPartie = QInputDialog::getText(nullptr, "Sauvegarde",
+                                              "Entrez le nom de la partie :",
+                                              QLineEdit::Normal, "", &ok);
+    if (ok && !nomPartie.isEmpty()) {
+        qDebug() << "Nom de la partie sauvegardée :" << nomPartie;
+        enregistrerPartie(nomPartie);  // Appelle la fonction de sauvegarde
+    } else {
+        qDebug() << "Saisie annulée ou vide.";
+    }
 
-    enregistrerPartie();
 
     // Réinitialisation des variables
     grid.assign(4, std::vector<int>(4, 0));
@@ -195,7 +209,7 @@ void GameManager::restartGame() {
     std::uniform_int_distribution<int> distrib(0, 15);
 
     int num1 = distrib(rd);
-    int num2 = distrib(rd);
+    int num2;
 
     // Assure que num2 est différent de num1
     do {
@@ -253,6 +267,33 @@ QVector<int> GameManager::getGridValues() const {
     return flattenedGrid;
 }
 
+QStringList GameManager::getPartieHistorique() {
+    QFile file("historique.json");
+
+    qDebug() << "Fichier JSON enregistré à : " << QFileInfo(file).absoluteFilePath();
+
+    if (!file.open(QIODevice::ReadWrite)) {
+        qWarning() << "Impossible d'ouvrir le fichier pour écriture :" << file.errorString();
+
+    }
+    QJsonDocument doc;
+    if (file.size() > 0) {  // Vérifier que le fichier n'est pas vide
+        doc = QJsonDocument::fromJson(file.readAll());
+    }else{  // Sinon initialiser avec un objet vide
+        doc = QJsonDocument(QJsonObject());
+    }
+
+
+    QJsonObject rootObj = doc.object();
+    QStringList list = rootObj.keys();
+
+    file.close();
+
+    qDebug() << "Liste des parties:" << list ;
+    return list;
+
+}
+
 QJsonArray GameManager::gridToJsonArray() {
     QJsonArray jsonGrid;
     for (const auto &row : grid) {
@@ -281,6 +322,69 @@ void GameManager::undo() {
     }
 }
 
-void GameManager::enregistrerPartie(){
+void GameManager::enregistrerPartie(QString partieName){
+    QFile file("historique.json");
+    qDebug() << "Fichier JSON enregistré à : " << QFileInfo(file).absoluteFilePath();
+    // Ouvrir le fichier en mode lecture/écriture (si existant)
+    if (!file.open(QIODevice::ReadWrite)) {
+        qWarning() << "Impossible d'ouvrir le fichier pour écriture :" << file.errorString();
+        return;
+    }
+
+
+    QJsonDocument doc;
+    if (file.size() > 0) {  // Vérifier que le fichier n'est pas vide
+        doc = QJsonDocument::fromJson(file.readAll());
+    }else{  // Sinon initialiser avec un objet vide
+        doc = QJsonDocument(QJsonObject());
+    }
+
+
+    QJsonObject rootObj = doc.object(); // Récupérer l'objet JSON racine
+    rootObj[partieName] = historyArray; // Ajouter ou remplacer la grille associée à l'ID
+
+    // Réécriture du fichier avec la nouvelle version
+    file.resize(0); // Effacer le contenu du fichier avant d'écrire la nouvelle version
+    file.write(QJsonDocument(rootObj).toJson());
+    file.close();
+
+    emit historiqueChanged();
+}
+
+void GameManager::chargerPartie(QString partieName){
+    QFile file("historique.json");
+
+
+    // Ouvrir le fichier en mode lecture/écriture (si existant)
+    if (!file.open(QIODevice::ReadWrite)) {
+        qWarning() << "Impossible d'ouvrir le fichier pour écriture :" << file.errorString();
+        return;
+    }
+
+
+    QJsonDocument doc;
+    if (file.size() > 0) {  // Vérifier que le fichier n'est pas vide
+        doc = QJsonDocument::fromJson(file.readAll());
+    }else{  // Sinon erreur
+        return;
+    }
 
+    QJsonObject rootObj = doc.object(); // Récupérer l'objet JSON racine
+    historyArray = rootObj[partieName].toArray();  // Charger la grille
+
+    QJsonArray previousState = historyArray.last().toArray();  // Récupérez le dernier état de la partie chargée
+
+    // Mettez à jour la grille
+    for (int i = 0; i < 4; ++i) {
+        for (int j = 0; j < 4; ++j) {
+            grid[i][j] = previousState[i].toArray()[j].toInt();
+        }
+    }
+
+    emit gridChanged();  // Notifiez que la grille a changé
+
+
+    file.close();
 }
+
+
diff --git a/applicationQT2048/gamemanager.h b/applicationQT2048/gamemanager.h
index ab6f00a40158bb54465c85bcd83d4bd720edcc02..445ffa2e3b7992049275727147459b1724eaa4af 100644
--- a/applicationQT2048/gamemanager.h
+++ b/applicationQT2048/gamemanager.h
@@ -15,6 +15,7 @@ class GameManager : public QObject
     Q_OBJECT
 
     Q_PROPERTY(QVector<int> gridValues READ getGridValues NOTIFY gridChanged)
+    Q_PROPERTY(QStringList partieHistorique READ getPartieHistorique NOTIFY historiqueChanged)
 
 public:
     explicit GameManager(QObject *parent = nullptr);
@@ -24,22 +25,25 @@ public:
     Q_INVOKABLE void moveDown();
     Q_INVOKABLE void restartGame();
     Q_INVOKABLE void undo();
-
+    Q_INVOKABLE void chargerPartie(QString partieName);
 
     QVector<int> getGridValues() const;
+    QStringList getPartieHistorique();
 
 private:
     std::vector<std::vector<int>> grid;
     QJsonArray historyArray;
 
     Q_INVOKABLE void addRandomElement();
-    Q_INVOKABLE void enregistrerPartie();
+    Q_INVOKABLE void enregistrerPartie(QString partieName);
+
     QJsonArray gridToJsonArray();
 
 
 
 signals:
     void gridChanged();
+    void historiqueChanged();
 
 
 };
diff --git a/applicationQT2048/historique.json b/applicationQT2048/historique.json
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391