diff --git a/models/acc_operation.py b/models/acc_operation.py
index 4c203b27e6a0af90508a1f10f0f971305820b4c4..80300be7817fb4d8678d29b7719310b9e92f7c66 100644
--- a/models/acc_operation.py
+++ b/models/acc_operation.py
@@ -7,7 +7,7 @@ from dateutil import tz
 from dateutil.relativedelta import relativedelta
 
 from odoo import _, fields, models
-from odoo.exceptions import UserError
+from odoo.exceptions import UserError, ValidationError
 
 _logger = logging.getLogger(__name__)
 
@@ -280,7 +280,7 @@ class AccOperation(models.Model):
         list_injection = []
         list_soutirage = []
 
-        for usage_point in usage_points:
+        for usage_point in sorted(usage_points, key=lambda p: date.fromisoformat(p["start"])):
             usage_point_start = date.fromisoformat(usage_point["start"])
             usage_point_end = (
                 date.fromisoformat(usage_point["end"])
@@ -303,7 +303,6 @@ class AccOperation(models.Model):
             )
             counter_id = self.env["acc.counter"].search(
                 [
-                    ("acc_operation_id", "=", self.id),
                     ("name", "=", usage_point["usage_point_id"]),
                 ]
             )
@@ -328,18 +327,25 @@ class AccOperation(models.Model):
                         "fin différente, mise à jour date de fin<br/>"
                     )
                 else:
-                    self.env["acc.counter.period"].create(
-                        {
-                            "acc_counter_id": counter_id.id,
-                            "prm_type": usage_point_prm_type,
-                            "acc_operation_id": self.id,
-                            "date_start": usage_point_start,
-                            "date_end": usage_point_end,
-                        }
-                    )
-                    message += (
-                        "période inexistante avec les mêmes dates : création<br/>"
-                    )
+                    try:
+                        self.env["acc.counter.period"].create(
+                            {
+                                "acc_counter_id": counter_id.id,
+                                "prm_type": usage_point_prm_type,
+                                "acc_operation_id": self.id,
+                                "date_start": usage_point_start,
+                                "date_end": usage_point_end,
+                            }
+                        )
+                        message += (
+                            "période inexistante avec les mêmes dates : création<br/>"
+                        )
+                    except ValidationError as e:
+                        message += (
+                            "<strong>erreur lors de la tentative de création d'une nouvelle période, à vérifier manuellement :</strong><br/>"
+                             + str(e) + "<br/>"
+                        )
+
             elif len(counter_id) > 1:
                 message += "Plusieurs PRMs trouvés avec ce numéro - pas de modif<br/>"
             else:
@@ -353,21 +359,27 @@ class AccOperation(models.Model):
                         or self.date_start_contract > usage_point_start
                     ):
                         self.date_start_contract = usage_point_start
-                counter_id = self.env["acc.counter"].create(
-                    {
-                        "name": usage_point["usage_point_id"],
-                    }
-                )
-                self.env["acc.counter.period"].create(
-                    {
-                        "acc_counter_id": counter_id.id,
-                        "prm_type": usage_point_prm_type,
-                        "acc_operation_id": self.id,
-                        "date_start": usage_point_start,
-                        "date_end": usage_point_end,
-                    }
-                )
-                message += "Fin de la création du PRM<br/>"
+                try:
+                    counter_id = self.env["acc.counter"].create(
+                        {
+                            "name": usage_point["usage_point_id"],
+                        }
+                    )
+                    self.env["acc.counter.period"].create(
+                        {
+                            "acc_counter_id": counter_id.id,
+                            "prm_type": usage_point_prm_type,
+                            "acc_operation_id": self.id,
+                            "date_start": usage_point_start,
+                            "date_end": usage_point_end,
+                        }
+                    )
+                    message += "Fin de la création du PRM<br/>"
+                except ValidationError as e:
+                    message += (
+                        "<strong>erreur lors de la tentative de création d'un PRM et/ou "
+                        "d'une nouvelle période, à vérifier manuellement :<strong><br/>" + str(e) + "<br/>"
+                    )
             if usage_point_prm_type == "injection":
                 if usage_point["usage_point_id"] not in list_injection:
                     list_injection.append(usage_point["usage_point_id"])