diff --git a/src/app/components/fixedvar-results/var-results.component.ts b/src/app/components/fixedvar-results/var-results.component.ts
index 2151ddd92552b66eb6812e0183cb579fd5166085..f737e1d4c03120fa6833e76c3dd0eb8ed21093d8 100644
--- a/src/app/components/fixedvar-results/var-results.component.ts
+++ b/src/app/components/fixedvar-results/var-results.component.ts
@@ -15,6 +15,9 @@ import { ResultsComponent } from "./results.component";
 })
 export class VarResultsComponent extends ResultsComponent {
 
+    /** size of the longest variated parameter */
+    public size: number;
+
     /** résultats non mis en forme */
     protected _varResults: VarResults;
 
@@ -33,54 +36,56 @@ export class VarResultsComponent extends ResultsComponent {
         super();
     }
 
+    /** Refreshes results and builds the dataset */
     public set results(r: VarResults) {
         this._varResults = r;
-
         this._results = [];
         this._headers = [];
 
+        const nDigits = this.appSetupService.displayDigits;
+
         if (this._varResults) {
-            const nDigits = this.appSetupService.displayDigits;
-            let i = 0;
-            for (const x of this._varResults.variatedParameter.valuesIterator) {
-                const pval = x.toFixed(nDigits);
-                this._results.push({ "param": pval, "result": this._varResults.resultElements[i] });
-                i++;
+            // A. build headers
+            for (let i = 0; i < this._varResults.variatedParameters.length; i++) {
+                this._headers.push(this._varResults.variableParamHeaders[i]);
             }
-
-            this._headers.push(this._varResults.variableParamHeader);
             if (this._varResults.calculatedParameterHeader) {
                 this._headers.push(this._varResults.calculatedParameterHeader);
             }
-
             this._headers = this._headers.concat(this._varResults.extraResultHeaders);
-        }
-    }
 
-    public get hasResults(): boolean {
-        return this._varResults && this._varResults.hasResults;
-    }
-
-    public get headers() {
-        return this._headers;
-    }
+            // B. pre-extract variable parameters valueslet longest = 0;
+            const varValues = [];
+            // find longest list
+            this.size = 0;
+            for (let i = 0; i < this._varResults.variatedParameters.length; i++) {
+                const vs = this._varResults.variatedParameters[i].valuesIterator.count();
+                if (vs > this.size) {
+                    this.size = vs;
+                }
+            }
+            // get extended values lists for each variable parameter
+            for (const v of this._varResults.variatedParameters) {
+                const vv = [];
+                const iter = v.getExtendedValuesIterator(this.size);
+                while (iter.hasNext) {
+                    const nv = iter.next();
+                    vv.push(nv.value.toFixed(nDigits));
+                }
+                varValues.push(vv);
+            }
 
-    /**
-     * Returns a combination of and results and extraResults for mat-table
-     */
-    public get dataSet() {
-        const data = [];
-        const nDigits = this.appSetupService.displayDigits;
-        if (this._results) {
-            for (let i = 0; i < this._results.length; i++) {
-                const r = this._results[i];
+            // C. build dataset
+            for (let i = 0; i < this._varResults.resultElements.length; i++) {
                 const re: ResultElement = this._varResults.resultElements[i];
-
                 if (re) {
-                    // for each computation step, build ordered list of : variable param value; result; extra results
+                    // build ordered list of : variable params values; result; extra results
+                    const list = [];
 
-                    // 1. variable param value
-                    const list = [ r.param ];
+                    // 1. variable params values for this computation step
+                    for (const vv of varValues) {
+                        list.push(vv[i]);
+                    }
 
                     // 2. result
                     if (re.vCalc) { // sometimes does no exist (ex: Section Parametree)
@@ -97,11 +102,25 @@ export class VarResultsComponent extends ResultsComponent {
                         }
 
                     }
-                    data.push(list);
+                    this._results.push(list);
                 }
             }
         }
-        return data;
+    }
+
+    public get hasResults(): boolean {
+        return this._varResults && this._varResults.hasResults;
+    }
+
+    public get headers() {
+        return this._headers;
+    }
+
+    /**
+     * Returns a combination of results and extraResults for mat-table
+     */
+    public get dataSet() {
+        return this._results;
     }
 
     public exportAsSpreadsheet() {
diff --git a/src/app/components/remous-results/remous-results.component.ts b/src/app/components/remous-results/remous-results.component.ts
index f11fa831b984fb65843f48fe335130c958ceb23d..f5328dc134c1abbd23c1687cf375f4a98c5ae93e 100644
--- a/src/app/components/remous-results/remous-results.component.ts
+++ b/src/app/components/remous-results/remous-results.component.ts
@@ -368,7 +368,7 @@ export class RemousResultsComponent extends ResultsComponent implements DoCheck
     }
 
     private get abscisseIterator(): INumberIterator {
-        return this._remousResults.varResults.variatedParameter.paramDefinition.valuesIterator;
+        return this._remousResults.varResults.variatedParameters[0].paramDefinition.valuesIterator;
     }
 
     private connectRessaut(lineFlu: LineData, lineTor: LineData) {
diff --git a/src/app/formulaire/definition/form-compute-fixedvar.ts b/src/app/formulaire/definition/form-compute-fixedvar.ts
index 875a52747478bf419389556ca866c3ce033eef8c..08c12186f48d4bda67b88076264f4ed650edd790 100644
--- a/src/app/formulaire/definition/form-compute-fixedvar.ts
+++ b/src/app/formulaire/definition/form-compute-fixedvar.ts
@@ -1,4 +1,4 @@
-import { Nub, Result, ComputeNode } from "jalhyd";
+import { Nub } from "jalhyd";
 
 import { FormCompute } from "./form-compute";
 import { NgParameter, ParamRadioConfig } from "../ngparam";
@@ -14,18 +14,18 @@ export class FormComputeFixedVar extends FormCompute {
         return this._formResult as FormResultFixedVar;
     }
 
-    private getVariatedParameter(): NgParameter {
-        const res = this._formBase.getDisplayedParamFromState(ParamRadioConfig.VAR);
-        if (res !== undefined) {
-            return res;
-        }
-
-        const pms = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.LINK);
-        for (const p of pms) {
-            if (p.paramDefinition.hasMultipleValues) {
-                return p;
+    private getVariatedParameters(): NgParameter[] {
+        let res: NgParameter[] = [];
+        res = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.VAR);
+        if (res.length === 0) {
+            const pms = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.LINK);
+            for (const p of pms) {
+                if (p.paramDefinition.hasMultipleValues) {
+                    res.push(p);
+                }
             }
         }
+        return res;
     }
 
     private getComputedParameter(): NgParameter {
@@ -42,15 +42,15 @@ export class FormComputeFixedVar extends FormCompute {
         const computedParam: NgParameter = this.getComputedParameter();
         this.formResult.resetResults(); // to avoid adding fixed parameters more than once (see below)
         this.formResult.addFixedParameters();
-        const varParam: NgParameter = this.getVariatedParameter();
+        const varParams: NgParameter[] = this.getVariatedParameters();
 
-        if (varParam === undefined) {
+        if (varParams.length === 0) {
             // pas de paramètre à varier
             this.formResult.fixedResults.result = nub.result;
             this.formResult.fixedResults.calculatedParameter = computedParam;
         } else {
             // il y a un paramètre à varier
-            this.formResult.varResults.variatedParameter = varParam;
+            this.formResult.varResults.variatedParameters = varParams;
             this.formResult.varResults.calculatedParameter = computedParam;
 
             this.formResult.varResults.result = nub.result;
diff --git a/src/app/formulaire/definition/form-compute-section-parametree.ts b/src/app/formulaire/definition/form-compute-section-parametree.ts
index d30352a577096f548986041f60cde084b368e641..3e833eed46eeac7a0a991bafde36403d373036b9 100644
--- a/src/app/formulaire/definition/form-compute-section-parametree.ts
+++ b/src/app/formulaire/definition/form-compute-section-parametree.ts
@@ -39,10 +39,10 @@ export class FormComputeSectionParametree extends FormCompute {
         const sect: acSection = sectNub.section;
         this._sectionResults.section = sect;
 
-        const varParam = this._formSection.getSectionVariatedParameter();
-        if (varParam) {
+        const varParams = this._formSection.getSectionVariatedParameters();
+        if (varParams.length > 0) {
             // résultats variés avec tous les résultats complémentaires
-            this._varResults.variatedParameter = varParam;
+            this._varResults.variatedParameters = varParams;
             this._varResults.result = sectNub.result;
             this._varResults.update(false);
         } else {
diff --git a/src/app/formulaire/definition/form-def-section.ts b/src/app/formulaire/definition/form-def-section.ts
index 309a06613147474af44c2a683d39d325122842e3..a2c011e8df49e4a62fa8010da406a92e1322c1dd 100644
--- a/src/app/formulaire/definition/form-def-section.ts
+++ b/src/app/formulaire/definition/form-def-section.ts
@@ -18,8 +18,8 @@ export class FormDefSection {
         return this._sectionSourceId !== undefined;
     }
 
-    public getSectionVariatedParameter(): NgParameter {
-        return this._formBase.getDisplayedParamFromState(ParamRadioConfig.VAR);
+    public getSectionVariatedParameters(): NgParameter[] {
+        return this._formBase.getDisplayedParamListFromState(ParamRadioConfig.VAR);
     }
 
     public getSectionComputedParam(): { symbol: string, label: string } {
diff --git a/src/app/formulaire/ngparam.ts b/src/app/formulaire/ngparam.ts
index 0154d6ae487375456d7897b826d265f59d6df597..679d3b1f3f4058d76279820637706cf9e3224621 100644
--- a/src/app/formulaire/ngparam.ts
+++ b/src/app/formulaire/ngparam.ts
@@ -237,6 +237,10 @@ export class NgParameter extends InputField implements Observer {
         return this._paramDef.valueList;
     }
 
+    public get inferredValuesList() {
+        return this._paramDef.getInferredValuesList();
+    }
+
     public get isValid() {
         if (this.radioState === undefined) {
             return false;
@@ -296,6 +300,10 @@ export class NgParameter extends InputField implements Observer {
         }
     }
 
+    public getExtendedValuesIterator(size: number): INumberIterator {
+        return this._paramDef.getExtendedValuesIterator(size);
+    }
+
     /**
      * notification envoyée après la modification de la valeur du paramètre
      */
diff --git a/src/app/results/remous-results.ts b/src/app/results/remous-results.ts
index 1127bf61fb4b6b2015f46bee279a9dbb3bfccfbe..6d6e1f6e104badd016b4c449f01127e889ee05f0 100644
--- a/src/app/results/remous-results.ts
+++ b/src/app/results/remous-results.ts
@@ -137,7 +137,7 @@ export class RemousResults extends CalculatorResults {
         this._log.addLog(this._result.globalLog);
 
         this._varResults = new VarResults();
-        this._varResults.variatedParameter = new NgParameter(this._xValues, undefined);
+        this._varResults.variatedParameters = [ new NgParameter(this._xValues, undefined) ];
         this._varResults.calculatedParameter
             = new NgParameter(new ParamDefinition(null, "Ligne d'eau", ParamDomainValue.POS_NULL), undefined);
         this._varResults.result = this._result;
diff --git a/src/app/results/var-results.ts b/src/app/results/var-results.ts
index 891f7c008aa8375fef89edc1c1b5469eafb942a8..f00cfdabb8abef4755c5b1020d393aba31fd4cf2 100644
--- a/src/app/results/var-results.ts
+++ b/src/app/results/var-results.ts
@@ -8,14 +8,14 @@ import { GraphType } from "./graph-type";
 
 export class VarResults extends CalculatedParamResults implements PlottableData {
     /**
-     * paramètre varié
+     * paramètres variés
      */
-    private _variatedParam: NgParameter;
+    private _variatedParams: NgParameter[];
 
     /**
-     * titre de la 1ère colonne des résultats variés
+     * titre des colonnes des résultats variés
      */
-    private _variableParamHeader: string;
+    private _variableParamHeaders: string[];
 
     /**
      * clés des résultats complémentaires
@@ -53,23 +53,25 @@ export class VarResults extends CalculatedParamResults implements PlottableData
 
     public reset() {
         super.reset();
-        this._variableParamHeader = undefined;
+        this._variableParamHeaders = [];
         this._extraResultHeaders = [];
         this.extraResultKeys = [];
         this._yValues = [];
     }
 
-    public get variatedParameter(): NgParameter {
-        return this._variatedParam;
+    public get variatedParameters(): NgParameter[] {
+        return this._variatedParams;
     }
 
-    public set variatedParameter(p: NgParameter) {
-        this._variatedParam = p;
-        this._variableParamHeader = CalculatorResults.paramLabel(this._variatedParam, true);
+    public set variatedParameters(p: NgParameter[]) {
+        this._variatedParams = p;
+        this._variableParamHeaders = this._variatedParams.map((v) => {
+            return CalculatorResults.paramLabel(v, true);
+        });
     }
 
-    public get variableParamHeader() {
-        return this._variableParamHeader;
+    public get variableParamHeaders() {
+        return this._variableParamHeaders;
     }
 
     public get yValues() {
@@ -88,20 +90,21 @@ export class VarResults extends CalculatedParamResults implements PlottableData
         // 1. calculated param ?
         if (this.calculatedParameter && this.calculatedParameter.symbol === symbol) {
             return this.calculatedParameterHeader;
-        } else
+        }
         // 2. variated param ?
-        if (this.variatedParameter.symbol === symbol) {
-            return this.variableParamHeader;
-        } else {
-            // 3. Result element ?
-            // calculator type for translation
-            const sn = this.result.sourceNub;
-            let ct = sn.calcType;
-            if (sn.parent) {
-                ct = sn.parent.calcType;
+        for (let i = 0; i < this.variatedParameters.length; i++) {
+            if (this._variatedParams[i].symbol === symbol) {
+                return this.variableParamHeaders[i];
             }
-            return ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct, symbol);
         }
+        // 3. Result element ?
+        // calculator type for translation
+        const sn = this.result.sourceNub;
+        let ct = sn.calcType;
+        if (sn.parent) {
+            ct = sn.parent.calcType;
+        }
+        return ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct, symbol);
     }
 
     /**
@@ -117,19 +120,20 @@ export class VarResults extends CalculatedParamResults implements PlottableData
                     series.push(r.vCalc);
                 }
             }
-        } else
+        }
         // 2. variated param ?
-        if (this.variatedParameter.symbol === symbol) {
-            for (const v of this.variatedParameter.valuesIterator) {
-                series.push(v);
+        for (let i = 0; i < this.variatedParameters.length; i++) {
+            if (this._variatedParams[i].symbol === symbol) {
+                for (const v of this.variatedParameters[i].valuesIterator) {
+                    series.push(v);
+                }
             }
-        } else {
-            // 3. Result element ?
-            for (const r of this.result.resultElements) { // re:ResultElement
-                for (const k in r.extraResults) {
-                    if (k === symbol) {
-                        series.push(r.extraResults[k]);
-                    }
+        }
+        // 3. Result element ?
+        for (const r of this.result.resultElements) { // re:ResultElement
+            for (const k in r.extraResults) {
+                if (k === symbol) {
+                    series.push(r.extraResults[k]);
                 }
             }
         }
@@ -146,7 +150,9 @@ export class VarResults extends CalculatedParamResults implements PlottableData
         if (this.calculatedParameter) {
             res.push(this.calculatedParameter.symbol);
         }
-        res.push(this.variatedParameter.symbol);
+        for (const v of this._variatedParams) {
+            res.push(v.symbol);
+        }
         for (const erk of this.extraResultKeys) {
             res.push(erk);
         }
@@ -154,8 +160,10 @@ export class VarResults extends CalculatedParamResults implements PlottableData
     }
 
     public update(displaySymbol: boolean) {
-        if (this._variableParamHeader === undefined) {
-            this._variableParamHeader = CalculatorResults.paramLabel(this.variatedParameter, displaySymbol);
+        if (this._variableParamHeaders.length === 0) {
+            this._variableParamHeaders = this._variatedParams.map((v) => {
+                return CalculatorResults.paramLabel(v, true);
+            });
         }
 
         // valeurs du paramètre à calculer
@@ -181,7 +189,7 @@ export class VarResults extends CalculatedParamResults implements PlottableData
         } else if (this.extraResultKeys.length > 0) {
             defaultY = this.extraResultKeys[0];
         }
-        this.chartX = this.chartX || this.variatedParameter.symbol;
+        this.chartX = this.chartX || this.variatedParameters[0].symbol;
         this.chartY = defaultY;
 
         // calculator type for translation
@@ -202,10 +210,10 @@ export class VarResults extends CalculatedParamResults implements PlottableData
         // (might be the previous variated parameter, that is not accessible anymore)
         const aca = this.getAvailableChartAxis();
         if (! aca.includes(this.chartX)) {
-            this.chartX = this.variatedParameter.symbol;
+            this.chartX = this.variatedParameters[0].symbol;
         }
         if (! aca.includes(this.chartY)) {
-            this.chartY = this.variatedParameter.symbol;
+            this.chartY = this.variatedParameters[0].symbol;
         }
     }
 }