diff --git a/src/lib/components/test_cases/TestCaseGraph.svelte b/src/lib/components/test_cases/TestCaseGraph.svelte
index bf35c38ced913ea9c2572cb7269a32146c6f11ce..da9da53febe57b789535b964abad8f6fd2668991 100644
--- a/src/lib/components/test_cases/TestCaseGraph.svelte
+++ b/src/lib/components/test_cases/TestCaseGraph.svelte
@@ -169,244 +169,7 @@
       visibleDecompositionsGraph !== undefined
     ) {
       untrack(() => {
-        const ressourcesBrutes = [
-          "chomage_brut",
-          "remuneration_brute",
-          "retraite_brute",
-        ]
-
-        if (waterfall.name === "brut_to_disponible") {
-          const decompositions = visibleDecompositionsGraph.filter(
-            (decomposition) =>
-              !decomposition.trunk ||
-              ressourcesBrutes.includes(decomposition.decomposition.name) ||
-              decomposition.decomposition.name === "revenu_disponible",
-          )
-
-          const versementBrutIndex = decompositions.findIndex((decomposition) =>
-            ressourcesBrutes.includes(decomposition.decomposition.name),
-          )
-          const prestationsIndex = decompositions.findIndex(
-            (decomposition) =>
-              decomposition.decomposition.name === "prestations_sociales",
-          )
-          const revenuIndex = decompositions.findIndex(
-            (decomposition) =>
-              decomposition.decomposition.name === "revenu_disponible",
-          )
-
-          const prelevementsDecompositions = [
-            ...decompositions.slice(0, versementBrutIndex),
-            ...decompositions
-              .slice(versementBrutIndex, prestationsIndex)
-              .filter(
-                (decomposition) =>
-                  ressourcesBrutes.includes(decomposition.decomposition.name) ||
-                  getLatestVisibleCalculation(decomposition.rows)?.isNegative,
-              ),
-          ]
-
-          const complementsDeRessourcesDecompositions = decompositions
-            .slice(versementBrutIndex, prestationsIndex)
-            .filter(
-              (decomposition) =>
-                !ressourcesBrutes.includes(decomposition.decomposition.name) &&
-                !getLatestVisibleCalculation(decomposition.rows)?.isNegative,
-            )
-
-          const prestationsDecompositions = decompositions.slice(
-            prestationsIndex,
-            revenuIndex,
-          )
-
-          const revenuDisponibleDecomposition = decompositions[revenuIndex]
-          const revenuDisponibleValues = generateValues([
-            revenuDisponibleDecomposition,
-          ])
-
-          const [
-            prelevementsValues,
-            complementsDeRessourcesValues,
-            prestationsValues,
-          ] = stackValues(
-            generateValues(prelevementsDecompositions),
-            generateValues(complementsDeRessourcesDecompositions),
-            generateValues(prestationsDecompositions, true),
-          )
-
-          variableValues = [
-            prelevementsValues,
-            complementsDeRessourcesValues,
-            prestationsValues,
-            revenuDisponibleValues,
-          ]
-
-          const splitIndex =
-            prelevementsValues.findLastIndex((variable) =>
-              ressourcesBrutes.includes(variable.name),
-            ) + 1
-          variableGroups = [
-            {
-              variables: [
-                ...prelevementsValues.slice(0, splitIndex).reverse(),
-                ...complementsDeRessourcesValues,
-                ...revenuDisponibleValues,
-              ],
-            },
-            {
-              css: "text-red-600",
-              label: "Prélèvements",
-              name: "prelevements",
-              hideOpen: true,
-              variables: prelevementsValues.slice(splitIndex),
-            },
-            {
-              css: "text-green-800",
-              label: "Prestations",
-              name: "prestations",
-              hideOpen: true,
-              variables: prestationsValues,
-            },
-          ]
-
-          for (const [groupIndex, group] of variableGroups.entries()) {
-            for (const variable of group.variables) {
-              for (const row of variable.rows) {
-                const key = `${variable.name}_${row.calculationName}`
-                if (
-                  variableCustomizations[variable.name] === undefined ||
-                  (variableCustomizations[key] === undefined &&
-                    row.calculationName !== "law" &&
-                    row.calculationName !== "revaluation")
-                ) {
-                  const types = ["base", "prelevement", "prestation"]
-                  variableCustomizations[key] =
-                    variableCustomizations[
-                      getVariableCustomizationName(
-                        variable.parent,
-                        row.calculationName,
-                      )
-                    ] ??
-                    defaultCustomization[waterfall.name][types[groupIndex]][
-                      row.calculationName === "revaluation"
-                        ? "law"
-                        : row.calculationName
-                    ]
-                }
-              }
-            }
-          }
-        } else {
-          const decompositions = visibleDecompositionsGraph.filter(
-            (decomposition) =>
-              !decomposition.trunk ||
-              decomposition.decomposition.name === "remuneration_brute" ||
-              decomposition.decomposition.name === "salaire_super_brut",
-          )
-
-          const allValues = generateValues(decompositions)
-
-          const versementBrutIndex = allValues.findIndex(
-            (value) => value.name === "remuneration_brute",
-          )
-          const allegementGeneralIndex = allValues.findIndex(
-            (value) => value.name === "allegement_general",
-          )
-
-          const versementBrutValues = allValues.slice(0, versementBrutIndex + 1)
-
-          const superBrutValues = allValues.slice(-1)
-
-          const cotisationsValues = allValues.slice(
-            versementBrutIndex + 1,
-            allegementGeneralIndex,
-          )
-
-          const allegementsValues = allValues.slice(allegementGeneralIndex, -1)
-
-          variableValues = [
-            versementBrutValues,
-            cotisationsValues,
-            allegementsValues,
-            superBrutValues,
-          ]
-
-          variableGroups = [
-            {
-              variables: [
-                ...allValues.slice(0, versementBrutIndex + 1),
-                ...allValues.slice(-1),
-              ],
-            },
-            {
-              css: "text-green-800",
-              label: "Cotisations employeur",
-              name: "cotisations_employeur",
-              hideOpen: true,
-              variables: allValues.slice(
-                allValues.findIndex(
-                  (value) =>
-                    value.name === "cotisations_employeur_securite_sociale",
-                ),
-                allegementGeneralIndex,
-              ),
-            },
-            {
-              css: "text-red-600",
-              label: "Allègements",
-              name: "allegements",
-              hideOpen: true,
-              variables: allValues.slice(allegementGeneralIndex, -1),
-            },
-          ]
-
-          for (const [groupIndex, group] of variableGroups.entries()) {
-            for (const variable of group.variables) {
-              for (const row of variable.rows) {
-                const key = `${variable.name}_${row.calculationName}`
-                if (
-                  variableCustomizations[variable.name] === undefined ||
-                  (variableCustomizations[key] === undefined &&
-                    row.calculationName !== "law" &&
-                    row.calculationName !== "revaluation")
-                ) {
-                  const types = ["base", "cotisation", "allegement"]
-                  variableCustomizations[key] =
-                    variableCustomizations[
-                      getVariableCustomizationName(
-                        variable.parent,
-                        row.calculationName,
-                      )
-                    ] ??
-                    defaultCustomization[waterfall.name][types[groupIndex]][
-                      row.calculationName === "revaluation"
-                        ? "law"
-                        : row.calculationName
-                    ]
-                }
-              }
-            }
-          }
-        }
-
-        maxVariableValue = variableValues.reduce(
-          (max: number, values: VariableGraph[]) => {
-            max = Math.max(
-              max,
-              Math.max(
-                ...values.map(({ rows }) =>
-                  Math.max(
-                    ...rows.map(({ summedValues }) =>
-                      Math.max(...summedValues),
-                    ),
-                  ),
-                ),
-              ),
-            )
-            return max
-          },
-          0,
-        )
+        updateVariableValuesAndCustomizations()
       })
     }
   })
@@ -871,6 +634,245 @@
       requestAxesCalculation()
     }
   }
+
+  function updateVariableValuesAndCustomizations() {
+    const ressourcesBrutes = [
+      "chomage_brut",
+      "remuneration_brute",
+      "retraite_brute",
+    ]
+
+    if (waterfall.name === "brut_to_disponible") {
+      const decompositions = visibleDecompositionsGraph!.filter(
+        (decomposition) =>
+          !decomposition.trunk ||
+          ressourcesBrutes.includes(decomposition.decomposition.name) ||
+          decomposition.decomposition.name === "revenu_disponible",
+      )
+
+      const versementBrutIndex = decompositions.findIndex((decomposition) =>
+        ressourcesBrutes.includes(decomposition.decomposition.name),
+      )
+      const prestationsIndex = decompositions.findIndex(
+        (decomposition) =>
+          decomposition.decomposition.name === "prestations_sociales",
+      )
+      const revenuIndex = decompositions.findIndex(
+        (decomposition) =>
+          decomposition.decomposition.name === "revenu_disponible",
+      )
+
+      const prelevementsDecompositions = [
+        ...decompositions.slice(0, versementBrutIndex),
+        ...decompositions
+          .slice(versementBrutIndex, prestationsIndex)
+          .filter(
+            (decomposition) =>
+              ressourcesBrutes.includes(decomposition.decomposition.name) ||
+              getLatestVisibleCalculation(decomposition.rows)?.isNegative,
+          ),
+      ]
+
+      const complementsDeRessourcesDecompositions = decompositions
+        .slice(versementBrutIndex, prestationsIndex)
+        .filter(
+          (decomposition) =>
+            !ressourcesBrutes.includes(decomposition.decomposition.name) &&
+            !getLatestVisibleCalculation(decomposition.rows)?.isNegative,
+        )
+
+      const prestationsDecompositions = decompositions.slice(
+        prestationsIndex,
+        revenuIndex,
+      )
+
+      const revenuDisponibleDecomposition = decompositions[revenuIndex]
+      const revenuDisponibleValues = generateValues([
+        revenuDisponibleDecomposition,
+      ])
+
+      const [
+        prelevementsValues,
+        complementsDeRessourcesValues,
+        prestationsValues,
+      ] = stackValues(
+        generateValues(prelevementsDecompositions),
+        generateValues(complementsDeRessourcesDecompositions),
+        generateValues(prestationsDecompositions, true),
+      )
+
+      variableValues = [
+        prelevementsValues,
+        complementsDeRessourcesValues,
+        prestationsValues,
+        revenuDisponibleValues,
+      ]
+
+      const splitIndex =
+        prelevementsValues.findLastIndex((variable) =>
+          ressourcesBrutes.includes(variable.name),
+        ) + 1
+      variableGroups = [
+        {
+          variables: [
+            ...prelevementsValues.slice(0, splitIndex).reverse(),
+            ...complementsDeRessourcesValues,
+            ...revenuDisponibleValues,
+          ],
+        },
+        {
+          css: "text-red-600",
+          label: "Prélèvements",
+          name: "prelevements",
+          hideOpen: true,
+          variables: prelevementsValues.slice(splitIndex),
+        },
+        {
+          css: "text-green-800",
+          label: "Prestations",
+          name: "prestations",
+          hideOpen: true,
+          variables: prestationsValues,
+        },
+      ]
+
+      for (const [groupIndex, group] of variableGroups.entries()) {
+        for (const variable of group.variables) {
+          for (const row of variable.rows) {
+            const key = `${variable.name}_${row.calculationName}`
+            if (
+              variableCustomizations[key] === undefined &&
+              ((row.calculationName !== "law" &&
+                row.calculationName !== "revaluation") ||
+                variableCustomizations[variable.name] === undefined)
+            ) {
+              const types = ["base", "prelevement", "prestation"]
+              variableCustomizations[key] =
+                variableCustomizations[
+                  getVariableCustomizationName(
+                    variable.parent,
+                    row.calculationName,
+                  )
+                ] ??
+                defaultCustomization[waterfall.name][types[groupIndex]][
+                  row.calculationName === "revaluation"
+                    ? "law"
+                    : row.calculationName
+                ]
+            }
+          }
+        }
+      }
+    } else {
+      const decompositions = visibleDecompositionsGraph.filter(
+        (decomposition) =>
+          !decomposition.trunk ||
+          decomposition.decomposition.name === "remuneration_brute" ||
+          decomposition.decomposition.name === "salaire_super_brut",
+      )
+
+      const allValues = generateValues(decompositions)
+
+      const versementBrutIndex = allValues.findIndex(
+        (value) => value.name === "remuneration_brute",
+      )
+      const allegementGeneralIndex = allValues.findIndex(
+        (value) => value.name === "allegement_general",
+      )
+
+      const versementBrutValues = allValues.slice(0, versementBrutIndex + 1)
+
+      const superBrutValues = allValues.slice(-1)
+
+      const cotisationsValues = allValues.slice(
+        versementBrutIndex + 1,
+        allegementGeneralIndex,
+      )
+
+      const allegementsValues = allValues.slice(allegementGeneralIndex, -1)
+
+      variableValues = [
+        versementBrutValues,
+        cotisationsValues,
+        allegementsValues,
+        superBrutValues,
+      ]
+
+      variableGroups = [
+        {
+          variables: [
+            ...allValues.slice(0, versementBrutIndex + 1),
+            ...allValues.slice(-1),
+          ],
+        },
+        {
+          css: "text-green-800",
+          label: "Cotisations employeur",
+          name: "cotisations_employeur",
+          hideOpen: true,
+          variables: allValues.slice(
+            allValues.findIndex(
+              (value) =>
+                value.name === "cotisations_employeur_securite_sociale",
+            ),
+            allegementGeneralIndex,
+          ),
+        },
+        {
+          css: "text-red-600",
+          label: "Allègements",
+          name: "allegements",
+          hideOpen: true,
+          variables: allValues.slice(allegementGeneralIndex, -1),
+        },
+      ]
+
+      for (const [groupIndex, group] of variableGroups.entries()) {
+        for (const variable of group.variables) {
+          for (const row of variable.rows) {
+            const key = `${variable.name}_${row.calculationName}`
+            if (
+              variableCustomizations[key] === undefined &&
+              ((row.calculationName !== "law" &&
+                row.calculationName !== "revaluation") ||
+                variableCustomizations[variable.name] === undefined)
+            ) {
+              const types = ["base", "cotisation", "allegement"]
+              variableCustomizations[key] =
+                variableCustomizations[
+                  getVariableCustomizationName(
+                    variable.parent,
+                    row.calculationName,
+                  )
+                ] ??
+                defaultCustomization[waterfall.name][types[groupIndex]][
+                  row.calculationName === "revaluation"
+                    ? "law"
+                    : row.calculationName
+                ]
+            }
+          }
+        }
+      }
+    }
+
+    maxVariableValue = variableValues.reduce(
+      (max: number, values: VariableGraph[]) => {
+        max = Math.max(
+          max,
+          Math.max(
+            ...values.map(({ rows }) =>
+              Math.max(
+                ...rows.map(({ summedValues }) => Math.max(...summedValues)),
+              ),
+            ),
+          ),
+        )
+        return max
+      },
+      0,
+    )
+  }
 </script>
 
 {#if situation.slider !== undefined && visibleDecompositionsGraph !== undefined}
@@ -1065,6 +1067,7 @@
                                     row.calculationName,
                                   )
                                 ].selected = isSelected ? "false" : "true"
+                                updateVariableValuesAndCustomizations()
                               }}
                             >
                               <div