diff --git a/data/ddl/package/FORMULE_COTE_AZUR/body.sql b/data/ddl/package/FORMULE_COTE_AZUR/body.sql
index b024d87d8cb301965688dd1323debdc49ef26694..7ac102fa9d675227a3168f559ef0e7dabd4a8e11 100644
--- a/data/ddl/package/FORMULE_COTE_AZUR/body.sql
+++ b/data/ddl/package/FORMULE_COTE_AZUR/body.sql
@@ -298,9 +298,9 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR AS
 
 
 
-      -- AM=IF([.AM19]+[.AL20]>[.$AL$17];[.$AL$17];[.AM19]+[.AL20])
+      -- AM=IF(AND([.AM19]+[.AL20]>[.$AL$17];i_type_intervenant_code="P");[.$AL$17];[.AM19]+[.AL20])
       WHEN 'AM' THEN
-        IF cell('AM',l-1) + cell('AL',l) > cell('AL17') THEN
+        IF cell('AM',l-1) + cell('AL',l) > cell('AL17') AND i.type_intervenant_code = 'P' THEN
           RETURN cell('AL17');
         ELSE
           RETURN cell('AM',l-1) + cell('AL',l);
diff --git a/data/ddl/package/FORMULE_LYON2/body.sql b/data/ddl/package/FORMULE_LYON2/body.sql
index 5c4e94861ee0f0768dac38f3603a3d18831ad766..01431d22f1d0de96df01a11ca2da6ed4ef17c32b 100644
--- a/data/ddl/package/FORMULE_LYON2/body.sql
+++ b/data/ddl/package/FORMULE_LYON2/body.sql
@@ -1,6 +1,5 @@
 CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS
-  decalageLigne NUMERIC DEFAULT 21;
-
+  decalageLigne NUMERIC DEFAULT 19;
 
   /* Stockage des valeurs intermédiaires */
   TYPE t_cell IS RECORD (
@@ -16,24 +15,11 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS
 
   debugLine NUMERIC;
 
-
-  PROCEDURE dbg( val CLOB ) IS
-  BEGIN
-    ose_formule.volumes_horaires.items(debugLine).debug_info :=
-      ose_formule.volumes_horaires.items(debugLine).debug_info || val;
-  END;
-
-
   PROCEDURE dbgi( val CLOB ) IS
   BEGIN
     ose_formule.intervenant.debug_info := ose_formule.intervenant.debug_info || val;
   END;
 
-  PROCEDURE dbgDump( val CLOB ) IS
-  BEGIN
-    dbg('<div class="dbg-dump">' || val || '</div>');
-  END;
-
   PROCEDURE dbgCell( c VARCHAR2, l NUMERIC, val FLOAT ) IS
     ligne NUMERIC;
   BEGIN
@@ -50,9 +36,13 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS
     dbgi( '[calc|' || fncName || '|' || c || '|' || res );
   END;
 
-  FUNCTION cell( c VARCHAR2, l NUMERIC DEFAULT 0 ) RETURN FLOAT IS
+  FUNCTION cell( c VARCHAR2, l NUMERIC DEFAULT 9999 ) RETURN FLOAT IS
     val FLOAT;
   BEGIN
+    IF l = 0 THEN
+      RETURN 0;
+    END IF;
+
     IF feuille.exists(c) THEN
       IF feuille(c).cells.exists(l) THEN
         IF feuille(c).cells(l).enCalcul THEN
@@ -94,7 +84,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS
     CASE
     -- Liste des fonctions supportées
 
-    WHEN fncName = 'total' THEN
+    WHEN fncName = 'somme' THEN
       val := 0;
       FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP
         val := val + COALESCE(cell(c, l),0);
@@ -122,431 +112,510 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS
   END;
 
 
-  FUNCTION calcVersion RETURN NUMERIC IS
-  BEGIN
-    RETURN 1;
-  END;
-
-
-
-  FUNCTION isOui( v VARCHAR2 DEFAULT NULL ) RETURN BOOLEAN IS
-  BEGIN
-    RETURN LOWER(v) IN ('1','oui','true');
-  END;
-
-  FUNCTION isD4DAC10000( v VARCHAR2 DEFAULT NULL ) RETURN BOOLEAN IS
-  BEGIN
-    RETURN UPPER(v) IN ('D4DAC10000');
-  END;
-
 
   FUNCTION calcCell( c VARCHAR2, l NUMERIC ) RETURN FLOAT IS
     vh ose_formule.t_volume_horaire;
     i  ose_formule.t_intervenant;
-    v NUMERIC;
     val FLOAT;
   BEGIN
-    v := calcVersion;
-
     i := ose_formule.intervenant;
-    IF l > 0 THEN
+    IF l > 0 AND l <> 9999 THEN
       vh := ose_formule.volumes_horaires.items(l);
     END IF;
-    CASE
+    CASE c
 
 
 
-    -- J=H22*I22
-    WHEN c = 'J' AND v >= 1 THEN
-      RETURN vh.heures * vh.taux_service_du;
+      -- U=IF([.$I20]="Référentiel";0;([.$AJ20]+[.$AP20]+[.$AV20]+[.$BB20]+[.$BN20])*[.F20])
+      WHEN 'U' THEN
+        IF vh.volume_horaire_ref_id IS NOT NULL THEN
+          RETURN 0;
+        ELSE
+          RETURN (cell('AJ',l) + cell('AP',l) + cell('AV',l) + cell('BB',l) + cell('BN',l)) * vh.taux_fi;
+        END IF;
 
 
 
-    -- L=SI($H22="";0;SI(ET($B22=composante_affectation;$G22<>1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0))
-    WHEN c = 'L' AND v >= 1 THEN
-      --SI(ET($B22=composante_affectation;$G22<>1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0)
-      IF vh.structure_is_affectation AND vh.taux_fc <> 1 AND (NOT isD4DAC10000(vh.structure_code)) AND vh.volume_horaire_ref_id IS NULL AND vh.structure_code IS NOT NULL THEN
-        RETURN cell('J', l);
-      ELSE
-        RETURN 0;
-      END IF;
+      -- V=IF([.$I20]="Référentiel";0;([.$AJ20]+[.$AP20]+[.$AV20]+[.$BB20]+[.$BN20])*[.G20])
+      WHEN 'V' THEN
+        IF vh.volume_horaire_ref_id IS NOT NULL THEN
+          RETURN 0;
+        ELSE
+          RETURN (cell('AJ',l) + cell('AP',l) + cell('AV',l) + cell('BB',l) + cell('BN',l)) * vh.taux_fa;
+        END IF;
 
 
 
-    -- M=SI(L$52>0;L22/L$52;0)
-    WHEN c = 'M' AND v >= 1 THEN
-      IF cell('L52') > 0 THEN
-        RETURN cell('L', l) / cell('L52');
-      ELSE
-        RETURN 0;
-      END IF;
+      -- W=IF([.$I20]="Référentiel";0;([.$AJ20]+[.$AP20]+[.$AV20]+[.$BB20]+[.$BN20])*[.H20])
+      WHEN 'W' THEN
+        IF vh.volume_horaire_ref_id IS NOT NULL THEN
+          RETURN 0;
+        ELSE
+          RETURN (cell('AJ',l) + cell('AP',l) + cell('AV',l) + cell('BB',l) + cell('BN',l)) * vh.taux_fc;
+        END IF;
 
 
 
-    -- N=L$53*M22
-    WHEN c = 'N' AND v >= 1 THEN
-      RETURN cell('L53') * cell('M', l);
+      -- X=IF([.$I20]="Référentiel";[.$BH20];0)
+      WHEN 'X' THEN
+        IF vh.volume_horaire_ref_id IS NOT NULL THEN
+          RETURN cell('BH',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
 
 
-    -- O=SI(ET(L$54=0;HC_autorisees="Oui");L22-N22;0)
-    WHEN c = 'O' AND v >= 1 THEN
-      IF cell('L54') = 0 AND NOT i.depassement_service_du_sans_hc THEN
-        RETURN cell('L', l) - cell('N', l);
-      ELSE
-        RETURN 0;
-      END IF;
+      -- Y=IF([.$I20]="Référentiel";0;([.$AL20]+[.$AR20]+[.$AX20]+[.$BD20]+[.$BP20])*[.F20])
+      WHEN 'Y' THEN
+        IF vh.volume_horaire_ref_id IS NOT NULL THEN
+          RETURN 0;
+        ELSE
+          RETURN (cell('AL',l) + cell('AR',l) + cell('AX',l) + cell('BD',l) + cell('BP',l)) * vh.taux_fi;
+        END IF;
 
 
 
-    -- Q=SI($H22="";0;SI(ET($B22<>composante_affectation;$G22<>1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0))
-    WHEN c = 'Q' AND v >= 1 THEN
-      --SI(ET($B22<>composante_affectation;$G22<>1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0)
-      IF (NOT vh.structure_is_affectation) AND vh.taux_fc <> 1 AND (NOT isD4DAC10000(vh.structure_code)) AND vh.volume_horaire_ref_id IS NULL AND vh.structure_code IS NOT NULL THEN
-        RETURN cell('J', l);
-      ELSE
-        RETURN 0;
-      END IF;
+      -- Z=IF([.$I20]="Référentiel";0;([.$AL20]+[.$AR20]+[.$AX20]+[.$BD20]+[.$BP20])*[.G20])
+      WHEN 'Z' THEN
+        IF vh.volume_horaire_ref_id IS NOT NULL THEN
+          RETURN 0;
+        ELSE
+          RETURN (cell('AL',l) + cell('AR',l) + cell('AX',l) + cell('BD',l) + cell('BP',l)) * vh.taux_fa;
+        END IF;
+
 
 
+      -- AA=IF([.$I20]="Référentiel";0;([.$AL20]+[.$AR20]+[.$AX20]+[.$BD20]+[.$BP20])*[.H20])
+      WHEN 'AA' THEN
+        IF vh.volume_horaire_ref_id IS NOT NULL THEN
+          RETURN 0;
+        ELSE
+          RETURN (cell('AL',l) + cell('AR',l) + cell('AX',l) + cell('BD',l) + cell('BP',l)) * vh.taux_fc;
+        END IF;
+
 
-    -- R=SI(Q$52>0;Q22/Q$52;0)
-    WHEN c = 'R' AND v >= 1 THEN
-      IF cell('Q52', l) > 0 THEN
-        RETURN cell('Q', l) / cell('Q52');
-      ELSE
+
+      -- AB=0
+      WHEN 'AB' THEN
         RETURN 0;
-      END IF;
 
 
 
-    -- S=Q$53*R22
-    WHEN c = 'S' AND v >= 1 THEN
-      RETURN cell('Q53') * cell('R', l);
+      -- AC=IF([.$I20]="Référentiel";[.$BJ20];0)
+      WHEN 'AC' THEN
+        IF vh.volume_horaire_ref_id IS NOT NULL THEN
+          RETURN cell('BJ',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
 
 
-    -- T=SI(ET(Q$54=0;HC_autorisees="Oui");Q22-S22;0)
-    WHEN c = 'T' AND v >= 1 THEN
-      IF cell('Q54', l) = 0 AND NOT i.depassement_service_du_sans_hc THEN
-        RETURN cell('Q', l) - cell('S', l);
-      ELSE
-        RETURN 0;
-      END IF;
+      -- AE=IF(ISERROR([.J20]);1;[.J20])
+      WHEN 'AE' THEN
+        RETURN vh.taux_service_du;
 
 
 
-    -- V=SI($H22="";0;SI(ET($G22=1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0))
-    WHEN c = 'V' AND v >= 1 THEN
-      --SI(ET($G22=1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0)
-      IF vh.taux_fc = 1 AND (NOT isD4DAC10000(vh.structure_code)) AND vh.volume_horaire_ref_id IS NULL AND vh.structure_code IS NOT NULL THEN
-        RETURN cell('J', l);
-      ELSE
-        RETURN 0;
-      END IF;
+      -- AF=IF(ISERROR([.K20]);1;[.K20])
+      WHEN 'AF' THEN
+        RETURN vh.taux_service_compl;
 
 
 
-    -- W=SI(V$52>0;V22/V$52;0)
-    WHEN c = 'W' AND v >= 1 THEN
-      IF cell('V52') > 0 THEN
-        RETURN cell('V', l) / cell('V52');
-      ELSE
-        RETURN 0;
-      END IF;
+      -- AH=IF(AND([.$A20]<>"D4DAC10000";[.$B20]="Oui";[.$D20]<>"Oui";[.$H20]<>1;[.$I20]<>"Référentiel");[.$N20]*[.$AE20];0)
+      WHEN 'AH' THEN
+        IF vh.structure_code <> 'D4DAC10000' AND vh.structure_is_affectation AND NOT vh.structure_is_exterieur AND vh.taux_fc <> 1 AND vh.volume_horaire_ref_id IS NULL THEN
+          RETURN vh.heures * cell('AE',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
 
 
-    -- X=V$53*W22
-    WHEN c = 'X' AND v >= 1 THEN
-      RETURN cell('V53') * cell('W', l);
+      -- AI15=SUM([.AH$1:.AH$1048576])
+      WHEN 'AI15' THEN
+        RETURN calcFnc('somme','AH');
 
 
 
-    -- Y=SI(ET(V$54=0;HC_autorisees="Oui");V22-X22;0)
-    WHEN c = 'Y' AND v >= 1 THEN
-      IF cell('V54') = 0 AND NOT i.depassement_service_du_sans_hc THEN
-        RETURN cell('V', l) - cell('X', l);
-      ELSE
-        RETURN 0;
-      END IF;
+      -- AI16=MIN([.AI15];i_service_du)
+      WHEN 'AI16' THEN
+        RETURN LEAST(cell('AI15'), i.service_du);
 
 
 
-    -- AA=SI($H22="";0;SI(ET($B22="D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0))
-    WHEN c = 'AA' AND v >= 1 THEN
-      --SI(ET($B22="D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0)
-      IF isD4DAC10000(vh.structure_code) AND vh.volume_horaire_ref_id IS NULL AND vh.structure_code IS NOT NULL THEN
-        RETURN cell('J', l);
-      ELSE
-        RETURN 0;
-      END IF;
+      -- AI17=i_service_du-[.AI16]
+      WHEN 'AI17' THEN
+        RETURN i.service_du - cell('AI16');
 
 
 
-    -- AB=SI(AA$52>0;AA22/AA$52;0)
-    WHEN c = 'AB' AND v >= 1 THEN
-      IF cell('AA52') > 0 THEN
-        RETURN cell('AA', l) / cell('AA52');
-      ELSE
-        RETURN 0;
-      END IF;
+      -- AI=IF([.AI$15]>0;[.AH20]/[.AI$15];0)
+      WHEN 'AI' THEN
+        IF cell('AI15') > 0 THEN
+          RETURN cell('AH',l) / cell('AI15');
+        ELSE
+          RETURN 0;
+        END IF;
 
 
 
-    -- AC=AA$53*AB22
-    WHEN c = 'AC' AND v >= 1 THEN
-      RETURN cell('AA53') * cell('AB', l);
+      -- AJ=[.AI$16]*[.AI20]
+      WHEN 'AJ' THEN
+        RETURN cell('AI16') * cell('AI',l);
 
 
 
-    -- AD=SI(ET(AA$54=0;HC_autorisees="Oui");AA22-AC22;0)
-    WHEN c = 'AD' AND v >= 1 THEN
-      IF cell('AA54') = 0 AND NOT i.depassement_service_du_sans_hc THEN
-        RETURN cell('AA', l) - cell('AC', l);
-      ELSE
-        RETURN 0;
-      END IF;
+      -- AK=IF([.AI$17]=0;([.AH20]-[.AJ20])/[.$AE20];0)
+      WHEN 'AK' THEN
+        IF cell('AI17') = 0 THEN
+          RETURN (cell('AH',l) - cell('AJ',l)) / cell('AE',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
 
 
-    -- AF=SI($H22="";0;SI(ET($D22="Référentiel");$J22;0))
-    WHEN c = 'AF' AND v >= 1 THEN
-      IF vh.volume_horaire_ref_id IS NOT NULL THEN
-        RETURN cell('J', l);
-      ELSE
-        RETURN 0;
-      END IF;
+      -- AL=IF(i_depassement_service_du_sans_hc="Non";[.AK20]*[.$AF20];0)
+      WHEN 'AL' THEN
+        IF NOT i.depassement_service_du_sans_hc THEN
+          RETURN cell('AK',l) * cell('AF',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
 
 
-    -- AG=SI(AF$52>0;AF22/AF$52;0)
-    WHEN c = 'AG' AND v >= 1 THEN
-      IF cell('AF52') > 0 THEN
-        RETURN cell('AF', l) / cell('AF52');
-      ELSE
-        RETURN 0;
-      END IF;
+      -- AN=IF(AND([.$A20]<>"D4DAC10000";[.$B20]<>"Oui";[.$D20]<>"Oui";[.$H20]<>1;[.$I20]<>"Référentiel");[.$N20]*[.$AE20];0)
+      WHEN 'AN' THEN
+        IF vh.structure_code <> 'D4DAC10000' AND NOT vh.structure_is_affectation AND NOT vh.structure_is_exterieur AND vh.taux_fc <> 1 AND vh.volume_horaire_ref_id IS NULL THEN
+          RETURN vh.heures * cell('AE',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
 
 
-    -- AH=AF$53*AG22
-    WHEN c = 'AH' AND v >= 1 THEN
-      RETURN cell('AF53') * cell('AG', l);
+      -- AO15=SUM([.AN$1:.AN$1048576])
+      WHEN 'AO15' THEN
+        RETURN calcFnc('somme','AN');
 
 
 
-    -- AI=SI(ET(AF$54=0;HC_autorisees="Oui");AF22-AH22;0)
-    WHEN c = 'AI' AND v >= 1 THEN
-      IF cell('AF54') = 0 AND NOT i.depassement_service_du_sans_hc THEN
-        RETURN cell('AF', l) - cell('AH', l);
-      ELSE
-        RETURN 0;
-      END IF;
+      -- AO16=MIN([.AO15];[.AI17])
+      WHEN 'AO16' THEN
+        RETURN LEAST(cell('AO15'), cell('AI17'));
 
 
 
-    -- AK=SI($H22="";0;SI(ET($D22<>"Référentiel";$C22<>"Oui");$J22;0))
-    WHEN c = 'AK' AND v >= 1 THEN
-      IF vh.volume_horaire_ref_id IS NULL AND vh.structure_code IS NULL THEN
-        RETURN cell('J', l);
-      ELSE
-        RETURN 0;
-      END IF;
+      -- AO17=[.AI17]-[.AO16]
+      WHEN 'AO17' THEN
+        RETURN cell('AI17') - cell('AO16');
 
 
 
-    -- AL=SI(AK$52>0;AK22/AK$52;0)
-    WHEN c = 'AL' AND v >= 1 THEN
-      IF cell('AK52') > 0 THEN
-        RETURN cell('AK', l) / cell('AK52');
-      ELSE
-        RETURN 0;
-      END IF;
+      -- AO=IF([.AO$15]>0;[.AN20]/[.AO$15];0)
+      WHEN 'AO' THEN
+        IF cell('AO15') > 0 THEN
+          RETURN cell('AN',l) / cell('AO15');
+        ELSE
+          RETURN 0;
+        END IF;
 
 
 
-    -- AM=AK$53*AL22
-    WHEN c = 'AM' AND v >= 1 THEN
-      RETURN cell('AK53') * cell('AL', l);
+      -- AP=[.AO$16]*[.AO20]
+      WHEN 'AP' THEN
+        RETURN cell('AO16') * cell('AO',l);
 
 
 
-    -- AN=SI(ET(AK$54=0;HC_autorisees="Oui");AK22-AM22;0)
-    WHEN c = 'AN' AND v >= 1 THEN
-      IF cell('AK54') = 0 AND NOT i.depassement_service_du_sans_hc THEN
-        RETURN cell('AK', l) - cell('AM', l);
-      ELSE
-        RETURN 0;
-      END IF;
+      -- AQ=IF([.AO$17]=0;([.AN20]-[.AP20])/[.$AE20];0)
+      WHEN 'AQ' THEN
+        IF cell('AO17') = 0 THEN
+          RETURN (cell('AN',l) - cell('AP',l)) / cell('AE',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
 
 
-    -- AP=($N22+$S22+$AC22+$AM22)*SI(E22="";0;E22)
-    WHEN c = 'AP' AND v >= 1 THEN
-      RETURN (cell('N', l) + cell('S', l) + cell('AC', l) + cell('AM', l)) * vh.taux_fi;
+      -- AR=IF(i_depassement_service_du_sans_hc="Non";[.AQ20]*[.$AF20];0)
+      WHEN 'AR' THEN
+        IF NOT i.depassement_service_du_sans_hc THEN
+          RETURN cell('AQ',l) * cell('AF',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
 
 
-    -- AQ=($N22+$S22+$AC22+$AM22)*SI(F22="";0;F22)
-    WHEN c = 'AQ' AND v >= 1 THEN
-      RETURN (cell('N', l) + cell('S', l) + cell('AC', l) + cell('AM', l)) * vh.taux_fa;
+      -- AT=IF(AND([.$A20]<>"D4DAC10000";[.$D20]<>"Oui";[.$H20]=1;[.$I20]<>"Référentiel");[.$N20]*[.$AE20];0)
+      WHEN 'AT' THEN
+        IF vh.structure_code <> 'D4DAC10000' AND NOT vh.structure_is_exterieur AND vh.taux_fc = 1 AND vh.volume_horaire_ref_id IS NULL THEN
+          RETURN vh.heures * cell('AE',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
 
 
-    -- AR=($N22+$S22+$X22+$AC22+$AM22)*SI(G22="";0;G22)
-    WHEN c = 'AR' AND v >= 1 THEN
-      RETURN (cell('N', l) + cell('S', l) + cell('X', l) + cell('AC', l) + cell('AM', l)) * vh.taux_fc;
+      -- AU15=SUM([.AT$1:.AT$1048576])
+      WHEN 'AU15' THEN
+        RETURN calcFnc('somme','AT');
 
 
 
-    -- AS=AH22
-    WHEN c = 'AS' AND v >= 1 THEN
-      RETURN cell('AH', l);
+      -- AU16=MIN([.AU15];[.AO17])
+      WHEN 'AU16' THEN
+        RETURN LEAST(cell('AU15'), cell('AO17'));
 
 
 
-    -- AT=($O22+$T22+$AD22+$AN22)*SI(E22="";0;E22)
-    WHEN c = 'AT' AND v >= 1 THEN
-      RETURN (cell('O', l) + cell('T', l) + cell('AD', l) + cell('AN', l)) * vh.taux_fi;
+      -- AU17=[.AO17]-[.AU16]
+      WHEN 'AU17' THEN
+        RETURN cell('AO17') - cell('AU16');
 
 
 
-    -- AU=($O22+$T22+$AD22+$AN22)*SI(F22="";0;F22)
-    WHEN c = 'AU' AND v >= 1 THEN
-      RETURN (cell('O', l) + cell('T', l) + cell('AD', l) + cell('AN', l)) * vh.taux_fa;
+      -- AU=IF([.AU$15]>0;[.AT20]/[.AU$15];0)
+      WHEN 'AU' THEN
+        IF cell('AU15') > 0 THEN
+          RETURN cell('AT',l) / cell('AU15');
+        ELSE
+          RETURN 0;
+        END IF;
 
 
 
-    -- AV=($O22+$T22+$Y22+$AD22+$AN22)*SI(G22="";0;G22)
-    WHEN c = 'AV' AND v >= 1 THEN
-      RETURN (cell('O', l) + cell('T', l) + cell('Y', l) + cell('AD', l) + cell('AN', l)) * vh.taux_fc;
+      -- AV=[.AU$16]*[.AU20]
+      WHEN 'AV' THEN
+        RETURN cell('AU16') * cell('AU',l);
 
 
 
-    -- AW=0
-    WHEN c = 'AW' AND v >= 1 THEN
-      RETURN 0;
+      -- AW=IF([.AU$17]=0;([.AT20]-[.AV20])/[.$AE20];0)
+      WHEN 'AW' THEN
+        IF cell('AU17') = 0 THEN
+          RETURN (cell('AT',l) - cell('AV',l)) / cell('AE',l);
+        ELSE
+          RETURN 0;
+        END IF;
+
+
+
+      -- AX=IF(i_depassement_service_du_sans_hc="Non";[.AW20]*[.$AF20];0)
+      WHEN 'AX' THEN
+        IF NOT i.depassement_service_du_sans_hc THEN
+          RETURN cell('AW',l) * cell('AF',l);
+        ELSE
+          RETURN 0;
+        END IF;
+
+
+
+      -- AZ=IF(AND([.$A20]="D4DAC10000";[.$I20]<>"Référentiel");[.$N20]*[.$AE20];0)
+      WHEN 'AZ' THEN
+        IF vh.structure_code = 'D4DAC10000' AND vh.volume_horaire_ref_id IS NULL THEN
+          RETURN vh.heures * cell('AE',l);
+        ELSE
+          RETURN 0;
+        END IF;
+
+
+
+      -- BA15=SUM([.AZ$1:.AZ$1048576])
+      WHEN 'BA15' THEN
+        RETURN calcFnc('somme','AZ');
+
+
+
+      -- BA16=MIN([.BA15];[.AU17])
+      WHEN 'BA16' THEN
+        RETURN LEAST(cell('BA15'), cell('AU17'));
+
+
+
+      -- BA17=[.AU17]-[.BA16]
+      WHEN 'BA17' THEN
+        RETURN cell('AU17') - cell('BA16');
+
+
+
+      -- BA=IF([.BA$15]>0;[.AZ20]/[.BA$15];0)
+      WHEN 'BA' THEN
+        IF cell('BA15') > 0 THEN
+          RETURN cell('AZ',l) / cell('BA15');
+        ELSE
+          RETURN 0;
+        END IF;
+
 
 
+      -- BB=[.BA$16]*[.BA20]
+      WHEN 'BB' THEN
+        RETURN cell('BA16') * cell('BA',l);
 
-    -- AX=AI22
-    WHEN c = 'AX' AND v >= 1 THEN
-      RETURN cell('AI', l);
 
 
+      -- BC=IF([.BA$17]=0;([.AZ20]-[.BB20])/[.$AE20];0)
+      WHEN 'BC' THEN
+        IF cell('BA17') = 0 THEN
+          RETURN (cell('AZ',l) - cell('BB',l)) / cell('AE',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
-    -- L52=SOMME(L22:L51)
-    WHEN c = 'L52' AND v >= 1 THEN
-      RETURN calcFnc('total','L');
 
 
+      -- BD=IF(i_depassement_service_du_sans_hc="Non";[.BC20]*[.$AF20];0)
+      WHEN 'BD' THEN
+        IF NOT i.depassement_service_du_sans_hc THEN
+          RETURN cell('BC',l) * cell('AF',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
-    -- L53=MIN(L52;service_du)
-    WHEN c = 'L53' AND v >= 1 THEN
-      RETURN LEAST(cell('L52'), i.service_du);
 
 
+      -- BF=IF([.$I20]="Référentiel";[.$N20]*[.$AE20];0)
+      WHEN 'BF' THEN
+        IF vh.volume_horaire_ref_id IS NOT NULL THEN
+          RETURN vh.heures * cell('AE',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
-    -- L54=service_du-L53
-    WHEN c = 'L54' AND v >= 1 THEN
-      RETURN i.service_du - cell('L53');
 
 
+      -- BG15=SUM([.BF$1:.BF$1048576])
+      WHEN 'BG15' THEN
+        RETURN calcFnc('somme','BF');
 
-    -- Q52=SOMME(Q22:Q51)
-    WHEN c = 'Q52' AND v >= 1 THEN
-      RETURN calcFnc('total','Q');
 
 
+      -- BG16=MIN([.BG15];[.BA17])
+      WHEN 'BG16' THEN
+        RETURN LEAST(cell('BG15'), cell('BA17'));
 
-    -- Q53=MIN(Q52;L54)
-    WHEN c = 'Q53' AND v >= 1 THEN
-      RETURN LEAST(cell('Q52'), cell('L54'));
 
 
+      -- BG17=[.BA17]-[.BG16]
+      WHEN 'BG17' THEN
+        RETURN cell('BA17') - cell('BG16');
 
-    -- Q54=L54-Q53
-    WHEN c = 'Q54' AND v >= 1 THEN
-      RETURN cell('L54') - cell('Q53');
 
 
+      -- BG=IF([.BG$15]>0;[.BF20]/[.BG$15];0)
+      WHEN 'BG' THEN
+        IF cell('BG15') > 0 THEN
+          RETURN cell('BF',l) / cell('BG15');
+        ELSE
+          RETURN 0;
+        END IF;
 
-    -- V52=SOMME(V22:V51)
-    WHEN c = 'V52' AND v >= 1 THEN
-      RETURN calcFnc('total','V');
 
 
+      -- BH=[.BG$16]*[.BG20]
+      WHEN 'BH' THEN
+        RETURN cell('BG16') * cell('BG',l);
 
-    -- V53=MIN(V52;Q54)
-    WHEN c = 'V53' AND v >= 1 THEN
-      RETURN LEAST(cell('V52'), cell('Q54'));
 
 
+      -- BI=IF([.BG$17]=0;([.BF20]-[.BH20])/[.$AE20];0)
+      WHEN 'BI' THEN
+        IF cell('BG17') = 0 THEN
+          RETURN (cell('BF',l) - cell('BH',l)) / cell('AE',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
-    -- V54=Q54-V53
-    WHEN c = 'V54' AND v >= 1 THEN
-      RETURN cell('Q54') - cell('V53');
 
 
+      -- BJ=IF(i_depassement_service_du_sans_hc="Non";[.BI20]*[.$AF20];0)
+      WHEN 'BJ' THEN
+        IF NOT i.depassement_service_du_sans_hc THEN
+          RETURN cell('BI',l) * cell('AF',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
-    -- AA52=SOMME(AA22:AA51)
-    WHEN c = 'AA52' AND v >= 1 THEN
-      RETURN calcFnc('total','AA');
 
 
+      -- BL=IF(AND([.$D20]="Oui";[.$I20]<>"Référentiel");[.$N20]*[.$AE20];0)
+      WHEN 'BL' THEN
+        IF vh.structure_is_exterieur AND vh.volume_horaire_ref_id IS NULL THEN
+          RETURN vh.heures * cell('AE',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
-    -- AA53=MIN(AA52;V54)
-    WHEN c = 'AA53' AND v >= 1 THEN
-      RETURN LEAST(cell('AA52'), cell('V54'));
 
 
+      -- BM15=SUM([.BL$1:.BL$1048576])
+      WHEN 'BM15' THEN
+        RETURN calcFnc('somme','BL');
 
-    -- AA54=V54-AA53
-    WHEN c = 'AA54' AND v >= 1 THEN
-      RETURN cell('V54') - cell('AA53');
 
 
+      -- BM16=MIN([.BM15];[.BG17])
+      WHEN 'BM16' THEN
+        RETURN LEAST(cell('BM15'), cell('BG17'));
 
-    -- AF52=SOMME(AF22:AF51)
-    WHEN c = 'AF52' AND v >= 1 THEN
-      RETURN calcFnc('total','AF');
 
 
+      -- BM17=[.BG17]-[.BM16]
+      WHEN 'BM17' THEN
+        RETURN cell('BG17') - cell('BM16');
 
-    -- AF53=MIN(AF52;AA54)
-    WHEN c = 'AF53' AND v >= 1 THEN
-      RETURN LEAST(cell('AF52'), cell('AA54'));
 
 
+      -- BM=IF([.BM$15]>0;[.BL20]/[.BM$15];0)
+      WHEN 'BM' THEN
+        IF cell('BM15') > 0 THEN
+          RETURN cell('BL',l) / cell('BM15');
+        ELSE
+          RETURN 0;
+        END IF;
 
-    -- AF54=AA54-AF53
-    WHEN c = 'AF54' AND v >= 1 THEN
-      RETURN cell('AA54') - cell('AF53');
 
 
+      -- BN=[.BM$16]*[.BM20]
+      WHEN 'BN' THEN
+        RETURN cell('BM16') * cell('BM',l);
 
-    -- AK52=SOMME(AK22:AK51)
-    WHEN c = 'AK52' AND v >= 1 THEN
-      RETURN calcFnc('total','AK');
 
 
+      -- BO=IF([.BM$17]=0;([.BL20]-[.BN20])/[.$AE20];0)
+      WHEN 'BO' THEN
+        IF cell('BM17') = 0 THEN
+          RETURN (cell('BL',l) - cell('BN',l)) / cell('AE',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
-    -- AK53=MIN(AK52;AF54)
-    WHEN c = 'AK53' AND v >= 1 THEN
-      RETURN LEAST(cell('AK52'), cell('AF54'));
 
 
+      -- BP=IF(i_depassement_service_du_sans_hc="Non";[.BO20]*[.$AF20];0)
+      WHEN 'BP' THEN
+        IF NOT i.depassement_service_du_sans_hc THEN
+          RETURN cell('BO',l) * cell('AF',l);
+        ELSE
+          RETURN 0;
+        END IF;
 
-    -- AK54=AF54-AK53
-    WHEN c = 'AK54' AND v >= 1 THEN
-      RETURN cell('AF54') - cell('AK53');
 
 
 
     ELSE
+      dbms_output.put_line('La colonne c=' || c || ', l=' || l || ' n''existe pas!');
       raise_application_error( -20001, 'La colonne c=' || c || ', l=' || l || ' n''existe pas!');
-  END CASE; END;
+  END CASE;
+  raise_application_error( -20001, 'La colonne c=' || c || ', l=' || l || ' n''existe pas!');
+
+  END;
 
 
 
@@ -554,23 +623,27 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS
   BEGIN
     feuille.delete;
 
+    IF ose_formule.intervenant.depassement_service_du_sans_hc THEN -- HC traitées comme du service
+      ose_formule.intervenant.service_du := ose_formule.intervenant.heures_service_statutaire + ose_formule.intervenant.heures_service_modifie;
+    END IF;
+
     -- transmission des résultats aux volumes horaires et volumes horaires référentiel
     FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP
-      ose_formule.volumes_horaires.items(l).service_fi               := mainCell('Service FI', 'AP',l);
-      ose_formule.volumes_horaires.items(l).service_fa               := mainCell('Service FA', 'AQ',l);
-      ose_formule.volumes_horaires.items(l).service_fc               := mainCell('Service FC', 'AR',l);
-      ose_formule.volumes_horaires.items(l).service_referentiel      := mainCell('Service référentiel', 'AS',l);
-      ose_formule.volumes_horaires.items(l).heures_compl_fi          := mainCell('Heures compl. FI', 'AT',l);
-      ose_formule.volumes_horaires.items(l).heures_compl_fa          := mainCell('Heures compl. FA', 'AU',l);
-      ose_formule.volumes_horaires.items(l).heures_compl_fc          := mainCell('Heures compl. FC', 'AV',l);
-      ose_formule.volumes_horaires.items(l).heures_compl_fc_majorees := mainCell('Heures compl. FC Maj.', 'AW',l);
-      ose_formule.volumes_horaires.items(l).heures_compl_referentiel := mainCell('Heures compl. référentiel', 'AX',l);
+      ose_formule.volumes_horaires.items(l).service_fi               := mainCell('Service FI', 'U',l);
+      ose_formule.volumes_horaires.items(l).service_fa               := mainCell('Service FA', 'V',l);
+      ose_formule.volumes_horaires.items(l).service_fc               := mainCell('Service FC', 'W',l);
+      ose_formule.volumes_horaires.items(l).service_referentiel      := mainCell('Service référentiel', 'X',l);
+      ose_formule.volumes_horaires.items(l).heures_compl_fi          := mainCell('Heures compl. FI', 'Y',l);
+      ose_formule.volumes_horaires.items(l).heures_compl_fa          := mainCell('Heures compl. FA', 'Z',l);
+      ose_formule.volumes_horaires.items(l).heures_compl_fc          := mainCell('Heures compl. FC', 'AA',l);
+      ose_formule.volumes_horaires.items(l).heures_compl_fc_majorees := mainCell('Heures compl. FC Maj.', 'AB',l);
+      ose_formule.volumes_horaires.items(l).heures_compl_referentiel := mainCell('Heures compl. référentiel', 'AC',l);
     END LOOP;
   END;
 
 
 
-FUNCTION INTERVENANT_QUERY RETURN CLOB IS
+  FUNCTION INTERVENANT_QUERY RETURN CLOB IS
   BEGIN
     RETURN '
     SELECT
@@ -600,7 +673,8 @@ FUNCTION INTERVENANT_QUERY RETURN CLOB IS
     FROM
       V_FORMULE_VOLUME_HORAIRE fvh
     ORDER BY
-      ordre';
+      ordre
+    ';
   END;
 
 END FORMULE_LYON2;
\ No newline at end of file