diff --git a/src/main/java/fr/univlille/sae/classification/model/Iris.java b/src/main/java/fr/univlille/sae/classification/model/Iris.java
index f71fe890c7154f3d7fae2ecffbc335d13db71fe6..9912b9b26aa2ad38f89b82866575510a7f48d069 100644
--- a/src/main/java/fr/univlille/sae/classification/model/Iris.java
+++ b/src/main/java/fr/univlille/sae/classification/model/Iris.java
@@ -100,6 +100,14 @@ public class Iris extends LoadableData{
         return names;
     }
 
+    public String[] getTypesName() {
+          return new String[]{
+                "Setosa",
+                "Versicolor",
+                "Virginica"
+          };
+    }
+
     @Override
     public String toString() {
         return "Iris{" +
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/DataStageView.java b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
index 2cf2f84225f9101e4a4a766392047b18c07b11a4..47f21b628872b2ffc3f95e6ea068ed60131bbb4b 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,115 +25,126 @@ public class DataStageView extends DataVisualizationView implements Observer {
 
     private ClassificationModel model;
     private DataStageController controller;
-
     private Stage root;
+    private ScatterChart<Double, Double> scatterChart;
+    private String actualX, actualY;
 
     public DataStageView(ClassificationModel model) {
         this.model = model;
         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/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());
         }
     }