diff --git a/src/app/calculators/cond_distri/conddistri.component.html b/src/app/calculators/cond_distri/conddistri.component.html
index 53ea04a29d03f9a9fb030676e72c084b9212a59e..7ba35b110097af4afb1703fba2c53e3a6fdcf3be 100644
--- a/src/app/calculators/cond_distri/conddistri.component.html
+++ b/src/app/calculators/cond_distri/conddistri.component.html
@@ -6,16 +6,28 @@
 </div>
 
 <div style="text-align:center;">
-    <table *ngIf="_showResults">
+    <!-- table des résultats fixées -->
+    <table *ngIf="_showFixedResults" style="float: left">
         <tr>
             <th>Paramètres fixés</th>
             <th>Valeurs</th>
         </tr>
-        <tr *ngFor="let r of _results; let i=index" [class]="getResultClass(i)">
+        <tr *ngFor="let r of _fixedResults; let i=index" [class]="getFixedResultClass(i)">
             <td class="result_label">{{r.label}}</td>
             <td class="result_value">{{r.value}}</td>
         </tr>
     </table>
+    <!-- table des résultats variés -->
+    <table *ngIf="_showVarResults" style="float: left">
+        <tr>
+            <th>{{_variableParamHeader}}</th>
+            <th>{{_variableResultHeader}}</th>
+        </tr>
+        <tr *ngFor="let r of _varResults; let i=index" [class]="getVarResultClass(i)">
+            <td class="result_label ">{{r.param}}</td>
+            <td class="result_value ">{{r.result}}</td>
+        </tr>
+    </table>
 </div>
 <!--
     <tr *ngFor="let r of _results; let i=index" [class]="getResultClass(i)">
diff --git a/src/app/calculators/cond_distri/conddistri.component.ts b/src/app/calculators/cond_distri/conddistri.component.ts
index 6321250c80675416da8edfa1b3e6b2e7d0e435a2..7df80e243c3f76151539c35a661a336412107b28 100644
--- a/src/app/calculators/cond_distri/conddistri.component.ts
+++ b/src/app/calculators/cond_distri/conddistri.component.ts
@@ -58,11 +58,22 @@ export class CondDistriComponent implements OnInit, DoCheck {
     private _fieldSets: FieldSet[] = [];
 
     /**
-     * affichage de la table des résultats
+     * affichage de la table des résultats non variés
      */
-    private _showResults: boolean = false;
+    private _showFixedResults: boolean = false;
 
-    private _results: Object[];
+    private _fixedResults: Object[];
+
+    /**
+     * affichage de la table des résultats  variés
+     */
+    private _showVarResults: boolean = false;
+
+    private _variableParamHeader: string;
+
+    private _variableResultHeader: string;
+
+    private _varResults: Object[];
 
     /**
      * symbole du paramètre à calculer par défaut (cf config "idCal")
@@ -214,6 +225,14 @@ export class CondDistriComponent implements OnInit, DoCheck {
     }
 
     ngDoCheck() {
+        // let q = this.getParamFromSymbol("Q");  // A VIRER !!!!
+        // if (q != undefined) {
+        //     q.radioState = ParamRadioConfig.VAR;
+        //     q.minValue = 1.5;
+        //     q.maxValue = 6;
+        //     q.stepValue = 0.3;
+        // }
+
         if (this.intlService.localeChanged) {
             const promise = this.loadLocalisation()
                 .then(() => {
@@ -320,8 +339,6 @@ export class CondDistriComponent implements OnInit, DoCheck {
                             return p.v;
 
                         case ParamRadioConfig.VAR:
-                            throw "non supported";
-
                         case ParamRadioConfig.CAL:
                             return undefined;
                     }
@@ -338,11 +355,35 @@ export class CondDistriComponent implements OnInit, DoCheck {
         return this.getParamFromState(ParamRadioConfig.VAR);
     }
 
-    private addResult(p: NgParameter, v: number, fixedPrec: number) {
-        this._results.push({ "label": p.symbol + ": " + p.label + " (" + p.unit + ")", "value": v.toFixed(fixedPrec) });
+    private paramLabel(p: NgParameter): string {
+        return p.symbol + ": " + p.label + " (" + p.unit + ")";
+    }
+
+    private addFixedResult(p: NgParameter, v: number, fixedPrec: number) {
+        this._fixedResults.push({ "label": this.paramLabel(p), "value": v.toFixed(fixedPrec) });
+    }
+
+    private addFixedResults(nDigits: number) {
+        this._fixedResults = [];
+        for (let fs of this._fieldSets) {
+            for (let p of fs.params) {
+                if (p.radioState == ParamRadioConfig.FIX && p.symbol !== "Pr") {
+                    this.addFixedResult(p, p.v, nDigits);
+                }
+            }
+        }
+
+        this._showFixedResults = true;
+    }
+
+    private addVarResult(paramVal: number, resVal: number, fixedPrec: number) {
+        this._varResults.push({ "param": paramVal.toFixed(fixedPrec), "result": resVal.toFixed(fixedPrec) });
     }
 
     private doCompute() {
+        this._showVarResults = false;
+        let computedParam = this.getComputedParameter();
+
         let Q: number = this.getParameterValue("Q"); // débit Q
         let D: number = this.getParameterValue("D"); // diamètre D
         let J: number = this.getParameterValue("J"); // perte de charge J
@@ -350,32 +391,52 @@ export class CondDistriComponent implements OnInit, DoCheck {
         let Nu: number = this.getParameterValue("Nu"); // Viscosité dynamique Nu
         let prec: number = this.getParameterValue("Pr"); // précision
         let nDigits = -Math.log10(prec);
-//        console.log(nDigits);
-
-        let computed = this.getComputedParameter();
 
         let prms = new ConduiteDistribParams(Q, D, J, Lg, Nu);
         let nub = new ConduiteDistrib(prms);
-        let res = nub.Calc(computed.symbol, 0, prec).vCalc;
 
-        this._results = [];
-        for (let fs of this._fieldSets) {
-            for (let p of fs.params) {
-                if (p.radioState == ParamRadioConfig.FIX && p.symbol !== "Pr") {
-                    // this._results.push({ "label": p.label, "value": p.v });
-                    this.addResult(p, p.v, nDigits);
-                }
-            }
+        let varParam = this.getVariatedParameter();
+        if (varParam == undefined) {
+            // pas de paramètre à varier
+
+            let res = nub.Calc(computedParam.symbol, 0, prec).vCalc;
+
+            this.addFixedResults(nDigits);
+            this.addFixedResult(computedParam, res, nDigits);
         }
-        // this._results.push({ "label": computed.label, "value": res });
-        this.addResult(computed, res, nDigits);
+        else {
+            // il y a un paramètre à varier
 
-        this._showResults = true;
+            this.addFixedResults(nDigits);
+            this._variableParamHeader = this.paramLabel(varParam);
+            this._variableResultHeader = this.paramLabel(computedParam);
+
+            let min: number = +varParam.minValue;
+            let max: number = +varParam.maxValue;
+            let step: number = +varParam.stepValue;
+
+            this._varResults = [];
+            for (let val = min; val <= max; val += step) {
+                prms[varParam.symbol].v = val;
+
+                let res = nub.Calc(computedParam.symbol, 0, prec).vCalc;
+                this.addVarResult(val, res, nDigits);
+            }
+            for (let vr of this._varResults) {
+                console.log(vr);
+            }
+
+            this._showVarResults = true;
+        }
     }
 
-    private getResultClass(i: number) {
-        if (i == this._results.length - 1)
+    private getFixedResultClass(i: number) {
+        if (this.getVariatedParameter() == undefined && i == this._fixedResults.length - 1)
             return "result_id_2"
         return "result_id_" + String(i & 1);
     }
+
+    private getVarResultClass(i: number) {
+        return "result_id_" + String(i & 1);
+    }
 }
diff --git a/src/app/components/param-field-line/param-field-line.component.ts b/src/app/components/param-field-line/param-field-line.component.ts
index f3e38a8f5d1c03f31bfa8c64789d44cea7df3d7b..affee7f79d04a7f8c198a818c05639ca7302554d 100644
--- a/src/app/components/param-field-line/param-field-line.component.ts
+++ b/src/app/components/param-field-line/param-field-line.component.ts
@@ -132,6 +132,13 @@ export class ParamFieldLineComponent implements DoCheck {
         return undefined;
     }
 
+    /**
+   * retourne l'état du radio "paramètre à varier" sous forme booléenne
+   */
+    private get isRadioVarChecked(): boolean {
+        return this._param.radioState == ParamRadioConfig.VAR;
+    }
+
     /*
      * gestion des événements clic sur les radios :
      * envoi d'un message au composant parent
diff --git a/src/app/components/param-field-line/param-field-line.html b/src/app/components/param-field-line/param-field-line.html
index fdf5ec1f93dcee3556d5591067c5a54c7c5a7804..a3fc4efb44c58abfa7a2292135b182fd2c4363d7 100644
--- a/src/app/components/param-field-line/param-field-line.html
+++ b/src/app/components/param-field-line/param-field-line.html
@@ -21,22 +21,37 @@
         <input *ngIf="hasRadioCal()" type="radio" name="radio_param_{{symbol}}" value="cal" (click)="onRadioClick(symbol, 'cal')"
             [checked]=radioCalCheck [disabled]=isDisabled/>
     </td>
-
-    <!--
-    <td align="center">
-        <input type="radio" id="fix_FT_rLargeurFond" name="choix_champs_FT_rLargeurFond" value="fix" onclick="gestion_radios('FT_rLargeurFond', 'fix')"
-            checked="checked" />
+</tr>
+<tr *ngIf="isRadioVarChecked">
+    <td></td>
+    <td></td>
+    <td>
+        De la valeur minimum
     </td>
-
-    <td align="center">
-        <input type="radio" id="var_FT_rLargeurFond" name="choix_champs_FT_rLargeurFond" value="var" onclick="gestion_radios('FT_rLargeurFond', 'var')"
-        />
+    <td>
+        <input [(ngModel)]="_param.minValue">
+        <!-- 
+<tr *ngIf="isRadioVarChecked()">
+            -->
     </td>
-
-    <td align="center">
-        <input type="radio" id="cal_FT_rLargeurFond" name="choix_champs_FT_rLargeurFond" value="cal" onclick="gestion_radios('FT_rLargeurFond', 'cal')"
-        />
+</tr>
+<tr *ngIf="isRadioVarChecked">
+    <td></td>
+    <td></td>
+    <td>
+        à la valeur maximum
+    </td>
+    <td>
+        <input [(ngModel)]="_param.maxValue">
+    </td>
+</tr>
+<tr *ngIf="isRadioVarChecked">
+    <td></td>
+    <td></td>
+    <td>
+        avec un pas de :
+    </td>
+    <td>
+        <input [(ngModel)]="_param.stepValue">
     </td>
-  -->
-
 </tr>
\ No newline at end of file
diff --git a/src/app/services/ngparam.ts b/src/app/services/ngparam.ts
index f9e9c79ae989ff429ff6cfda4eb29a52a49da8cb..c90df03f9f18b5ac6af21246edecb671fad1678c 100644
--- a/src/app/services/ngparam.ts
+++ b/src/app/services/ngparam.ts
@@ -1,4 +1,4 @@
-import { ParamDefinition, ErrorMessage } from 'jalhyd';
+import { ParamDefinition, ParamDomainValue, ErrorMessage } from 'jalhyd';
 
 export enum ParamRadioConfig {
     /**
@@ -26,8 +26,32 @@ export class NgParameter {
     public radioConfig: ParamRadioConfig;
     public radioState: ParamRadioConfig;
     public isDefault: boolean = false; // archi bug du langage ! si on relit cette propriété sans l'avoir modifiée entre-temps, elle vaut undefined !
+    public minValue: number; // valeur min dans le cas ParamRadioConfig.VAR
+    public maxValue: number; // valeur max dans le cas ParamRadioConfig.VAR
+    public stepValue: number; // pas de progression dans le cas ParamRadioConfig.VAR
 
     constructor(private _paramDef: ParamDefinition) {
+        switch (this._paramDef.getDomain().domain) {
+            case ParamDomainValue.ANY:
+                this.minValue = -10;
+                this.maxValue = 10;
+                this.stepValue = 0.5;
+                break;
+
+            case ParamDomainValue.POS:
+            case ParamDomainValue.NOT_NULL:
+            case ParamDomainValue.INTERVAL:
+                this.minValue = 0.01;
+                this.maxValue = 10;
+                this.stepValue = 0.5;
+                break;
+
+            case ParamDomainValue.POS_NULL:
+                this.minValue = 0;
+                this.maxValue = 10;
+                this.stepValue = 0.5;
+                break;
+        }
     }
 
     get symbol(): string {