diff --git a/app/src/main/java/fr/ul/projet/AccesActivity.java b/app/src/main/java/fr/ul/projet/AccesActivity.java
index ac8664f29fc63248e825baabf36b35fd22cab574..204aece9c8483debfc0c80d37023005171777e7c 100644
--- a/app/src/main/java/fr/ul/projet/AccesActivity.java
+++ b/app/src/main/java/fr/ul/projet/AccesActivity.java
@@ -7,6 +7,7 @@ import android.graphics.BitmapFactory;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Environment;
+import android.os.SystemClock;
 import android.provider.MediaStore;
 import android.util.Log;
 import android.view.View;
@@ -42,6 +43,8 @@ public class AccesActivity extends AppCompatActivity {
     private Modele modele;
     private Piece piece;
     private String direction;
+    private String directionDest;
+    private int idDest;
     private Uri photo;
 
     private ActivityResultLauncher<Intent> launcher;
@@ -58,6 +61,9 @@ public class AccesActivity extends AppCompatActivity {
         this.piece = this.modele.getPieceCourante();
         this.photo = getIntent().getParcelableExtra("photo");
         this.direction = getIntent().getExtras().getString("direction");
+        this.directionDest = getIntent().getExtras().getString("directionDest");
+        this.idDest = getIntent().getExtras().getInt("pieceDest");
+
 
         TextView textView = findViewById(R.id.textView2);
         textView.setText(getString(R.string.acces, this.modele.getNom(), this.piece.getNom(), direction));
@@ -69,14 +75,14 @@ public class AccesActivity extends AppCompatActivity {
         Button ajouter = findViewById(R.id.boutonAcces);
 
         ajouter.setOnClickListener(v -> {
-            imageView.setDrawing();
+            imageView.setDrawing(this.idDest);
         });
 
 
         imageView.setOnRectangleClickListener(new DrawableImageView.OnRectangleClickListener() {
             @Override
             public void onRectangleClick(int rectangleId) {
-                Toast.makeText(AccesActivity.this, "Rectangle " + rectangleId + " cliqué", Toast.LENGTH_SHORT).show();
+                Toast.makeText(AccesActivity.this, "Accès à la pièce " + AccesActivity.this.modele.getPieces().get(rectangleId).getNom(), Toast.LENGTH_SHORT).show();
             }
         });
 
diff --git a/app/src/main/java/fr/ul/projet/DrawableImageView.java b/app/src/main/java/fr/ul/projet/DrawableImageView.java
index a7c9b65c30704cd5354d9137f534cbd0168f8b9e..f29ef99ca728194e5881bc40ecb04d5c8716225a 100644
--- a/app/src/main/java/fr/ul/projet/DrawableImageView.java
+++ b/app/src/main/java/fr/ul/projet/DrawableImageView.java
@@ -23,6 +23,8 @@ public class DrawableImageView extends AppCompatImageView {
     private boolean isDrawingFinished = false;
     private boolean fixed = false;
     private boolean drawing = false;
+    private int id;
+
     private OnRectangleClickListener listener;
 
     public DrawableImageView(Context context, AttributeSet attrs) {
@@ -108,7 +110,7 @@ public class DrawableImageView extends AppCompatImageView {
                             Math.min(startX, endX), Math.min(startY, endY),
                             Math.max(startX, endX), Math.max(startY, endY)
                     );
-                    rectangles.put(rectangles.size(), rect);
+                    rectangles.put(this.id, rect);
                     rectanglesTemp.clear();
                     fixed = true;
                     drawing=false;
@@ -120,8 +122,9 @@ public class DrawableImageView extends AppCompatImageView {
         return false;
     }
 
-    public  void setDrawing(){
+    public  void setDrawing(int idDest){
         drawing = true;
+        id = idDest;
     }
 
     public void setOnRectangleClickListener(OnRectangleClickListener listener) {
diff --git a/app/src/main/java/fr/ul/projet/PieceActivity.java b/app/src/main/java/fr/ul/projet/PieceActivity.java
index 0480477bc04180cfaac4a3bed5a1d7fc731ddb6e..19cb813a063d132bad11604cd1fb5ea4e1cb145a 100644
--- a/app/src/main/java/fr/ul/projet/PieceActivity.java
+++ b/app/src/main/java/fr/ul/projet/PieceActivity.java
@@ -28,6 +28,9 @@ import androidx.core.view.WindowInsetsCompat;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 
 import fr.ul.projet.modele.Modele;
 import fr.ul.projet.modele.Piece;
@@ -35,6 +38,7 @@ import fr.ul.projet.modele.Piece;
 public class PieceActivity extends AppCompatActivity {
 
     private Modele modele;
+    private Uri photo;
     private Piece piece;
     private ActivityResultLauncher<Intent> launcher;
     private String directionSelectionne;
@@ -106,7 +110,7 @@ public class PieceActivity extends AppCompatActivity {
 
         this.modele = getIntent().getParcelableExtra("modele");
         this.piece = this.modele.getPieceCourante();
-        Toast.makeText(this, "photo : "+this.piece.getPhotoNord(), Toast.LENGTH_LONG).show();
+
 
 
 
@@ -186,7 +190,7 @@ public class PieceActivity extends AppCompatActivity {
                     } else if (which == 1){
                         this.selectionnerPhoto();
                     } else if (which == 2){
-                        Uri photo=null;
+                        this.photo=null;
                         switch (directionSelectionne){
                             case "Nord":
                                 photo = this.piece.getPhotoNord();
@@ -204,19 +208,104 @@ public class PieceActivity extends AppCompatActivity {
 
                         if (photo != null){
 
-                            Intent intent = new Intent(PieceActivity.this, AccesActivity.class);
-                            intent.putExtra("modele", this.modele);
-                            intent.putExtra("photo", photo);
-                            intent.putExtra("direction", directionSelectionne);
-                            launcher.launch(intent);
+                            creationAcces();
+
+
                         }else{
-                            Toast.makeText(this, "Vous devez ajouter la photo avant d'ajouter un accés" + this.modele.getPieceCourante().getId(), Toast.LENGTH_LONG).show();
+                            Toast.makeText(this, "Vous devez ajouter la photo avant d'ajouter un accés", Toast.LENGTH_LONG).show();
                         }
                     }
         })
                 .show();
     }
 
+    private void creationAcces(){
+        if (this.modele.getPieces().size() == 1){
+            Toast.makeText(this, "Aucune pièce à accéder.", Toast.LENGTH_LONG).show();
+        }else{
+            List<String> piecesList = new ArrayList<>();
+            for (Map.Entry<Integer, Piece> entry : this.modele.getPieces().entrySet()){
+                if (!entry.getKey().equals(this.piece.getId())){
+                    piecesList.add(entry.getValue().getNom());
+                }
+            }
+
+            String[] piecesArray = piecesList.toArray(new String[0]);
+
+            AlertDialog.Builder builder = new AlertDialog.Builder(this);
+            builder.setTitle("Choisir une pièce de destination")
+                    .setItems(piecesArray, (dialog1, which1) -> {
+                        String selectedPiece = piecesArray[which1];
+
+                        String[] directions = {"Nord", "Sud", "Est", "Ouest"};
+                        AlertDialog.Builder builder2 = new AlertDialog.Builder(this);
+                        builder2.setTitle("Choisir une direction")
+                                .setItems(directions, (dialog2, which2) ->{
+                                    switch (directions[which2]){
+                                        case "Nord":
+                                            if (this.modele.getPieces().get(this.modele.getPieceByNom(selectedPiece)).getPhotoNord() != null){
+                                                Intent intent = new Intent(PieceActivity.this, AccesActivity.class);
+                                                intent.putExtra("modele", this.modele);
+                                                intent.putExtra("photo", PieceActivity.this.photo);
+                                                intent.putExtra("direction", directionSelectionne);
+                                                intent.putExtra("directionDest", directions[which2]);
+                                                intent.putExtra("pieceDest", this.modele.getPieceByNom(selectedPiece));
+                                                launcher.launch(intent);
+                                            }else{
+                                                Toast.makeText(PieceActivity.this, "Destination incorrecte. Ajouter une photo d'arrivée", Toast.LENGTH_LONG).show();
+                                            }
+                                            break;
+                                        case "Sud":
+                                            if (this.modele.getPieces().get(this.modele.getPieceByNom(selectedPiece)).getPhotoSud() != null){
+                                                Intent intent = new Intent(PieceActivity.this, AccesActivity.class);
+                                                intent.putExtra("modele", this.modele);
+                                                intent.putExtra("photo", PieceActivity.this.photo);
+                                                intent.putExtra("direction", directionSelectionne);
+                                                intent.putExtra("directionDest", directions[which2]);
+                                                intent.putExtra("pieceDest", this.modele.getPieceByNom(selectedPiece));
+                                                launcher.launch(intent);
+                                            }else{
+                                                Toast.makeText(PieceActivity.this, "Destination incorrecte. Ajouter une photo d'arrivée", Toast.LENGTH_LONG).show();
+                                            }
+                                            break;
+                                        case "Est":
+                                            if (this.modele.getPieces().get(this.modele.getPieceByNom(selectedPiece)).getPhotoEst() != null){
+                                                Intent intent = new Intent(PieceActivity.this, AccesActivity.class);
+                                                intent.putExtra("modele", this.modele);
+                                                intent.putExtra("photo", PieceActivity.this.photo);
+                                                intent.putExtra("direction", directionSelectionne);
+                                                intent.putExtra("directionDest", directions[which2]);
+                                                intent.putExtra("pieceDest", this.modele.getPieceByNom(selectedPiece));
+                                                launcher.launch(intent);
+                                            }else{
+                                                Toast.makeText(PieceActivity.this, "Destination incorrecte. Ajouter une photo d'arrivée", Toast.LENGTH_LONG).show();
+                                            }
+                                            break;
+                                        case "Ouest":
+                                            if (this.modele.getPieces().get(this.modele.getPieceByNom(selectedPiece)).getPhotoOuest() != null){
+                                                Intent intent = new Intent(PieceActivity.this, AccesActivity.class);
+                                                intent.putExtra("modele", this.modele);
+                                                intent.putExtra("photo", PieceActivity.this.photo);
+                                                intent.putExtra("direction", directionSelectionne);
+                                                intent.putExtra("directionDest", directions[which2]);
+                                                intent.putExtra("pieceDest", this.modele.getPieceByNom(selectedPiece));
+                                                launcher.launch(intent);
+                                            }else{
+                                                Toast.makeText(PieceActivity.this, "Destination incorrecte. Ajouter une photo d'arrivée", Toast.LENGTH_LONG).show();
+                                            }
+                                            break;
+                                    }
+
+
+                                });
+                        builder2.show();
+                    });
+            builder.show();
+        }
+
+
+    }
+
     private void prendrePhoto() {
         // Obtenir le dossier de stockage des images
         File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
diff --git a/app/src/main/java/fr/ul/projet/modele/Modele.java b/app/src/main/java/fr/ul/projet/modele/Modele.java
index 2105b3c918f58bd161b59b7742b383399983690e..66a01d8274363b0c1bbe1efa6ec6bbab5de93caf 100644
--- a/app/src/main/java/fr/ul/projet/modele/Modele.java
+++ b/app/src/main/java/fr/ul/projet/modele/Modele.java
@@ -74,21 +74,21 @@ public class Modele implements Parcelable{
         this.nom = in.readString();
         this.orientationCourante = in.readString();
         this.pieces = new HashMap<Integer, Piece>();
-        int size = in.readInt();
         this.pieceCourante = in.readParcelable(Piece.class.getClassLoader());
-        if (pieceCourante != null){
-            this.pieces.put(this.pieceCourante.getId(), this.pieceCourante);
+        if (pieceCourante != null && this.pieces.containsValue(this.pieceCourante)){
+            this.pieces.remove(this.pieceCourante.getId());
         }
-
+        int size = in.readInt();
         for (int i = 0; i < size; i++){
             int key = in.readInt();
-            if (key != this.pieceCourante.getId()){
-                Piece piece = in.readParcelable(Piece.class.getClassLoader());
-                this.pieces.put(key, piece);
-            }
-
+            Piece piece = in.readParcelable(Piece.class.getClassLoader());
+            this.pieces.put(key, piece);
+        }
+        if (pieceCourante != null){
+            this.pieces.put(this.pieceCourante.getId(), this.pieceCourante);
         }
 
+
     }
 
     /**
@@ -115,8 +115,12 @@ public class Modele implements Parcelable{
         dest.writeString(this.fichierJson);
         dest.writeString(this.nom);
         dest.writeString(this.orientationCourante);
-        dest.writeInt(this.pieces.size());
         dest.writeParcelable(this.pieceCourante, flags);
+        if (this.pieceCourante != null && this.pieces.containsValue(this.pieceCourante)){
+            this.pieces.remove(this.pieceCourante.getId());
+        }
+
+        dest.writeInt(this.pieces.size());
         for (Map.Entry<Integer, Piece> entry : this.pieces.entrySet()){
             dest.writeInt(entry.getKey());
             dest.writeParcelable(entry.getValue(), flags);
@@ -145,6 +149,15 @@ public class Modele implements Parcelable{
         return this.nom;
     }
 
+    public int getPieceByNom(String nom){
+        for (Piece p : this.pieces.values()){
+            if (p.getNom().equals(nom)){
+                return p.getId();
+            }
+        }
+        return -1;
+    }
+
     /**
      * Setter du nom du bâtiment
      * @param nom   Nom souhaité pour le bâtiment