diff --git a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
index 1a690a0d60ea419913197b982e16a872a530bae8..ea7510eb725f6d9df947505259c4bba0f4c68d32 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
@@ -1,17 +1,16 @@
 package fr.univlille.sae.classification.controller;
 
 import fr.univlille.sae.classification.model.ClassificationModel;
-import fr.univlille.sae.classification.model.Iris;
-import fr.univlille.sae.classification.view.DataVisualizationView;
 import fr.univlille.sae.classification.view.MainStageView;
 import javafx.fxml.FXML;
 import javafx.scene.control.*;
 import javafx.stage.Stage;
 
 import java.io.IOException;
-import java.text.ParseException;
-import java.util.function.UnaryOperator;
 
+/**
+ * Controlleur pour le FXML add-data-stage, pour ajouter une nouvelle donnée
+ */
 public class AddDataController {
 
     @FXML
@@ -32,8 +31,14 @@ public class AddDataController {
     @FXML
     private Spinner<Double> petalWidthSpinner;
 
+    /**
+     * MainStageView associé au controlleur
+     */
     MainStageView mainStageView;
 
+    /**
+     * Méthode d'intitialisation du controlleur
+     */
     @FXML
     public void initialize() {
         sepalLengthSpinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0.0, 200.0, 3.0,0.1));
@@ -49,10 +54,17 @@ public class AddDataController {
 
     }
 
+    /**
+     * Méthode permettante d'attribuer la mainStageView associer à la classe
+     * @param mainStageView mainStageView à attribuer
+     */
     public void setMainStageView(MainStageView mainStageView) {
         this.mainStageView = mainStageView;
     }
 
+    /**
+     * Validation des données à ajouter
+     */
     public void validate() throws IOException {
         System.out.println("validé");
         mainStageView.getController().getClassifyData().setDisable(false);
diff --git a/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java b/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
index 16c52b1329fb9fd7842620cba9c2f817ef54300e..c04f311d882ce64c4894ffce206ef565a7c9fccd 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
@@ -7,7 +7,9 @@ import javafx.scene.control.Button;
 import javafx.scene.control.ChoiceBox;
 import javafx.stage.Stage;
 
-
+/**
+ * Controlleur pour le FXML axes-settings-stage, pour gérer les axes de la vue
+ */
 public class AxesSettingsController{
     @FXML
     Stage stage;
@@ -21,24 +23,42 @@ public class AxesSettingsController{
     @FXML
     Button confirmAxes;
 
+    /**
+     * DataVisualizationView associé au controlleur
+     */
     DataVisualizationView dataVisualizationView;
 
+    /**
+     * Ajout des éléments à sélectionner pour les ordonnées de la grille
+     * @param fields Éléments à ajouter
+     */
     public void setSelectOrd(String[] fields){
         selectOrd.getItems().clear();
         selectOrd.getItems().addAll(fields);
         selectOrd.setValue(dataVisualizationView.getActualY());
     }
 
+    /**
+     * Ajout des éléments à sélectionner pout les abscisses de la grille
+     * @param fields Éléments à ajouter
+     */
     public void setSelectAbs(String[] fields){
         selectAbs.getItems().clear();
         selectAbs.getItems().addAll(fields);
         selectAbs.setValue(dataVisualizationView.getActualX());
     }
 
+    /**
+     * Méthode permettante d'attribuer la dataVisualizationView associer à la classe
+     * @param dataVisualizationView dataVisualizationView à attribuer
+     */
     public void setdataVisualizationView(DataVisualizationView dataVisualizationView) {
         this.dataVisualizationView = dataVisualizationView;
     }
 
+    /**
+     * Validation des paramètres des axes
+     */
     public void validate(){
         dataVisualizationView.setActualX(selectAbs.getValue().toString());
         dataVisualizationView.setActualY(selectOrd.getValue().toString());
diff --git a/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java b/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java
index 2c561a9baeefbb69af581d0a69a7654c44783130..926b167a478fe71ead37aaab5e91df1e82e400f8 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java
@@ -11,23 +11,13 @@ import javafx.stage.Stage;
 
 import java.io.IOException;
 
-
+/**
+ * Controlleur pour le FXML data-view-stage, pour gérer la vue supplémentaire
+ */
 public class DataStageController {
     @FXML
     Stage stage;
 
-    @FXML
-    NumberAxis absAxe;
-
-    @FXML
-    NumberAxis ordAxe;
-
-    @FXML
-    Button settings;
-
-    @FXML
-    Button loadData;
-
     @FXML
     Button classifyData;
 
@@ -37,42 +27,47 @@ public class DataStageController {
     @FXML
     Label AxesSelected;
 
-    Stage loadStage;
+    /**
+     * DataStageView associé au controlleur
+     */
     private DataStageView dataStageView;
 
     /**
-     * Ouvre l'interface de chargement des données.
-     * @throws IOException
+     * Ouvrir les paramètres des axes de la vue
      */
-    public void openLoadData() throws IOException {
-        LoadDataView loadDataView = new LoadDataView(ClassificationModel.getClassificationModel(), stage);
-        loadDataView.show();
-    }
-
     public void openAxesSetting()throws IOException {
         AxesSettingsView axesSettingsView = new AxesSettingsView(ClassificationModel.getClassificationModel(), stage, dataStageView);
         axesSettingsView.show();
     }
 
+    /**
+     * Associe la dataStageView associer à la classe
+     * @param dataStageView
+     */
     public void setDataStageView (DataStageView dataStageView) {
         this.dataStageView = dataStageView;
     }
 
+
     public void classifyDatas() {
         ClassificationModel.getClassificationModel().classifierDonnees();
         classifyData.setDisable(true);
     }
 
-
+    /**
+     * Renvoie la grille associé à la classe
+     * @return grille de la classe
+     */
     public ScatterChart getScatterChart() {
         return this.scatterChart;
     }
 
+    /**
+     * Attribut une valeur à l'axe de la grille
+     * @param texte Valeur de l'axe
+     */
     public void setAxesSelected(String texte) {
         this.AxesSelected.setText(texte);
     }
 
-    public Button getClassifyData() {
-        return this.classifyData;
-    }
 }
diff --git a/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java b/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
index 902fb931d0938d3ec76ea2ca6fb11bb5cb92e7fd..8ca5ee8a174d784f074ca2af58dbd5f818469b30 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
@@ -27,11 +27,14 @@ public class LoadDataController {
     @FXML
     TextField filePath;
 
+    /**
+     * Fichier sélectionné
+     */
     File file;
 
-
-
-
+    /**
+     * Ouvre un explorateur de fichiers pour sélectionner le fichier à étudier
+     */
     public void openFileChooser() {
         FileChooser fileChooser = new FileChooser();
         fileChooser.setTitle("Choisissez le fichier à importer");
@@ -43,6 +46,9 @@ public class LoadDataController {
 
     }
 
+    /**
+     * Valide le fichier sélectionné au préalable
+     */
     public void validate() throws IOException {
 
         if (file == null) {
@@ -59,7 +65,4 @@ public class LoadDataController {
         ClassificationModel.getClassificationModel().loadData(file);
         stage.close();
     }
-
-
-
 }
diff --git a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
index bf8ab81524503f95f0e79d146a92a2da1545ab7d..4013b83d1e65bbc29004d92aee1c452da56409f0 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
@@ -49,55 +49,72 @@ public class MainStageController {
 
     /**
      * Ouvre l'interface de chargement des données.
-     * @throws IOException
      */
     public void openLoadData() throws IOException {
         LoadDataView loadDataView = new LoadDataView(ClassificationModel.getClassificationModel(), stage);
         loadDataView.show();
     }
 
+    /**
+     * Ouvre l'interface d'une nouvelle vue.
+     */
     public void openDataView() throws IOException {
         DataStageView dataStageView = new DataStageView(ClassificationModel.getClassificationModel());
         dataStageView.show();
     }
 
+    /**
+     * Ouvre l'interface de la configuration des axes.
+     */
     public void openAxesSetting()throws IOException {
         AxesSettingsView axesSettingsView = new AxesSettingsView(ClassificationModel.getClassificationModel(), stage, mainStageView);
         axesSettingsView.show();
     }
 
+    /**
+     * Associe la mainStageView associer à la classe
+     * @param mainStageView
+     */
     public void setMainStageView(MainStageView mainStageView) {
         this.mainStageView = mainStageView;
     }
 
     /**
      * Ouvre l'interface d'ajout de donnée.
-     * @throws IOException
      */
     public void openAddData() throws IOException {
-
         AddDataView addDataView = new AddDataView(ClassificationModel.getClassificationModel(), stage, mainStageView);
         addDataView.show();
-
-
     }
 
-
-
+    /**
+     * Appelle de la méthode de la classe ClassificationModel afin de classifier les nouvelles données
+     */
     public void classifyDatas() {
         ClassificationModel.getClassificationModel().classifierDonnees();
         classifyData.setDisable(true);
     }
 
-
+    /**
+     * Renvoie la grille associé à la classe
+     * @return grille de la classe
+     */
     public ScatterChart getScatterChart() {
         return this.scatterChart;
     }
 
+    /**
+     * Attribut une valeur à l'axe de la grille
+     * @param texte Valeur de l'axe
+     */
     public void setAxesSelected(String texte) {
         this.AxesSelected.setText(texte);
     }
 
+    /**
+     * Renvoie le bouton de classification de données
+     * @return Bouton de classification
+     */
     public Button getClassifyData() {
         return this.classifyData;
     }
diff --git a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
index 033890f3c275ee90712b4680729918fb665032ff..83c23f00cc9202da68c9fe9f12b9037f1f46c77b 100644
--- a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
+++ b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
@@ -1,14 +1,13 @@
 package fr.univlille.sae.classification.model;
 
+import javafx.scene.paint.Color;
+
 import java.util.Set;
 
 public abstract class LoadableData {
 
     private static Set<String> classificationTypes;
 
-
-
-
     protected LoadableData() {
 
     }
@@ -31,4 +30,8 @@ public abstract class LoadableData {
 
     public abstract String[] getAttributesName();
 
+    public abstract Color getColor();
+
+    public abstract double getDataType(String axes);
+
 }
diff --git a/src/main/java/fr/univlille/sae/classification/utils/ViewUtil.java b/src/main/java/fr/univlille/sae/classification/utils/ViewUtil.java
new file mode 100644
index 0000000000000000000000000000000000000000..79391022a6d6e0b028e6db6ed0c1dc0479aab920
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/utils/ViewUtil.java
@@ -0,0 +1,26 @@
+package fr.univlille.sae.classification.utils;
+
+import fr.univlille.sae.classification.model.LoadableData;
+import javafx.scene.control.ContextMenu;
+import javafx.scene.control.MenuItem;
+import javafx.scene.shape.Shape;
+import javafx.stage.Stage;
+
+public class ViewUtil {
+
+    public static Shape getForm(LoadableData iris, Shape form, Stage root) {
+        try {
+            form.setFill(iris.getColor());
+            form.setOnMouseClicked(e -> {
+                ContextMenu contextMenu = new ContextMenu();
+                for (String attributes : iris.getAttributesName()) {
+                    contextMenu.getItems().add(new MenuItem(attributes + " : " + iris.getDataType(attributes)));
+                }
+                contextMenu.show(root, e.getScreenX(), e.getScreenY());
+            });
+        } catch (Exception e) {
+            System.err.println("Erreur lors de la création de la forme : " + e.getMessage());
+        }
+        return form;
+    }
+}
diff --git a/src/main/java/fr/univlille/sae/classification/view/AddDataView.java b/src/main/java/fr/univlille/sae/classification/view/AddDataView.java
index e9c0b31232ef621ed3258982b7ee6d11d6b6cffc..a6a495f70fdcdc5425809aa766e6e26b9568c52c 100644
--- a/src/main/java/fr/univlille/sae/classification/view/AddDataView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/AddDataView.java
@@ -1,7 +1,6 @@
 package fr.univlille.sae.classification.view;
 
 import fr.univlille.sae.classification.controller.AddDataController;
-import fr.univlille.sae.classification.controller.AxesSettingsController;
 import fr.univlille.sae.classification.model.ClassificationModel;
 import javafx.fxml.FXMLLoader;
 import javafx.scene.control.Alert;
@@ -24,40 +23,46 @@ public class AddDataView {
         this.mainStageView = mainStageView;
     }
 
-    public void show() throws IOException {
-
+    public void show() {
         FXMLLoader loader = new FXMLLoader();
-        URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "add-data-stage.fxml").toURI().toURL();
+        URL fxmlFileUrl = null;
+
+        try {
+            fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "add-data-stage.fxml").toURI().toURL();
+        } catch (IOException e) {
+            System.out.println("Erreur lors de la création de l'URL du fichier FXML : " + e.getMessage());
+            return;
+        }
 
         if (fxmlFileUrl == null) {
             System.out.println("Impossible de charger le fichier fxml");
             System.exit(-1);
         }
-        loader.setLocation(fxmlFileUrl);
-        Stage root = loader.load();
-
-        AddDataController controller = loader.getController();
-
-        controller.setMainStageView(mainStageView);
 
+        loader.setLocation(fxmlFileUrl);
 
-        if(model.getDatas().isEmpty()) {
-            Alert alert = new Alert(Alert.AlertType.WARNING);
-            alert.setTitle("Erreur");
-            alert.setHeaderText(null);
-            alert.setContentText("Veuillez d'abord charger les données avant pouvoir ajouter un point");
-            alert.showAndWait();
-            return;
+        try {
+            Stage root = loader.load();
+            AddDataController controller = loader.getController();
+            controller.setMainStageView(mainStageView);
+
+            if (model.getDatas().isEmpty()) {
+                Alert alert = new Alert(Alert.AlertType.WARNING);
+                alert.setTitle("Erreur");
+                alert.setHeaderText(null);
+                alert.setContentText("Veuillez d'abord charger les données avant de pouvoir ajouter un point");
+                alert.showAndWait();
+                return;
+            }
+
+            root.setResizable(false);
+            root.initOwner(owner);
+            root.initModality(Modality.APPLICATION_MODAL);
+            root.setTitle("Ajout de donnée");
+
+            root.showAndWait();
+        } catch (IOException e) {
+            System.out.println("Erreur lors du chargement de la scène : " + e.getMessage());
         }
-
-
-        root.setResizable(false);
-        root.initOwner(owner);
-        root.initModality(Modality.APPLICATION_MODAL);
-        root.setTitle("Ajout de donnée");
-
-        root.showAndWait();
-
     }
-
 }
diff --git a/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java b/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java
index 2a1f23424e2d78a964eaae7a13df1d7b1f23802f..999e8176d6f3f4ce6690540134965633628646e1 100644
--- a/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java
@@ -1,8 +1,6 @@
 package fr.univlille.sae.classification.view;
 
 import fr.univlille.sae.classification.controller.AxesSettingsController;
-import fr.univlille.sae.classification.controller.DataStageController;
-import fr.univlille.sae.classification.controller.MainStageController;
 import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.model.LoadableData;
 import javafx.fxml.FXMLLoader;
@@ -10,60 +8,65 @@ import javafx.scene.control.Alert;
 import javafx.stage.Modality;
 import javafx.stage.Stage;
 
-import javax.xml.crypto.Data;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
 
 public class AxesSettingsView {
 
-
     private ClassificationModel model;
     private Stage owner;
     private DataVisualizationView dataVisualizationView;
 
-    public AxesSettingsView(ClassificationModel model, Stage owner, DataVisualizationView dataVisualizationView){
+    public AxesSettingsView(ClassificationModel model, Stage owner, DataVisualizationView dataVisualizationView) {
         this.model = model;
         this.owner = owner;
         this.dataVisualizationView = dataVisualizationView;
     }
 
-    public void show() throws IOException {
-
+    public void show() {
         FXMLLoader loader = new FXMLLoader();
-        URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "axes-settings-stage.fxml").toURI().toURL();
+        URL fxmlFileUrl = null;
+
+        try {
+            fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "axes-settings-stage.fxml").toURI().toURL();
+        } catch (IOException e) {
+            System.out.println("Erreur lors de la création de l'URL du fichier FXML : " + e.getMessage());
+            return;
+        }
 
         if (fxmlFileUrl == null) {
             System.out.println("Impossible de charger le fichier fxml");
             System.exit(-1);
         }
-        loader.setLocation(fxmlFileUrl);
-        Stage root = loader.load();
-
-        root.setResizable(false);
-        root.initOwner(owner);
-        root.initModality(Modality.APPLICATION_MODAL);
-        root.setTitle("Configuration des axes");
-        AxesSettingsController controller = loader.getController();
 
-        controller.setdataVisualizationView(dataVisualizationView);
+        loader.setLocation(fxmlFileUrl);
 
-        if(model.getDatas().isEmpty()) {
-            Alert alert = new Alert(Alert.AlertType.WARNING);
-            alert.setTitle("Erreur");
-            alert.setHeaderText(null);
-            alert.setContentText("Veuillez d'abord charger les données avant de modifier les parametres");
-            alert.showAndWait();
-            return;
+        try {
+            Stage root = loader.load();
+            root.setResizable(false);
+            root.initOwner(owner);
+            root.initModality(Modality.APPLICATION_MODAL);
+            root.setTitle("Configuration des axes");
+            AxesSettingsController controller = loader.getController();
+            controller.setdataVisualizationView(dataVisualizationView);
+
+            if (model.getDatas().isEmpty()) {
+                Alert alert = new Alert(Alert.AlertType.WARNING);
+                alert.setTitle("Erreur");
+                alert.setHeaderText(null);
+                alert.setContentText("Veuillez d'abord charger les données avant de modifier les paramètres");
+                alert.showAndWait();
+                return;
+            }
+
+            LoadableData dataType = model.getDatas().get(0);
+            controller.setSelectAbs(dataType.getAttributesName());
+            controller.setSelectOrd(dataType.getAttributesName());
+
+            root.showAndWait();
+        } catch (IOException e) {
+            System.out.println("Erreur lors du chargement de la scène : " + e.getMessage());
         }
-
-        LoadableData dataType = model.getDatas().get(0);
-
-
-        controller.setSelectAbs(dataType.getAttributesName());
-        controller.setSelectOrd(dataType.getAttributesName());
-
-        root.showAndWait();
-
     }
 }
diff --git a/src/main/java/fr/univlille/sae/classification/view/DataStageView.java b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
index 2cf2f84225f9101e4a4a766392047b18c07b11a4..57b5e6d351ad34b71bbc61145522ad2df340029f 100644
--- a/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
@@ -1,19 +1,18 @@
 package fr.univlille.sae.classification.view;
 
 import fr.univlille.sae.classification.controller.DataStageController;
-import fr.univlille.sae.classification.controller.MainStageController;
 import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.model.DataType;
 import fr.univlille.sae.classification.model.Iris;
 import fr.univlille.sae.classification.model.LoadableData;
 import fr.univlille.sae.classification.utils.Observable;
 import fr.univlille.sae.classification.utils.Observer;
+import fr.univlille.sae.classification.utils.ViewUtil;
 import javafx.fxml.FXMLLoader;
 import javafx.scene.chart.ScatterChart;
 import javafx.scene.chart.XYChart;
-import javafx.scene.control.ContextMenu;
-import javafx.scene.control.MenuItem;
 import javafx.scene.shape.Circle;
+import javafx.scene.shape.Rectangle;
 import javafx.stage.Stage;
 
 import java.io.File;
@@ -26,7 +25,6 @@ public class DataStageView extends DataVisualizationView implements Observer {
 
     private ClassificationModel model;
     private DataStageController controller;
-
     private Stage root;
 
     public DataStageView(ClassificationModel model) {
@@ -34,107 +32,117 @@ public class DataStageView extends DataVisualizationView implements Observer {
         model.attach(this);
     }
 
-    public void show() throws IOException {
+    public void show() {
         FXMLLoader loader = new FXMLLoader();
 
-        URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "data-view-stage.fxml").toURI().toURL();
+        try {
+            URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "data-view-stage.fxml").toURI().toURL();
 
-        if (fxmlFileUrl == null) {
-            System.out.println("Impossible de charger le fichier fxml");
-            System.exit(-1);
-        }
-        loader.setLocation(fxmlFileUrl);
-        root = loader.load();
-        root.setResizable(false);
-        root.setTitle("SAE3.3 - Logiciel de classification");
-        root.show();
-        loader.getController();
-        controller = loader.getController();
-        controller.setDataStageView(this);
-        scatterChart = controller.getScatterChart();
-        controller.setAxesSelected("Aucun fichier sélectionné");
-
-        if (!model.getDatas().isEmpty()) {
-            update(model);
+            if (fxmlFileUrl == null) {
+                System.out.println("Impossible de charger le fichier fxml");
+                System.exit(-1);
+            }
+            loader.setLocation(fxmlFileUrl);
+            root = loader.load();
+            root.setResizable(false);
+            root.setTitle("SAE3.3 - Logiciel de classification");
+            root.show();
+            controller = loader.getController();
+            controller.setDataStageView(this);
+            scatterChart = controller.getScatterChart();
+            controller.setAxesSelected("Aucun fichier sélectionné");
+
+            if (!model.getDatas().isEmpty()) {
+                update(model);
+            }
+        } catch (IOException e) {
+            System.err.println("Erreur lors du chargement du fichier FXML : " + e.getMessage());
         }
     }
 
     @Override
     public void update(Observable observable) {
-        if(scatterChart == null) throw new IllegalStateException();
-        if(!(observable instanceof ClassificationModel)) throw new IllegalStateException();
-        //on vide le nuage pour s'assurer que celui-ci est bien vide
-        scatterChart.getData().clear();
-
-        XYChart.Series series1 = new XYChart.Series();
-        series1.setName("Iris");
-
-        //Jalon 1: on verifie que le type de donnée est bien IRIS
-        if(model.getType() == DataType.IRIS) {
-            if(actualX==null && actualY==null){
-                controller.setAxesSelected("Aucuns axes sélectionnés");
+        try {
+            if (scatterChart == null || !(observable instanceof ClassificationModel)) {
+                System.err.println("Erreur de mise à jour.");
+                return;
             }
-            else{
-                controller.setAxesSelected("");
-                // On ajoute la serie au nuage
-                scatterChart.getData().add(series1);
-
-                //On recupere les données du model
-                List<LoadableData> points = new ArrayList<>(model.getDatas());
-                points.addAll(model.getDataToClass());
-                // on ajoute chaque point a la serie
-                for(LoadableData i : points) {
-
-                    Iris iris = (Iris)i;
-                    XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(iris.getDataType(actualX),
-                            iris.getDataType(actualY));
-
-                    dataPoint.setNode(getCircle(iris));
-
-                    series1.getData().add(dataPoint);
-
+            // On vide le nuage pour s'assurer qu'il est bien vide
+            scatterChart.getData().clear();
+
+            // Jalon 1: on vérifie que le type de donnée est bien IRIS
+            if (model.getType() == DataType.IRIS) {
+                XYChart.Series<Double, Double> series1 = new XYChart.Series<>();
+                XYChart.Series<Double, Double> series2 = new XYChart.Series<>();
+                XYChart.Series<Double, Double> series3 = new XYChart.Series<>();
+                if (actualX == null && actualY == null) {
+                    controller.setAxesSelected("Aucuns axes sélectionnés");
+                } else {
+                    controller.setAxesSelected("");
+                    // On récupère les données du modèle
+                    List<LoadableData> points = new ArrayList<>(model.getDatas());
+                    points.addAll(model.getDataToClass());
+                    // On ajoute chaque point à la série
+                    for (LoadableData i : points) {
+                        Iris iris = (Iris) i;
+                        XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(
+                                iris.getDataType(actualX),
+                                iris.getDataType(actualY)
+                        );
+
+                        dataPoint.setNode(ViewUtil.getForm(iris, new Circle(5), root));
+
+                        switch (iris.getClassification()) {
+                            case "Setosa":
+                                series1.getData().add(dataPoint);
+                                break;
+                            case "Versicolor":
+                                series2.getData().add(dataPoint);
+                                break;
+                            case "Virginica":
+                                series3.getData().add(dataPoint);
+                                break;
+                        }
+                    }
+
+                    series1.setName("Setosa");
+                    series2.setName("Versicolor");
+                    series3.setName("Virginica");
+
+                    scatterChart.getData().addAll(series1, series2, series3);
                 }
             }
+        } catch (Exception e) {
+            System.err.println("Erreur de mise à jour : " + e.getMessage());
         }
     }
 
-
-    private Circle getCircle(Iris iris) {
-        Circle circle = new Circle(5);
-        circle.setFill(iris.getColor());
-        circle.setOnMouseClicked(e -> {
-            ContextMenu contextMenu = new ContextMenu();
-            for(String attributes : iris.getAttributesName()) {
-                contextMenu.getItems().add(new MenuItem(attributes + " : " + iris.getDataType(attributes)));
-            }
-            contextMenu.show(root, e.getScreenX(), e.getScreenY());
-        });
-
-        return  circle;
-    }
-
-
-
     @Override
     public void update(Observable observable, Object data) {
-        if(scatterChart == null) throw new IllegalStateException();
-        if(!(observable instanceof ClassificationModel)) throw new IllegalStateException();
-        if(data instanceof Iris) {
-            Iris iris = (Iris) data;
-            if(actualX == null || actualY == null) {
-                controller.setAxesSelected("Aucuns axes sélectionnés");
+        try {
+            if (scatterChart == null || !(observable instanceof ClassificationModel)) {
+                System.err.println("Erreur de mise à jour.");
                 return;
             }
-            XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(
-                    iris.getDataType(actualX),
-                    iris.getDataType(actualY)
-            );
-
-            dataPoint.setNode(getCircle(iris));
-            if (!scatterChart.getData().isEmpty()) {
-                XYChart.Series series = (XYChart.Series) scatterChart.getData().get(0);
-                series.getData().add(dataPoint);
+            if (data instanceof Iris) {
+                Iris iris = (Iris) data;
+                if (actualX == null || actualY == null) {
+                    controller.setAxesSelected("Aucuns axes sélectionnés");
+                    return;
+                }
+                XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(
+                        iris.getDataType(actualX),
+                        iris.getDataType(actualY)
+                );
+
+                dataPoint.setNode(ViewUtil.getForm(iris, new Rectangle(10, 10), root));
+                if (!scatterChart.getData().isEmpty()) {
+                    XYChart.Series<Double, Double> series = (XYChart.Series<Double, Double>) scatterChart.getData().get(0);
+                    series.getData().add(dataPoint);
+                }
             }
+        } catch (Exception e) {
+            System.err.println("Erreur de mise à jour : " + e.getMessage());
         }
     }
 
diff --git a/src/main/java/fr/univlille/sae/classification/view/LoadDataView.java b/src/main/java/fr/univlille/sae/classification/view/LoadDataView.java
index 156ab380cbae143783efecbfa18969dc384dccd6..4ece4c3509f00d695926eac378c8754f9850959e 100644
--- a/src/main/java/fr/univlille/sae/classification/view/LoadDataView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/LoadDataView.java
@@ -19,27 +19,35 @@ public class LoadDataView {
         this.owner = owner;
     }
 
-
-
-    public void show() throws IOException {
-
+    public void show() {
         FXMLLoader loader = new FXMLLoader();
-        URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "load-data-stage.fxml").toURI().toURL();
+        URL fxmlFileUrl = null;
+
+        try {
+            fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "load-data-stage.fxml").toURI().toURL();
+        } catch (IOException e) {
+            System.out.println("Erreur lors de la création de l'URL du fichier FXML : " + e.getMessage());
+            return;
+        }
 
         if (fxmlFileUrl == null) {
             System.out.println("Impossible de charger le fichier fxml");
             System.exit(-1);
         }
+
         loader.setLocation(fxmlFileUrl);
-        Stage root = loader.load();
 
-        root.setResizable(false);
-        root.initOwner(owner);
-        root.initModality(Modality.APPLICATION_MODAL);
-        root.setTitle("Chargement des donées");
+        try {
+            Stage root = loader.load();
 
-        root.showAndWait();
+            root.setResizable(false);
+            root.initOwner(owner);
+            root.initModality(Modality.APPLICATION_MODAL);
+            root.setTitle("Chargement des données");
 
+            root.showAndWait();
+        } catch (IOException e) {
+            System.out.println("Erreur lors du chargement de la scène : " + e.getMessage());
+        }
     }
-
 }
diff --git a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
index 236f9307faae9a97fceebaac53c1df836d1a76c7..a429e235d6cc6f2e5cb3ca6926aa58f3959436e3 100644
--- a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
@@ -8,6 +8,7 @@ import fr.univlille.sae.classification.model.Iris;
 import fr.univlille.sae.classification.model.LoadableData;
 import fr.univlille.sae.classification.utils.Observable;
 import fr.univlille.sae.classification.utils.Observer;
+import fr.univlille.sae.classification.utils.ViewUtil;
 import javafx.application.Application;
 import javafx.fxml.FXML;
 import javafx.fxml.FXMLLoader;
@@ -39,115 +40,110 @@ public class MainStageView extends DataVisualizationView implements Observer {
     }
 
 
-    public void show() throws IOException {
+    public void show() {
         FXMLLoader loader = new FXMLLoader();
 
-        URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "main-stage.fxml").toURI().toURL();
+        try {
+            URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "main-stage.fxml").toURI().toURL();
 
-        if (fxmlFileUrl == null) {
-            System.out.println("Impossible de charger le fichier fxml");
-            System.exit(-1);
+            if (fxmlFileUrl == null) {
+                System.out.println("Impossible de charger le fichier fxml");
+                System.exit(-1);
+            }
+            loader.setLocation(fxmlFileUrl);
+            root = loader.load();
+            root.setResizable(false);
+            root.setTitle("SAE3.3 - Logiciel de classification");
+            root.show();
+            loader.getController();
+            controller = loader.getController();
+            controller.setMainStageView(this);
+            scatterChart = controller.getScatterChart();
+            controller.setAxesSelected("Aucun fichier sélectionné");
+
+        } catch (IOException e) {
+            System.err.println("Erreur lors du chargement du fichier FXML : " + e.getMessage());
         }
-        loader.setLocation(fxmlFileUrl);
-        root = loader.load();
-        root.setResizable(false);
-        root.setTitle("SAE3.3 - Logiciel de classification");
-        root.show();
-        loader.getController();
-        controller = loader.getController();
-        controller.setMainStageView(this);
-        scatterChart = controller.getScatterChart();
-        controller.setAxesSelected("Aucun fichier sélectionné");
 
     }
 
 
     @Override
     public void update(Observable observable) {
-        if(scatterChart == null) throw new IllegalStateException();
-        if(!(observable instanceof ClassificationModel)) throw new IllegalStateException();
-        scatterChart.getData().clear();
-
-        XYChart.Series series1 = new XYChart.Series();
-        XYChart.Series series2 = new XYChart.Series();
-        XYChart.Series series3 = new XYChart.Series();
-
-
-
-        //Jalon 1: on verifie que le type de donnée est bien IRIS
-        if(model.getType() == DataType.IRIS) {
-
-
-            if(actualX==null && actualY==null){
-                controller.setAxesSelected("Aucuns axes sélectionnés");
+        try {
+            if (scatterChart == null || !(observable instanceof ClassificationModel)) {
+                System.err.println("Erreur de mise à jour.");
+                return;
             }
-            else{
-                controller.setAxesSelected("");
-
-                List<LoadableData> points = new ArrayList<>(model.getDatas());
-                points.addAll(model.getDataToClass());
-                for(LoadableData i : points) {
-
-                    Iris iris = (Iris)i;
-                    XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(iris.getDataType(actualX),
-                            iris.getDataType(actualY));
-
-                    dataPoint.setNode(getForm(iris, new Circle(5)));
-
-                    if(iris.getClassification().equals("Setosa")){
-                        series1.getData().add(dataPoint);
-                    }else if(iris.getClassification().equals("Versicolor")){
-                        series2.getData().add(dataPoint);
-                    }else if(iris.getClassification().equals("Virginica")){
-                        series3.getData().add(dataPoint);
+            scatterChart.getData().clear();
+
+            //Jalon 1: on verifie que le type de donnée est bien IRIS
+            if (model.getType() == DataType.IRIS) {
+                XYChart.Series series1 = new XYChart.Series();
+                XYChart.Series series2 = new XYChart.Series();
+                XYChart.Series series3 = new XYChart.Series();
+                if (actualX == null && actualY == null) {
+                    controller.setAxesSelected("Aucuns axes sélectionnés");
+                } else {
+                    controller.setAxesSelected("");
+
+                    List<LoadableData> points = new ArrayList<>(model.getDatas());
+                    points.addAll(model.getDataToClass());
+                    for (LoadableData i : points) {
+
+                        Iris iris = (Iris) i;
+                        XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(iris.getDataType(actualX),
+                                iris.getDataType(actualY));
+
+                        dataPoint.setNode(ViewUtil.getForm(iris, new Circle(5), root));
+
+                        if (iris.getClassification().equals("Setosa")) {
+                            series1.getData().add(dataPoint);
+                        } else if (iris.getClassification().equals("Versicolor")) {
+                            series2.getData().add(dataPoint);
+                        } else if (iris.getClassification().equals("Virginica")) {
+                            series3.getData().add(dataPoint);
+                        }
                     }
 
-                }
-
-                series1.setName("Setosa");
-                series2.setName("Versicolor");
-                series3.setName("Virginica");
+                    series1.setName("Setosa");
+                    series2.setName("Versicolor");
+                    series3.setName("Virginica");
 
-                scatterChart.getData().addAll(series1, series2, series3);
+                    scatterChart.getData().addAll(series1, series2, series3);
+                }
             }
+        }catch (Exception e) {
+            System.err.println("Erreur de mise à jour : " + e.getMessage());
         }
     }
 
-    private Shape getForm(Iris iris, Shape form) {
-        form.setFill(iris.getColor());
-        form.setOnMouseClicked(e -> {
-            ContextMenu contextMenu = new ContextMenu();
-            for(String attributes : iris.getAttributesName()) {
-                contextMenu.getItems().add(new MenuItem(attributes + " : " + iris.getDataType(attributes)));
-            }
-            contextMenu.show(root, e.getScreenX(), e.getScreenY());
-        });
-
-        return form;
-    }
-
-
-
     @Override
     public void update(Observable observable, Object data) {
-        if(scatterChart == null) throw new IllegalStateException();
-        if(!(observable instanceof ClassificationModel)) throw new IllegalStateException();
-        if(data instanceof Iris) {
-            Iris iris = (Iris) data;
-            if(actualX == null || actualY == null) {
-                controller.setAxesSelected("Aucuns axes sélectionnés");
+        try {
+            if (scatterChart == null || !(observable instanceof ClassificationModel)) {
+                System.err.println("Erreur de mise à jour.");
                 return;
             }
-            XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(
-                    iris.getDataType(actualX),
-                    iris.getDataType(actualY)
-            );
-
-            dataPoint.setNode(getForm(iris, new Rectangle(10, 10)));
-            if (!scatterChart.getData().isEmpty()) {
-                XYChart.Series series = (XYChart.Series) scatterChart.getData().get(0);
-                series.getData().add(dataPoint);
+            if(data instanceof Iris) {
+                Iris iris = (Iris) data;
+                if(actualX == null || actualY == null) {
+                    controller.setAxesSelected("Aucuns axes sélectionnés");
+                    return;
+                }
+                XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(
+                        iris.getDataType(actualX),
+                        iris.getDataType(actualY)
+                );
+
+                dataPoint.setNode(ViewUtil.getForm(iris, new Rectangle(10, 10), root));
+                if (!scatterChart.getData().isEmpty()) {
+                    XYChart.Series series = (XYChart.Series) scatterChart.getData().get(0);
+                    series.getData().add(dataPoint);
+                }
             }
+        } catch (Exception e) {
+            System.err.println("Erreur de mise à jour : " + e.getMessage());
         }
     }