diff --git a/models/acc_operation.py b/models/acc_operation.py
index a6cdabd81122f926d9e476ed320981a47a1d64a4..830449a621cc7b07b6410a636254ae44d55d1dfb 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -1,6 +1,8 @@
 # Copyright 2021 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
+import time
+
 from dateutil.relativedelta import relativedelta
 
 from odoo import _, api, fields, models
@@ -67,39 +69,37 @@ class AccOperation(models.Model):
         """
         # Récupère les dates du dernier mois disponible
         date_start, date_end = self.get_last_day("month")
-        # Conso Totale
-        conso_ids = self.env["acc.enedis.cdc"].search(
-            [
-                ("acc_operation_id", "=", self.id),
-                ("comp_data_type", "=", "cons"),
-                ("date_slot", ">=", date_start),
-                ("date_slot", "<", date_end),
-            ]
-        )
-        conso_tot = (sum(conso_ids.mapped("power")) / 1000) / 2
-
-        # Prod Totale
-        prod_ids = self.env["acc.enedis.cdc"].search(
-            [
-                ("acc_operation_id", "=", self.id),
-                ("comp_data_type", "=", "prod"),
-                ("date_slot", ">=", date_start),
-                ("date_slot", "<", date_end),
-            ]
-        )
-        prod_tot = (sum(prod_ids.mapped("power")) / 1000) / 2
-
-        # Auto cons Totale
-        autoconso_ids = self.env["acc.enedis.cdc"].search(
-            [
-                ("acc_operation_id", "=", self.id),
-                ("comp_data_type", "=", "autocons"),
-                ("date_slot", ">=", date_start),
-                ("date_slot", "<", date_end),
-            ]
+        query = """
+            SELECT
+                date_trunc('month', A.date_slot) AS date_slot,
+                (SUM( (CASE
+                    WHEN comp_data_type = 'cons' THEN A.power
+                    ELSE 0 END) )/2) / 1000 as conso_tot,
+                (SUM( (CASE
+                    WHEN comp_data_type = 'prod'
+                    THEN A.power ELSE 0 END) )/2) / 1000 as prod_tot,
+                (SUM( (CASE WHEN
+                    comp_data_type = 'autocons' THEN A.power
+                    ELSE 0 END) )/2) / 1000 as autoconso_tot
+            FROM
+                acc_enedis_cdc A
+            JOIN
+                acc_operation E ON E.id = A.acc_operation_id
+            WHERE
+                A.acc_operation_id IS NOT NULL
+                AND A.acc_operation_id = %s
+                AND A.date_slot >= %s
+                AND A.date_slot < %s
+            GROUP BY date_trunc('month', A.date_slot);
+        """
+        query_params = (
+            self.id,
+            date_start,
+            date_end,
         )
-        autoconso_tot = (sum(autoconso_ids.mapped("power")) / 1000) / 2
-        return conso_tot, prod_tot, autoconso_tot
+        self.env.cr.execute(query, query_params)
+        raw_data = self.env.cr.fetchall()
+        return raw_data[0][1], raw_data[0][2], raw_data[0][3]
 
     def get_power_install_tot(self):
         """
@@ -520,7 +520,7 @@ class AccOperation(models.Model):
         data_cons = []
         data_prod = []
         data_surplus = []
-
+        stime = time.time()
         # if prm_ids:
         query = """
             SELECT
@@ -557,6 +557,8 @@ class AccOperation(models.Model):
         query_params = (slot_type, tuple(self.ids), date_start, date_end, slot_type)
         self.env.cr.execute(query, query_params)
         raw_data = self.env.cr.fetchall()
+        print("Temps requête %s query 1", str(round(time.time() - stime, 3)))
+        stime2 = time.time()
         for row in raw_data:
             if slot_type == "month" or slot_type == "year":
                 data_cons.append(int(row[1]))
@@ -574,6 +576,10 @@ class AccOperation(models.Model):
                 data_allocons.append({"x": row[0], "y": round(row[5], 2)})
                 data_autocons_prod.append({"x": row[0], "y": round(row[6], 2)})
                 label.append(row[0])
+        print("Temps time2 %s", str(time.time()))
+        print("Temps boucle2 %s", str(round(time.time() - stime2, 3)))
+        print("Temps boucle2 %s", str(time.time() - stime2))
+        print("Temps total2 %s", str(round(time.time() - stime, 3)))
 
         cdc_jour = {
             "autocons": data_autocons,
@@ -601,6 +607,7 @@ class AccOperation(models.Model):
         data_autocons_prod_histo = []
         data_allocons_histo = []
         data_surplus_histo = []
+        stime = time.time()
 
         query = """
             SELECT
@@ -631,12 +638,24 @@ class AccOperation(models.Model):
         query_params = (slot_type, tuple(self.ids), date_start, date_end, slot_type)
         self.env.cr.execute(query, query_params)
         raw_data = self.env.cr.fetchall()
+        print("Temps requête %s", str(round(time.time() - stime, 3)))
+        stime2 = time.time()
+
         for row in raw_data:
             data_autocons_histo.append(round(row[1], 2))
             data_surplus_histo.append(round(row[2], 2))
             data_allocons_histo.append(round(row[3], 2))
             data_autocons_prod_histo.append(round(row[4], 2))
             label_histo.append(row[0])
+        # data_autocons_histo = list(map(lambda raw: round(raw[1], 2), raw_data))
+        # data_surplus_histo = list(map(lambda raw: round(raw[2], 2), raw_data))
+        # data_allocons_histo = list(map(lambda raw: round(raw[3], 2), raw_data))
+        # data_autocons_prod_histo = list(map(lambda raw: round(raw[4], 2), raw_data))
+        # label_histo = list(map(lambda raw: raw[0], raw_data))
+        print("Temps time %s", str(time.time()))
+        print("Temps boucle %s", str(round(time.time() - stime2, 3)))
+        print("Temps boucle %s", str(time.time() - stime2))
+        print("Temps total %s", str(round(time.time() - stime, 3)))
 
         cdc_jour = {
             "autocons_histo": data_autocons_histo,