diff --git a/DevEfficace/rapport.md b/DevEfficace/rapport.md
index 57e2c8bb503e8153ea05fd21d650bed7563c12c6..88110653b61e7e6f0c763359c635fd4c21e7f0a6 100644
--- a/DevEfficace/rapport.md
+++ b/DevEfficace/rapport.md
@@ -120,7 +120,10 @@ On obtient donc un taux de reussiste plutôt élevé. A chaque fois l'algorithme
 | Distance Manhattan Normalisée | 0.178 | 0.188 | 0.2 | 0.215 | 0.205 | 0.203 | 0.194 | 0.190 | 0.184 | 0.180 | 0.190 | 7 |
 ---
 
-ajoyter un commentaire sur les resultats
+Le taux de reussiste est ici plus bas, cela s'explique notement par le nombre d'attribut different et la complexité a identifier le type d'un pokemon. 
+Cependant le taux de reussiste reste satisfaisant et stable.
+
+Classification par isLegendary
 
 ## Efficacité
 
diff --git a/res/stages/choose-attributes.fxml b/res/stages/choose-attributes.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..e16bafd0057ed87a9f7b09cfc503c9e7f610a4e7
--- /dev/null
+++ b/res/stages/choose-attributes.fxml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.Scene?>
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.ChoiceBox?>
+<?import javafx.scene.layout.AnchorPane?>
+<?import javafx.scene.layout.VBox?>
+<?import javafx.scene.text.Text?>
+<?import javafx.stage.Stage?>
+
+<Stage fx:id="stage" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.ChooseAttributesController">
+    <scene>
+        <Scene>
+            <AnchorPane prefHeight="175.0" prefWidth="317.0">
+            <children>
+               <VBox alignment="CENTER" prefHeight="200.0" prefWidth="315.0" spacing="30.0" stylesheets="@../css/style.css">
+                  <children>
+                     <Text strokeType="OUTSIDE" strokeWidth="0.0" text="Veuillez selectionner l'attribut sur lequel vous souhaitez classifier les données" textAlignment="CENTER" wrappingWidth="254.06924438476562" />
+                     <ChoiceBox fx:id="choice" prefWidth="150.0" stylesheets="@../css/style.css" />
+                     <Button mnemonicParsing="false" onAction="#validate" stylesheets="@../css/style.css" text="Valider" textFill="WHITE" />
+                  </children>
+               </VBox>
+            </children></AnchorPane>
+        </Scene>
+    </scene>
+</Stage>
diff --git a/res/stages/data-view-stage.fxml b/res/stages/data-view-stage.fxml
index 9f17a8fd5c75ee133bb950bbb475f88f00c6548f..d2658c4ebee924b06feb5eac100b804aa366305b 100644
--- a/res/stages/data-view-stage.fxml
+++ b/res/stages/data-view-stage.fxml
@@ -68,14 +68,14 @@
                                  </HBox>
                                  <VBox prefHeight="65.0" prefWidth="801.0">
                                     <children>
-                                       <HBox fx:id="legend" alignment="CENTER" prefHeight="58.0" prefWidth="762.0" spacing="10.0">
+                                       <VBox fx:id="legend" alignment="CENTER" prefHeight="58.0" prefWidth="762.0" spacing="10.0">
                                           <opaqueInsets>
                                              <Insets />
                                           </opaqueInsets>
                                           <padding>
                                              <Insets left="2.0" right="2.0" />
                                           </padding>
-                                       </HBox>
+                                       </VBox>
                                     </children>
                                  </VBox>
                               </children>
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 9a220bdf4e1c24f8db37dad2a63785c1c25873de..4d38f1f0d7b078b7a5511cae8186bc47f2b122cf 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
@@ -45,56 +45,61 @@ public class AddDataController {
         ClassificationModel model = ClassificationModel.getClassificationModel();
         if (!model.getDatas().isEmpty()) {
             Map<String, Object> attrMap = model.getDatas().get(0).getAttributesNames();
+            int classificationType = model.getDatas().get(0).getClassificationType();
             for (Map.Entry<String, Object> entry : attrMap.entrySet()) {
                 String attrName = entry.getKey();
                 Object attrValue = entry.getValue();
 
-                Label label = new Label(attrName);
-                HBox hbox = new HBox(10, label);
-                hbox.setAlignment(Pos.CENTER);
-                hbox.setSpacing(10);
-
-                if (attrValue instanceof Double) {
-                    Spinner<Double> doubleSpinner = new Spinner<>();
-                    doubleSpinner.setEditable(true);
-                    SpinnerValueFactory<Double> valueFactory =
-                            new SpinnerValueFactory.DoubleSpinnerValueFactory(
-                                    0.0,
-                                    9999,
-                                    0.0,
-                                    0.5
-                            );
-                    doubleSpinner.setValueFactory(valueFactory);
-                    hbox.getChildren().add(doubleSpinner);
-                    components.add(doubleSpinner);
-                }
-                else if (attrValue instanceof Integer) {
-                    Spinner<Integer> integerSpinner = new Spinner<>();
-                    integerSpinner.setEditable(true);
-                    SpinnerValueFactory<Integer> valueFactory =
-                            new SpinnerValueFactory.IntegerSpinnerValueFactory(
-                                    0,
-                                    Integer.MAX_VALUE,
-                                    0,
-                                    1
-                            );
-                    integerSpinner.setValueFactory(valueFactory);
-                    hbox.getChildren().add(integerSpinner);
-                    components.add(integerSpinner);
-                }
-                else if (attrValue instanceof String) {
-                    TextField textField = new TextField();
-                    hbox.getChildren().add(textField);
-                    components.add(textField);
-                }
-                else if (attrValue instanceof Boolean) {
-                    ChoiceBox<String> choiceBox = new ChoiceBox<>();
-                    choiceBox.getItems().addAll("VRAI", "FAUX");
-                    choiceBox.setValue("VRAI");
-                    hbox.getChildren().add(choiceBox);
-                    components.add(choiceBox);
+                if(!attrMap.keySet().toArray()[classificationType].equals(attrName))  {
+                    Label label = new Label(attrName);
+                    HBox hbox = new HBox(10, label);
+                    hbox.setAlignment(Pos.CENTER);
+                    hbox.setSpacing(10);
+
+                    if (attrValue instanceof Double) {
+                        Spinner<Double> doubleSpinner = new Spinner<>();
+                        doubleSpinner.setEditable(true);
+                        SpinnerValueFactory<Double> valueFactory =
+                                new SpinnerValueFactory.DoubleSpinnerValueFactory(
+                                        0.0,
+                                        9999,
+                                        0.0,
+                                        0.5
+                                );
+                        doubleSpinner.setValueFactory(valueFactory);
+                        hbox.getChildren().add(doubleSpinner);
+                        components.add(doubleSpinner);
+                    }
+                    else if (attrValue instanceof Integer) {
+                        Spinner<Integer> integerSpinner = new Spinner<>();
+                        integerSpinner.setEditable(true);
+                        SpinnerValueFactory<Integer> valueFactory =
+                                new SpinnerValueFactory.IntegerSpinnerValueFactory(
+                                        0,
+                                        Integer.MAX_VALUE,
+                                        0,
+                                        1
+                                );
+                        integerSpinner.setValueFactory(valueFactory);
+                        hbox.getChildren().add(integerSpinner);
+                        components.add(integerSpinner);
+                    }
+                    else if (attrValue instanceof String) {
+                        TextField textField = new TextField();
+                        hbox.getChildren().add(textField);
+                        components.add(textField);
+                    }
+                    else if (attrValue instanceof Boolean) {
+                        ChoiceBox<String> choiceBox = new ChoiceBox<>();
+                        choiceBox.getItems().addAll("VRAI", "FAUX");
+                        choiceBox.setValue("VRAI");
+                        hbox.getChildren().add(choiceBox);
+                        components.add(choiceBox);
+                    }
+                    entries.getChildren().add(hbox);
                 }
-                entries.getChildren().add(hbox);
+
+
             }
         }
     }
diff --git a/src/main/java/fr/univlille/sae/classification/controller/ChooseAttributesController.java b/src/main/java/fr/univlille/sae/classification/controller/ChooseAttributesController.java
new file mode 100644
index 0000000000000000000000000000000000000000..e2105ebd204cf13402dfde477a0559eaf75338e6
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/controller/ChooseAttributesController.java
@@ -0,0 +1,58 @@
+package fr.univlille.sae.classification.controller;
+
+import fr.univlille.sae.classification.model.ClassificationModel;
+import fr.univlille.sae.classification.model.LoadableData;
+import javafx.fxml.FXML;
+import javafx.scene.control.ChoiceBox;
+import javafx.stage.Stage;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class ChooseAttributesController {
+
+
+    @FXML
+    Stage stage;
+
+
+    @FXML
+    ChoiceBox<String> choice;
+
+
+    @FXML
+    public void initialize() {
+        LoadableData rdmData = ClassificationModel.getClassificationModel().getDatas().get(0);
+        choice.getItems().addAll(rdmData.getClassifiedAttributes().keySet());
+        String value = rdmData.getAttributesNames().keySet().toArray(new String[0])[rdmData.getClassificationType()];
+        if(!rdmData.getClassifiedAttributes().containsKey(value)) {
+            value = (String) rdmData.getClassifiedAttributes().keySet().toArray()[0];
+        }
+        choice.setValue(value);
+    }
+
+
+
+
+    public void validate() {
+        String selected = choice.getValue();
+        LoadableData rdmData = ClassificationModel.getClassificationModel().getDatas().get(0);
+
+        System.out.println(LoadableData.getClassifications());
+        List<String> temp = new ArrayList<>(rdmData.getAttributesNames().keySet());
+
+        System.out.println(selected);
+
+        System.out.println("Index: " + temp.indexOf(selected));
+        try {
+            rdmData.setClassificationType(temp.indexOf(selected));
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+        stage.close();
+    }
+
+}
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 4baf15fcc240ad98712f30d4d42a49855513be51..ae5fd924352c1d8b177d437fc8d33943ca710e0c 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/LoadDataController.java
@@ -4,6 +4,9 @@ import com.opencsv.exceptions.CsvException;
 import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
 import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.model.DataType;
+import fr.univlille.sae.classification.model.LoadableData;
+import fr.univlille.sae.classification.view.ChooseAttributesView;
+import fr.univlille.sae.classification.view.DataVisualizationView;
 import javafx.fxml.FXML;
 import javafx.scene.control.Alert;
 import javafx.scene.control.Button;
@@ -76,13 +79,20 @@ public class LoadDataController {
 
         ClassificationModel.getClassificationModel().setType(typeChoisi);
         try {
+            DataVisualizationView.resetAxis();
+            LoadableData.setClassificationTypeGlobal(-1);
             ClassificationModel.getClassificationModel().loadData(file);
+            ChooseAttributesView chooseAttributesView = new ChooseAttributesView(ClassificationModel.getClassificationModel(), (Stage) stage.getOwner());
+            chooseAttributesView.show();
         }catch (RuntimeException | CsvRequiredFieldEmptyException e) {
             Alert alert = new Alert(Alert.AlertType.ERROR);
             alert.initOwner(stage);
             alert.setHeaderText(e.toString());
             alert.setContentText("Le chargement du fichier à echoué, veuillez reessayer !");
             alert.showAndWait();
+            e.printStackTrace();
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
         }
         stage.close();
     }
diff --git a/src/main/java/fr/univlille/sae/classification/knn/MethodKNN.java b/src/main/java/fr/univlille/sae/classification/knn/MethodKNN.java
index 686303ccf2d4e88c048c40d37c40ebe7719370b4..c27e2df513ced5ab0a53559accbdfc9317c5b0e5 100644
--- a/src/main/java/fr/univlille/sae/classification/knn/MethodKNN.java
+++ b/src/main/java/fr/univlille/sae/classification/knn/MethodKNN.java
@@ -51,15 +51,6 @@ public class MethodKNN {
         }
     }
 
-    /**
-     * Permet de recuperer les K-voisins les plus proches d'une données dans un jeu de données
-     * en fonction d'une Distance.
-     * @param datas Le jeu de données
-     * @param data  La donnée avec laquelle calculer la distance
-     * @param k     Le nombre de voisins a recupérer
-     * @param distance
-     * @return
-     */
     public static List<LoadableData> kVoisins(List<LoadableData> datas, LoadableData data, int k, Distance distance) {
 
         // On recupere toutes les données
@@ -77,7 +68,7 @@ public class MethodKNN {
 
 
 
-    public static String estimateClass(List<LoadableData> datas, LoadableData data, int k, Distance distance) {
+    public static String estimateClass(List<LoadableData> datas, LoadableData data, int k, Distance distance) throws IllegalAccessException {
 
         // On recupere les K voisions  de data.
         List<LoadableData> kVoisins = MethodKNN.kVoisins(datas, data, k, distance);
@@ -105,7 +96,7 @@ public class MethodKNN {
     }
 
 
-    public static int bestK(List<LoadableData> datas, Distance distance) {
+    public static int bestK(List<LoadableData> datas, Distance distance) throws IllegalAccessException {
         // On borne le K pour eviter de trouver un K trop grand
         int maxK = (int) (Math.sqrt(datas.size()));
         System.out.println("Max k: " + maxK);
@@ -128,7 +119,7 @@ public class MethodKNN {
     }
 
 
-    public static double robustesse(List<LoadableData> datas, int k, Distance distance, double testPart) {
+    public static double robustesse(List<LoadableData> datas, int k, Distance distance, double testPart) throws IllegalAccessException {
 
 
 
@@ -167,7 +158,7 @@ public class MethodKNN {
         return taux/(1/testPart);
     }
 
-    public static void main(String[] args) throws CsvRequiredFieldEmptyException {
+    public static void main(String[] args) throws CsvRequiredFieldEmptyException, IllegalAccessException {
 
         //Test de la robustesse et du meillleur K
 
diff --git a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
index 403e01cbbfdc0b1b94d65de4ec9196c80d43878a..b2ecdbe8af0eb18f87da05049189dc42205bd4c0 100644
--- a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
+++ b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
@@ -90,17 +90,16 @@ public class ClassificationModel extends Observable {
                     .withType(type.getClazz())
                     .build().parse();
 
-            Set<String> types = new HashSet<>();
-            for (LoadableData d : datas) {
-                types.add(d.getClassification());
-            }
 
             Collections.shuffle(datas);
 
-            LoadableData.setClassificationTypes(types);
+
+            LoadableData.setClassificationTypes(getDatas());
             notifyObservers();
         } catch (IOException e) {
             System.err.println("Erreur lors du chargement des données : " + e.getMessage());
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
         }
     }
 
@@ -121,7 +120,11 @@ public class ClassificationModel extends Observable {
     public void classifierDonnee(LoadableData data) {
         if(dataToClass.get(data) != null && dataToClass.get(data)) return;
         this.dataToClass.remove(data);
-        data.setClassification(MethodKNN.estimateClass(datas, data, k, distance));
+        try {
+            data.setClassification(MethodKNN.estimateClass(datas, data, k, distance));
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
         notifyObservers(data);
         dataToClass.put(data, true);
     }
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 49ff5b8834288e96cd703e23baa887be1fcc92d7..c11c919a93a5947c10afcdf1da6e132ef50603f6 100644
--- a/src/main/java/fr/univlille/sae/classification/model/Iris.java
+++ b/src/main/java/fr/univlille/sae/classification/model/Iris.java
@@ -34,6 +34,7 @@ public class Iris extends LoadableData {
      */
     public Iris(double sepalLength, double sepalWidth, double petalLength, double petalWidth, String variety) {
         super();
+        classificationType = 4;
         this.sepalWidth = sepalWidth;
         this.sepalLength = sepalLength;
         this.petalWidth = petalWidth;
@@ -56,25 +57,62 @@ public class Iris extends LoadableData {
      * Constructeur par défaut.
      */
     public Iris() {
-        //
+        classificationType = 4;
     }
 
     /**
-     * Renvoie la classification (variété) de l'Iris.
-     * @return variété de l'Iris.
+     * Renvoie la classification de l'objet.
+     *
+     * @return classification sous forme de chaîne.
      */
     @Override
-    public String getClassification() {
-        return variety;
+    public String getClassification() throws IllegalAccessException {
+        return (String) this.getClass().getDeclaredFields()[classificationType].get(this).toString();
+    }
+
+    /**
+     * Permet de modifier l'attribut sur lequelle ont souhaite classifier
+     * Ne sont valable que les attributs present dans getClassificationAttributes()
+     *
+     * Le numéro de l'attribut correspond a sa place dans la liste de tous le attributs.
+     * @param classificationType
+     */
+    @Override
+    public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
+        if(classificationType < 0 || classificationType > getAttributesNames().size()) throw new IllegalArgumentException("Cette attribut n'existe pas");
+        String keyToVerify = getAttributesNames().keySet().toArray(new String[0])[classificationType];
+        if(!getClassifiedAttributes().containsKey(keyToVerify)) throw new IllegalArgumentException("Cette attribut ne peut pas être utiliser pour la classification");
+        LoadableData.classificationType = classificationType;
+        System.out.println("Set type to : " + classificationType);
+
+        LoadableData.setClassificationTypes(ClassificationModel.getClassificationModel().getDatas());
     }
 
     /**
      * Définit la classification (variété) de l'Iris.
-     * @param classification variété à définir.
      */
     @Override
-    public void setClassification(String classification) {
-        this.variety = classification;
+    public Map<String, Object> getClassifiedAttributes() {
+        Map<String, Object> attributes = new LinkedHashMap<>();
+
+        attributes.put("Variété", variety);
+
+        return attributes;
+    }
+
+    @Override
+    public int getClassificationType() {
+        return classificationType;
+    }
+
+    /**
+     * Définit la classification de l'objet.
+     *
+     * @param classification classification à définir.
+     */
+    @Override
+    public void setClassification(String classification) throws IllegalAccessException {
+        this.getClass().getDeclaredFields()[classificationType].set(this, classification);
     }
 
     /**
@@ -136,6 +174,7 @@ public class Iris extends LoadableData {
         attrNames.put("Largeur des sépales", sepalWidth);
         attrNames.put("Longueur des pétales", petalLength);
         attrNames.put("Largeur des pétales", petalWidth);
+        attrNames.put("Variété", variety);
         return attrNames;
     }
 
@@ -145,12 +184,16 @@ public class Iris extends LoadableData {
      */
     @Override
     public String toString() {
-        return (
-                "Sepal length: " + sepalLength + "\n" +
-                "Sepal width: " + sepalWidth + "\n" +
-                "Petal length: " + petalLength + "\n" +
-                "Petal width: " + petalWidth + "\n" +
-                "Variety: " + getClassification()
-        );
+        try {
+            return (
+                    "Sepal length: " + sepalLength + "\n" +
+                    "Sepal width: " + sepalWidth + "\n" +
+                    "Petal length: " + petalLength + "\n" +
+                    "Petal width: " + petalWidth + "\n" +
+                    "Variety: " + getClassification()
+            );
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
     }
 }
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 d1b6696c9a3b53870870913fb953e819b3f1a413..81eeaeb369c0c700abd0af9c69d086e1c8847f1e 100644
--- a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
+++ b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
@@ -1,13 +1,11 @@
 package fr.univlille.sae.classification.model;
 
+import javafx.scene.control.Label;
 import javafx.scene.paint.Color;
 
-import java.util.Map;
-import java.util.HashMap;
+import java.util.*;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
-import java.util.Set;
 
 /**
  * Classe abstraite représentant des données pouvant être chargées.
@@ -18,6 +16,8 @@ public abstract class LoadableData {
 
     private static Map<String, Color> classification = new HashMap<>() ;
 
+    protected static int classificationType = 1;
+
     /**
      * Constructeur par défaut.
      */
@@ -29,7 +29,7 @@ public abstract class LoadableData {
      * Renvoie la classification de l'objet.
      * @return classification sous forme de chaîne.
      */
-    public abstract String getClassification();
+    public abstract String getClassification() throws IllegalAccessException;
 
     /**
      * Renvoie les types de classification définis.
@@ -43,12 +43,25 @@ public abstract class LoadableData {
         return classification;
     }
 
+    public static void setClassificationTypeGlobal(int classificationType) throws IllegalArgumentException, IllegalAccessException {
+        LoadableData.classificationType = classificationType;
+    }
+
+    public abstract void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException;
+
     /**
      * Définit les types de classification disponibles.
-     * @param classificationTypes ensemble de types de classification à définir.
-     */
-    public static void setClassificationTypes(Set<String> classificationTypes) {
-        LoadableData.classificationTypes = classificationTypes;
+      */
+    public static void setClassificationTypes(List<LoadableData> datas) throws IllegalAccessException {
+
+        Set<String> types = new HashSet<>();
+            for (LoadableData d : datas) {
+                types.add(d.getClassification());
+            }
+
+
+        classificationTypes = types;
+
         LoadableData.classification.clear();
         int nbOfColors = classificationTypes.size() + 1;
         int nb = 0;
@@ -97,11 +110,15 @@ public abstract class LoadableData {
 
     */
 
+    public abstract Map<String, Object> getClassifiedAttributes();
+
+    public abstract int getClassificationType() ;
+
     /**
      * Définit la classification de l'objet.
      * @param classification classification à définir.
      */
-    public abstract void setClassification(String classification);
+    public abstract void setClassification(String classification) throws IllegalAccessException;
 
     public abstract Map<String, Object> getAttributesNames();
 
diff --git a/src/main/java/fr/univlille/sae/classification/model/Pokemon.java b/src/main/java/fr/univlille/sae/classification/model/Pokemon.java
index 7ac5fad96ac847d5199b969014b9c3f852fa4e79..92383a09e1ab7828b13d774bd2927d1770bcde48 100644
--- a/src/main/java/fr/univlille/sae/classification/model/Pokemon.java
+++ b/src/main/java/fr/univlille/sae/classification/model/Pokemon.java
@@ -1,9 +1,8 @@
 package fr.univlille.sae.classification.model;
 
 import com.opencsv.bean.CsvBindByName;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
+
+import java.util.*;
 
 public class Pokemon extends LoadableData{
 
@@ -38,8 +37,10 @@ public class Pokemon extends LoadableData{
     private boolean isLegendary;
 
 
+
     public Pokemon(String name, int attack, int baseEggSteps, double captureRate, int defense, int experienceGrowth, int hp, int spAttack, int spDefense, String type1, String type2, double speed, boolean isLegendary) {
         super();
+        classificationType = 9;
         this.name = name;
         this.attack = attack;
         this.baseEggSteps = baseEggSteps;
@@ -67,7 +68,7 @@ public class Pokemon extends LoadableData{
      * Constructeur par défaut.
      */
     public Pokemon() {
-        //
+        classificationType = 9;
     }
 
     /**
@@ -76,8 +77,8 @@ public class Pokemon extends LoadableData{
      * @return classification sous forme de chaîne.
      */
     @Override
-    public String getClassification() {
-        return type1;
+    public String getClassification() throws IllegalAccessException {
+        return (String) this.getClass().getDeclaredFields()[classificationType].get(this).toString();
     }
 
     /**
@@ -86,11 +87,47 @@ public class Pokemon extends LoadableData{
      * @param classification classification à définir.
      */
     @Override
-    public void setClassification(String classification) {
-        this.type1 = classification;
+    public void setClassification(String classification) throws IllegalAccessException {
+       this.getClass().getDeclaredFields()[classificationType].set("", classification);
     }
 
 
+    /**
+     * Permet de modifier l'attribut sur lequelle ont souhaite classifier
+     * Ne sont valable que les attributs present dans getClassificationAttributes()
+     *
+     * Le numéro de l'attribut correspond a sa place dans la liste de tous le attributs.
+     * @param classificationType
+     */
+    public void setClassificationType(int classificationType) throws IllegalArgumentException, IllegalAccessException {
+        if(classificationType < 0 || classificationType > getAttributesNames().size()) throw new IllegalArgumentException("Cette attribut n'existe pas");
+        String keyToVerify = getAttributesNames().keySet().toArray(new String[0])[classificationType];
+        if(!getClassifiedAttributes().containsKey(keyToVerify)) throw new IllegalArgumentException("Cette attribut ne peut pas être utiliser pour la classification");
+        LoadableData.classificationType = classificationType;
+        System.out.println("Set type to : " + classificationType);
+
+        LoadableData.setClassificationTypes(ClassificationModel.getClassificationModel().getDatas());
+    }
+
+
+
+
+    public Map<String, Object> getClassifiedAttributes() {
+        Map<String, Object> attributes = new LinkedHashMap<>();
+
+        attributes.put("Experience growth", experienceGrowth);
+        attributes.put("Type 1", type1);
+        attributes.put("Type 2", type2);
+        attributes.put("Is legendary", isLegendary);
+
+        return attributes;
+    }
+
+    @Override
+    public int getClassificationType() {
+        return classificationType;
+    }
+
     /**
      * Renvoie les noms des attributs de l'objet.
      *
@@ -109,6 +146,8 @@ public class Pokemon extends LoadableData{
         attrNames.put("HP", hp);
         attrNames.put("Special attack", spAttack);
         attrNames.put("Special defense", spDefense);
+        attrNames.put("Type 1", type1);
+        attrNames.put("Type 2", type2);
         attrNames.put("Speed", speed);
         attrNames.put("Is legendary", isLegendary);
         return attrNames;
diff --git a/src/main/java/fr/univlille/sae/classification/utils/ViewUtil.java b/src/main/java/fr/univlille/sae/classification/utils/ViewUtil.java
index 23393fafb2eb0ea1d79280bc8502acaef14caaac..01357ad774a623f225dd3570bf98dea04eb5c5bd 100644
--- a/src/main/java/fr/univlille/sae/classification/utils/ViewUtil.java
+++ b/src/main/java/fr/univlille/sae/classification/utils/ViewUtil.java
@@ -76,9 +76,9 @@ public class ViewUtil {
         line.getChildren().add(tempHBox);
 
         String[] colorsString = colors.keySet().toArray(new String[0]);
-        for(int i = 0 ; i < colorsString.length ; i+= 7) {
-            for(int j = 0 ; i+j < colorsString.length && j < i+7 ; j++) {
-                if(j%7 == 0 && i != 0 ) {
+        for (int i = 0; i < colorsString.length; i += 7) {
+            for (int j = 0; i + j < colorsString.length && j < i + 7; j++) {
+                if (j % 7 == 0 && i != 0) {
                     legend.getChildren().add(line);
                     line = new HBox();
                     line.setSpacing(10);
@@ -86,30 +86,29 @@ public class ViewUtil {
                 }
 
                 tempHBox = new HBox();
-                label = new Label(colorsString[i+j]);
+                label = new Label(colorsString[i + j]);
                 Circle circle = new Circle(5);
-                circle.setFill(colors.get(colorsString[i+j]));
+                circle.setFill(colors.get(colorsString[i + j]));
                 tempHBox.getChildren().addAll(circle, label);
                 line.getChildren().add(tempHBox);
-
             }
         }
+                if (colorsString.length < 7) legend.getChildren().add(line);
 
-        if(colorsString.length < 7) legend.getChildren().add(line);
+                    /**
+                     for(String s : colors.keySet()) {
+                     Circle c = new Circle(5);
+                     c.setFill(colors.get(s));
+                     label = new Label(s);
+                     tempHBox = new HBox();
+                     tempHBox.getChildren().addAll(c, label);
 
-/**
- for(String s : colors.keySet()) {
- Circle c = new Circle(5);
- c.setFill(colors.get(s));
- label = new Label(s);
- tempHBox = new HBox();
- tempHBox.getChildren().addAll(c, label);
-
- hbox.getChildren().add(tempHBox);
- }
- */
+                     hbox.getChildren().add(tempHBox);
+                     }
+                     */
+
+                return legend;
+            }
 
-        return legend;
-    }
 
-}
+    }
diff --git a/src/main/java/fr/univlille/sae/classification/view/ChooseAttributesView.java b/src/main/java/fr/univlille/sae/classification/view/ChooseAttributesView.java
new file mode 100644
index 0000000000000000000000000000000000000000..a45432293db34ecb8618d0926e7352f2593de21c
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/view/ChooseAttributesView.java
@@ -0,0 +1,70 @@
+package fr.univlille.sae.classification.view;
+
+import fr.univlille.sae.classification.controller.AddDataController;
+import fr.univlille.sae.classification.controller.ChooseAttributesController;
+import fr.univlille.sae.classification.model.ClassificationModel;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.control.Alert;
+import javafx.stage.Modality;
+import javafx.stage.Stage;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+public class ChooseAttributesView {
+
+
+
+    private ClassificationModel model;
+    private Stage owner;
+
+    /**
+     * Constructeur pour initialiser la vue de choix des attributs
+     * @param model le modèle de classification
+     * @param owner la fenêtre parente de cette vue.
+     */
+    public ChooseAttributesView(ClassificationModel model, Stage owner) {
+        this.model = model;
+        this.owner = owner;
+    }
+
+
+
+    public void show() {
+        FXMLLoader loader = new FXMLLoader();
+        URL fxmlFileUrl = getClass().getClassLoader().getResource("stages"+ File.separator+"choose-attributes.fxml");
+
+        if (fxmlFileUrl == null) {
+            System.out.println("Impossible de charger le fichier fxml");
+            System.exit(-1);
+        }
+
+        loader.setLocation(fxmlFileUrl);
+
+        try {
+            Stage root = loader.load();
+           // ChooseAttributesController controller = loader.getController();
+
+            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 choisir l'attribut a classifier");
+                alert.showAndWait();
+                return;
+            }
+
+            root.setResizable(false);
+            root.initOwner(owner);
+            root.initModality(Modality.APPLICATION_MODAL);
+            root.setTitle("Choix d'attribut");
+
+            root.showAndWait();
+        } catch (IOException e) {
+            System.out.println("Erreur lors du chargement de la scène : " + e.getMessage());
+            e.printStackTrace();
+        }
+    }
+
+}
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 68d70c468c480b1ac178c38e901cfddf6f8ee524..8692885007e9d7ff4671a0bcc1a46a1497339ed2 100644
--- a/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
@@ -3,8 +3,6 @@ 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;
diff --git a/src/main/java/fr/univlille/sae/classification/view/DataVisualizationView.java b/src/main/java/fr/univlille/sae/classification/view/DataVisualizationView.java
index 0ee1a0140fd6e25ea2dba391e677ffcafbe6679a..4731963414da81af4948af4fb470355cd4afc5ae 100644
--- a/src/main/java/fr/univlille/sae/classification/view/DataVisualizationView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/DataVisualizationView.java
@@ -14,10 +14,7 @@ import javafx.scene.layout.HBox;
 import javafx.scene.layout.VBox;
 import javafx.scene.shape.*;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * Classe abstraite représentant une vue de visualisation des données.
@@ -25,6 +22,9 @@ import java.util.Map;
  */
 public abstract class DataVisualizationView {
 
+    private static Set<DataVisualizationView> views;
+
+
     public DataVisualizationController controller;
     private ScatterChart.Series series1;
     private ScatterChart.Series series2;
@@ -45,6 +45,12 @@ public abstract class DataVisualizationView {
         this.serieList = new HashMap<String, ScatterChart.Series<Double, Double>>();
         this.model = model;
         this.series4 = new XYChart.Series();
+        views.add(this);
+    }
+
+
+    public static void resetAxis() {
+        // call method resetAxis for each instance of DataVisualizationView (views)
     }
 
     /**