diff --git a/web/components/visualization/results-section.js b/web/components/visualization/results-section.js
index 7778e851d11a2c2fb2badac70906c2659a0128f5..cbe67306df5580fb0b4b93ac6203dc032177fd69 100644
--- a/web/components/visualization/results-section.js
+++ b/web/components/visualization/results-section.js
@@ -129,7 +129,7 @@ class ResultComponent {
     </div>`;
   }
 
-  progressBarTemplate(candidateList, color) {
+  progressBarTemplate(candidateList, color, electedsNumber) {
     return /* HTML */ `<div class="progressBar">
       <div
         class="progressBarValue"
@@ -141,7 +141,8 @@ class ResultComponent {
           ? candidateList.VoiceNumber + " votes soit : "
           : "") +
         candidateList.Percentage +
-        "%)"}
+        "%" +
+        (electedsNumber != null ? ", " + electedsNumber + " élus" : "")})
       </div>
     </div>`;
   }
@@ -443,6 +444,14 @@ class ResultComponent {
       document.getElementById("zone-results").innerHTML =
         '<br/><h5 class="title is-5">Résultats</h5>';
       for (let i in zone.candidateLists) {
+        let electedsNumber = null;
+        if (
+          this.zone === "areas" &&
+          zone.candidateLists[i].SeatsAttributed > 0 &&
+          zone.stats.PercentageConsiderated == 100
+        ) {
+          electedsNumber = zone.candidateLists[i].SeatsAttributed;
+        }
         let party = await this.PartyModel.getParty(
           zone.candidateLists[i].PartyID
         );
@@ -450,7 +459,8 @@ class ResultComponent {
           "zone-results"
         ).innerHTML += this.progressBarTemplate(
           zone.candidateLists[i],
-          party.Color
+          party.Color,
+          electedsNumber
         );
       }
       this.displayZoneDetailedResults(zone);
@@ -470,7 +480,8 @@ class ResultComponent {
           Percentage: zone.stats.PercentageConsiderated,
           VoiceNumber: null,
         },
-        "grey"
+        "grey",
+        null
       );
     document.getElementById(
       "zone-detaileds-results"
@@ -480,7 +491,8 @@ class ResultComponent {
         Percentage: zone.stats.Abstention,
         VoiceNumber: null,
       },
-      "grey"
+      "grey",
+      null
     );
     document.getElementById(
       "zone-detaileds-results"
@@ -490,7 +502,8 @@ class ResultComponent {
         Percentage: zone.stats.BlankPercentage,
         VoiceNumber: zone.stats.BlankVoiceNumber,
       },
-      "grey"
+      "grey",
+      null
     );
     document.getElementById(
       "zone-detaileds-results"
@@ -500,7 +513,8 @@ class ResultComponent {
         Percentage: zone.stats.NullVotePercentage,
         VoiceNumber: zone.stats.NullVoteVoiceNumber,
       },
-      "grey"
+      "grey",
+      null
     );
     if (this.zone === "areas" && zone.stats.PercentageConsiderated == 100) {
       document.getElementById("zone-detaileds-results").innerHTML +=
diff --git a/web/services/election/calculate-election-generic.js b/web/services/election/calculate-election-generic.js
index 83c3995aa1047a223ac4e6e833d3d4514d7c5381..eed1675625e11f967b3d2e4d12defc0d8f5c9357 100644
--- a/web/services/election/calculate-election-generic.js
+++ b/web/services/election/calculate-election-generic.js
@@ -240,7 +240,7 @@ class DirectMetropolitanCalculator {
     });
 
     area.Electeds = this.getElecteds(area);
-    
+
     area.candidateLists.sort((a, b) => {
       return b.VoiceNumber - a.VoiceNumber;
     });
@@ -362,6 +362,7 @@ class DirectMetropolitanCalculator {
 
     // order candidates by rank and remove refused or removed candidates
     area.candidateLists.forEach((candidateList) => {
+      candidateList.seatNumber = 0;
       candidateList.Candidates.sort(function (a, b) {
         return a.Rank - b.Rank;
       });
@@ -446,6 +447,11 @@ class DirectMetropolitanCalculator {
       leftSeats -= 1;
     }
 
+    area.candidateLists.sort((a, b) => {
+      return b.VoiceNumber - a.VoiceNumber;
+    });
+    area.candidateLists[0].SeatsAttributed += seatForFirst;
+
     return electeds;
   }
 }