diff --git a/TP5/README.md b/TP5/README.md
index f829a09e04807a3b8b95e9b7468acf8cfc5f70e6..cfbdde35d4993249e2809e5883455e630cdf85c3 100644
--- a/TP5/README.md
+++ b/TP5/README.md
@@ -16,3 +16,4 @@ Nous choisisons les attributs "population" et "altiteude" pour encoder visuellem
 - Altitude : la variable rétinienne associée à l'altitude sera la couleur du marqueur. Par exemple, les villes ayant une altitude plus élevée seront représentées par des marqueurs jaunes à rouge, tandis que les villes ayant une altitude plus basse seront représentées par des marqueurs bleus.
 
 On met en place aussi un histogramme des valeurs de population, c'est-à-dire le nombre de valeurs appartenant à chaque intervalle de l'axe afin d'améliorer la visualisation des données.
+ 
\ No newline at end of file
diff --git a/TP5/sketch_240321a/sketch_240321a.pde b/TP5/sketch_240321a/sketch_240321a.pde
index 5135446a6fe8e25bbd8cbd4a69a6e3fe844f2087..5730006f240f5b4ee02af060ebabdc4992ab5788 100644
--- a/TP5/sketch_240321a/sketch_240321a.pde
+++ b/TP5/sketch_240321a/sketch_240321a.pde
@@ -14,13 +14,15 @@ City cities[];
 
 int legendsHeight=100;
 int minPopulationToDisplay=1;
+int maxPopulationToDisplay=300000;
 boolean redrawInProgress=false;
 City lastCitySelected=null;
 City lastCityClicked=null;
 
 float sliderX, sliderY, sliderWidth, sliderHeight;
-float sliderPosition;
+float sliderPositionMin, sliderPositionMax;
 boolean draggingSlider = false;
+boolean draggingMin = false;
 
 void setup() {
   size(900,900);
@@ -32,7 +34,9 @@ void setup() {
   sliderY = 50;
   sliderWidth = width - 100;
   sliderHeight = 20;
-  sliderPosition = map(minPopulationToDisplay, minPopulation, maxPopulation, sliderX, sliderX + sliderWidth);
+  // Initialise les positions des curseurs sur le slider
+  sliderPositionMin = map(minPopulationToDisplay, minPopulation, maxPopulation, sliderX, sliderX + sliderWidth);
+  sliderPositionMax = map(maxPopulationToDisplay, minPopulation, maxPopulation, sliderX, sliderX + sliderWidth);
 }
 
 void draw() {
@@ -41,7 +45,7 @@ void draw() {
     fill(0);
     textSize(20);
     textAlign(CENTER, CENTER);
-    text("Afficher les populations supérieures à " + minPopulationToDisplay, width/2, 20);
+    text("Afficher les populations entre " + minPopulationToDisplay + " et " + maxPopulationToDisplay, width/2, 20);
     setBasePen();
     
     drawSlider();
@@ -63,31 +67,30 @@ void drawSlider() {
   fill(180);
   rect(sliderX, sliderY, sliderWidth, sliderHeight);
 
-  fill(255, 0, 0);
-  ellipse(sliderPosition, sliderY + sliderHeight / 2, 20, 20);
+  fill(255, 0, 0); // Poignée pour le minimum
+  ellipse(sliderPositionMin, sliderY + sliderHeight / 2, 20, 20);
+  fill(0, 255, 0); // Poignée pour le maximum
+  ellipse(sliderPositionMax, sliderY + sliderHeight / 2, 20, 20);
 }
 
 void readData() {
-  // Début de la mise à jour des données
-  String[] lines = loadStrings("./villes.tsv");
-  
   ArrayList<City> filteredCities = new ArrayList<City>();
+  String[] lines = loadStrings("./villes.tsv");
+
   if (lines != null && lines.length > 2) {
     parseInfo(lines[0]);
     for (int i = 2; i < lines.length; i++) {
       String[] columns = split(lines[i], TAB);
-      float pointX = float(columns[x]);
-      float pointY = float(columns[y]);
-      if (float(columns[5]) > minPopulationToDisplay) {
-        filteredCities.add(new City(columns[0], columns[4], mapX(pointX), mapY(pointY), float(columns[5]), float(columns[6]), float(columns[7])));
+      float population = float(columns[5]);
+      if (population >= minPopulationToDisplay && population <= maxPopulationToDisplay) {
+        filteredCities.add(new City(columns[0], columns[4], mapX(float(columns[x])), mapY(float(columns[y])), population, float(columns[6]), float(columns[7])));
       }
     }
   }
 
+  cities = filteredCities.toArray(new City[filteredCities.size()]);
   totalCount = filteredCities.size();
-  cities = filteredCities.toArray(new City[totalCount]);
   redrawInProgress = false;
-  redraw();
 }
 
 void parseInfo(String line) {
@@ -171,55 +174,50 @@ void mouseMoved() {
 }
 
 void mousePressed(){
-  // Vérifie d'abord si le clic est sur le slider
-  float distanceToSlider = dist(mouseX, mouseY, sliderPosition, sliderY + sliderHeight / 2);
-  if (distanceToSlider < 20) { // Supposons que la poignée du slider a un rayon d'action de 20 pixels pour faciliter l'interaction
+  float distMin = dist(mouseX, mouseY, sliderPositionMin, sliderY + sliderHeight / 2);
+  float distMax = dist(mouseX, mouseY, sliderPositionMax, sliderY + sliderHeight / 2);
+
+  if (distMin < 10) {
     draggingSlider = true;
-    updateSliderPosition();
-  } else {
-    // Sinon, vérifie si le clic est sur une ville
-    City city = pick(mouseX, mouseY);
-    if (city != null) {
-      println("City clicked: " + city.name);
-      if (lastCityClicked != null) {
-        lastCityClicked.isClicked = false; // Désélectionnez l'ancienne ville cliquée, si nécessaire
-      }
-      lastCityClicked = city;
-      lastCityClicked.isClicked = true;
-    } else if (lastCityClicked != null) {
-      lastCityClicked.isClicked = false;
-      lastCityClicked = null;
-    }
-    redraw();
+    draggingMin = true;
+  } else if (distMax < 10) {
+    draggingSlider = true;
+    draggingMin = false;
   }
 }
 
-void mouseReleased() {
-  // Arrête le glissement lorsque le bouton de la souris est relâché
-  draggingSlider = false;
-}
-
 void mouseDragged() {
   if (draggingSlider) {
-    sliderPosition = constrain(mouseX, sliderX, sliderX + sliderWidth);
-    int newMinPopulation = int(map(sliderPosition, sliderX, sliderX + sliderWidth, minPopulation, maxPopulation));
-    if (newMinPopulation != minPopulationToDisplay) { // Ne mettez à jour les données que si nécessaire
-      minPopulationToDisplay = newMinPopulation;
-      redrawInProgress = true;
-      readData(); // readData devrait désactiver redrawInProgress à la fin
+    boolean updateData = false;
+    if (draggingMin) {
+      float newPos = constrain(mouseX, sliderX, sliderPositionMax);
+      if (newPos != sliderPositionMin) {
+        sliderPositionMin = newPos;
+        minPopulationToDisplay = int(map(sliderPositionMin, sliderX, sliderX + sliderWidth, minPopulation, maxPopulation));
+        updateData = true;
+      }
+    } else {
+      float newPos = constrain(mouseX, sliderPositionMin, sliderX + sliderWidth);
+      if (newPos != sliderPositionMax) {
+        sliderPositionMax = newPos;
+        maxPopulationToDisplay = int(map(sliderPositionMax, sliderX, sliderX + sliderWidth, minPopulation, maxPopulation));
+        updateData = true;
+      }
+    }
+    if (updateData) {
+      readData(); // Modifier pour ne lire les données que si nécessaire
+      redraw(); // Limitez le redessin aux moments nécessaires
     }
   }
 }
 
-
-void updateSliderPosition() {
-  sliderPosition = constrain(mouseX, sliderX, sliderX + sliderWidth);
-  minPopulationToDisplay = int(map(sliderPosition, sliderX, sliderX + sliderWidth, minPopulation, maxPopulation));
-  readData();
-  redraw();
+void mouseReleased() {
+  draggingSlider = false;
+  redraw(); // Assurez-vous de redessiner une dernière fois à la fin du déplacement
 }
 
 
+
 City pick(int px, int py) {
   for (int i = totalCount - 1 ; i >= 0; --i) {
     if (cities[i].contains(px, py)) {