diff --git a/models/acc_operation.py b/models/acc_operation.py
index 84eb2da4f16c4eacae4fe7c30e4bfc645cdf6264..7d1d0eff3fb56274cfd7868d98a87b093d3c529c 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -1,12 +1,11 @@
 # Copyright 2023 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
 from datetime import datetime, time
 
 from dateutil.relativedelta import relativedelta
 
 from odoo import _, models
-from odoo.exceptions import ValidationError
+from odoo.exceptions import ValidationError, UserError
 from odoo.osv import expression
 from odoo.tools import date_utils
 
@@ -173,7 +172,9 @@ class AccOperation(models.Model):
 
         return display_hourly_curves, step, step_display_curve
 
-    def get_cdc_by_query_cons(self, slot_type, start_date, end_date, prm_ids=None):
+    def get_cdc_by_query_cons(
+        self, slot_type, start_date, end_date, prm_ids=None, partner_ids=None
+    ):
         """
         Fonction permettant de récupérer les données pour la
         construction des chart pour une ou des opérations données
@@ -214,6 +215,7 @@ class AccOperation(models.Model):
                 AND ( cdc.acc_counter_id IN %s OR cdc.comp_data_type = 'prod' )
                 AND cdc.date_slot >= %s
                 AND cdc.date_slot <= %s
+                AND cdc.partner_id IN %s
             GROUP BY date_trunc(%s, cdc.date_slot)
             ORDER BY date_slot ASC;
             """
@@ -223,6 +225,7 @@ class AccOperation(models.Model):
             tuple(prm_ids.ids),
             start_date,
             end_date,
+            tuple(partner_ids.ids),
             slot_type,
         )
         self.env.cr.execute(query, query_params)
@@ -243,7 +246,9 @@ class AccOperation(models.Model):
         }
         return cdc_cons
 
-    def get_cdc_by_query_daily_histo_cons(self, start_date, end_date, prm_ids=None):
+    def get_cdc_by_query_daily_histo_cons(
+        self, start_date, end_date, prm_ids=None, partner_ids=None
+    ):
         """
         Fonction permettant de récupérer les données pour la construction
         des chart pour une ou des opérations données pour les consommateurs
@@ -276,6 +281,7 @@ class AccOperation(models.Model):
                     AND cdc.acc_counter_id IN %s
                     AND cdc.date_slot >= %s
                     AND cdc.date_slot <= %s
+                    AND cdc.partner_id IN %s
                 GROUP BY date_trunc('day', cdc.date_slot)
                 ORDER BY date_slot ASC;
             """
@@ -284,6 +290,7 @@ class AccOperation(models.Model):
             tuple(prm_ids.ids),
             start_date,
             end_date,
+            tuple(partner_ids.ids),
         )
         self.env.cr.execute(query, query_params)
         raw_data = self.env.cr.fetchall()
@@ -299,7 +306,9 @@ class AccOperation(models.Model):
         }
         return cdc_cons
 
-    def get_cdc_by_query_prod(self, slot_type, start_date, end_date, prm_ids=None):
+    def get_cdc_by_query_prod(
+        self, slot_type, start_date, end_date, prm_ids=None, partner_ids=None
+    ):
         """
         Fonction permettant de récupérer les données pour la construction des
           chart pour une ou des opérations données pour les consommateurs
@@ -335,6 +344,7 @@ class AccOperation(models.Model):
                 AND cdc.acc_operation_id IN %s
                 AND cdc.date_slot >= %s
                 AND cdc.date_slot <= %s
+                AND cdc.partner_id IN %s
             GROUP BY date_trunc(%s, cdc.date_slot)
             ORDER BY date_slot ASC;
             """
@@ -344,6 +354,7 @@ class AccOperation(models.Model):
             tuple(self.ids),
             start_date,
             end_date,
+            tuple(partner_ids.ids),
             slot_type,
         )
         self.env.cr.execute(query, query_params)
@@ -360,7 +371,9 @@ class AccOperation(models.Model):
         }
         return cdc_prod
 
-    def get_cdc_by_query_daily_histo_prod(self, start_date, end_date, prm_ids=None):
+    def get_cdc_by_query_daily_histo_prod(
+        self, start_date, end_date, prm_ids=None, partner_ids=None
+    ):
         """
         Fonction permettant de récupérer les données pour la construction des
         chart pour une ou des opérations données pour les consommateurs
@@ -394,6 +407,7 @@ class AccOperation(models.Model):
                 AND cdc.acc_operation_id IN %s
                 AND cdc.date_slot >= %s
                 AND cdc.date_slot <= %s
+                AND cdc.partner_id IN %s
             GROUP BY date_trunc('day', cdc.date_slot)
             ORDER BY date_slot ASC;
                 """
@@ -402,6 +416,7 @@ class AccOperation(models.Model):
             tuple(self.ids),
             start_date,
             end_date,
+            tuple(partner_ids.ids),
         )
         self.env.cr.execute(query, query_params)
         raw_data = self.env.cr.fetchall()
@@ -457,40 +472,43 @@ class AccOperation(models.Model):
             start_date=start_date, end_date=end_date
         )
 
-        # TODO: ajouter filtre par période de PRM en fonction date de début / fin
-        # (si prm_id ou partner_id)
+        domain = [["acc_operation_id", "=", self.id]]
 
-        # Si prm_id alors filtrer pour n'afficher que ce compteur
         if prm_id:
-            acc_counter_ids = self.env["acc.counter"].browse(prm_id)
-        else:
-            # Filtre par défaut = même opération
-            domain = [["acc_operation_id", "=", self.id]]
-            # Si partner_id alors on ne prend que les PRMs appartenant à ce contact
-            if partner_id:
-                domain = expression.AND([domain, [("partner_id", "=", partner_id)]])
-            acc_counter_ids = (
-                self.env["acc.counter.period"].search(domain).mapped("acc_counter_id")
+            domain = expression.AND([domain, [("acc_counter_id", "=", prm_id)]])
+        if partner_id:
+            domain = expression.AND([domain, [("partner_id", "=", partner_id)]])
+        periods = (
+            self.env["acc.counter.period"]
+            .sudo()
+            ._get_periods_from_interval(
+                domain=domain, start_date=start_date, end_date=end_date
             )
+        )
+        if periods:
+            acc_counter_ids = periods.mapped("acc_counter_id")
+            acc_partner_ids = periods.mapped("partner_id")
+        else:
+            raise UserError(_("No data found"))
 
         chart_data = {}
         if data_type == "cons" or data_type == "pmo":
             chart_data_cons = self.get_cdc_by_query_cons(
-                step_curve, start_date, end_date, acc_counter_ids
+                step_curve, start_date, end_date, acc_counter_ids, acc_partner_ids
             )
             if display_hourly_curves:
                 chart_data_histo = self.get_cdc_by_query_daily_histo_cons(
-                    start_date, end_date, acc_counter_ids
+                    start_date, end_date, acc_counter_ids, acc_partner_ids
                 )
                 chart_data_cons.update(chart_data_histo)
             chart_data.update(chart_data_cons)
         if data_type == "prod" or data_type == "pmo":
             chart_data_prod = self.get_cdc_by_query_prod(
-                step_curve, start_date, end_date, acc_counter_ids
+                step_curve, start_date, end_date, acc_counter_ids, acc_partner_ids
             )
             if display_hourly_curves:
                 chart_data_histo = self.get_cdc_by_query_daily_histo_prod(
-                    start_date, end_date, acc_counter_ids
+                    start_date, end_date, acc_counter_ids, acc_partner_ids
                 )
                 chart_data_prod.update(chart_data_histo)
             chart_data.update(chart_data_prod)