diff --git a/src/nub.ts b/src/nub.ts
index 6c869ca68c506214d47c3f20f6c1d8ea0555518b..78f77f3c7ebbd89613f8206df2b7daad51457936 100644
--- a/src/nub.ts
+++ b/src/nub.ts
@@ -79,59 +79,34 @@ export abstract class Nub extends ComputeNode implements IReferencedNub {
         let computedParam: ParamDefinition;
         // instance de ParamValues utilisée pour le paramètre varié (qui peut être un paramètre référencé (importé))
         let variatedPrmValues: ParamValues;
+        let refResult: Result;
 
         for (const p of this.parameterIterator) {
-            switch (p.valueMode) {
+            if (p.valueMode === ParamValueMode.CALCUL) {
+                if (sDonnee === undefined) {
+                    if (computedParam === undefined) {
+                        computedParam = p;
+                    } else {
+                        // tslint:disable-next-line:max-line-length
+                        throw new Error(`CalcSerie() : il y plusieurs paramètres à calculer (au moins ${computedParam.symbol} et ${p.symbol})`);
+                    }
+                }
+            }
+
+            switch (p.paramValues.valueMode) {
                 case ParamValueMode.SINGLE:
                     break;
 
                 case ParamValueMode.LISTE:
                 case ParamValueMode.MINMAX:
-                    if (variatedPrmValues === undefined) {
-                        variatedPrmValues = p.paramValues;
-                    } else {
-                        // tslint:disable-next-line:max-line-length
-                        throw new Error(`CalcSerie() : il y plusieurs paramètres à varier : ${p.symbol}`);
-                    }
+                    variatedPrmValues = this.setVariatedPrmValues(p, variatedPrmValues);
                     break;
 
                 case ParamValueMode.CALCUL:
-                    if (sDonnee === undefined) {
-                        if (computedParam === undefined) {
-                            computedParam = p;
-                        } else {
-                            // tslint:disable-next-line:max-line-length
-                            throw new Error(`CalcSerie() : il y plusieurs paramètres à calculer (au moins ${computedParam.symbol} et ${p.symbol})`);
-                        }
-                    }
-                    break;
-
-                case ParamValueMode.LINK:
-                    if (p.referencedParamValues !== undefined) {
-                        switch (p.referencedParamValues.valueMode) {
-                            case ParamValueMode.SINGLE:
-                                break;
-
-                            case ParamValueMode.LISTE:
-                            case ParamValueMode.MINMAX:
-                                variatedPrmValues = this.setVariatedPrmValues(
-                                    p.referencedParamValues, variatedPrmValues, p.symbol
-                                );
-                                break;
-
-                            case ParamValueMode.CALCUL:
-                                // Le paramètre lié est un résultat de calcul
-                                if (p.referencedResult.nbResultElements > 1) {
-                                    variatedPrmValues = this.setVariatedPrmValues(
-                                        p.referencedParamValues, variatedPrmValues, p.symbol
-                                    );
-                                }
-                                break;
-
-                            default:
-                                // tslint:disable-next-line:max-line-length
-                                throw new Error(`CalcSerie() : valeur référencée de ParamValueMode ${ParamValueMode[p.referencedParamValues.valueMode]} non prise en charge`);
-                        }
+                    // Le paramètre lié est un résultat de calcul
+                    if (p.isReferenceDefined && p.referencedResult.nbResultElements > 1) {
+                        variatedPrmValues = this.setVariatedPrmValues(p, variatedPrmValues);
+                        refResult = p.referencedResult;
                     }
                     break;
 
@@ -159,7 +134,7 @@ export abstract class Nub extends ComputeNode implements IReferencedNub {
             this._result = this.Calc(computedSymbol, rInit, rPrec); // résultat dans this._result
         } else {
             const res = new Result();
-            variatedPrmValues.initIterator();
+            variatedPrmValues.initIterator(false, refResult);
             while (variatedPrmValues.hasNext) {
                 // tslint:disable-next-line:no-unused-expression
                 variatedPrmValues.next;
@@ -308,12 +283,12 @@ export abstract class Nub extends ComputeNode implements IReferencedNub {
         return prefix === undefined ? str : `${prefix}${str}`;
     }
 
-    private setVariatedPrmValues(prmValues: ParamValues, variatedPrmValues: ParamValues, symbol: string) {
+    private setVariatedPrmValues(p: ParamDefinition, variatedPrmValues: ParamValues) {
         if (variatedPrmValues === undefined) {
-            return prmValues;
+            return p.paramValues;
         } else {
             // tslint:disable-next-line:max-line-length
-            throw new Error(`CalcSerie() : il y plusieurs paramètres à varier : ${symbol}`);
+            throw new Error(`CalcSerie() : Paramètres à varier redondant : ${p.symbol}`);
         }
     }
 
diff --git a/src/param/param-values.ts b/src/param/param-values.ts
index 366e9901795d0745ee371e01790f13867e8cc07c..a8c2f384869db50faa0a06845ef3e7615804181c 100644
--- a/src/param/param-values.ts
+++ b/src/param/param-values.ts
@@ -247,7 +247,7 @@ export class ParamValues implements INubReference, IterableValues {
      * prépare un itérateur pour parcourir les valeurs
      * @param reverse
      */
-    public initIterator(reverse: boolean = false) {
+    public initIterator(reverse: boolean = false, result?: Result) {
         switch (this._valueMode) {
             case ParamValueMode.LISTE:
             case ParamValueMode.MINMAX:
@@ -255,9 +255,8 @@ export class ParamValues implements INubReference, IterableValues {
                 break;
 
             case ParamValueMode.CALCUL:
-                this._iterator = this._nubRef.referencedResult.valuesIterator;
+                this._iterator = result.valuesIterator;
                 break;
-
             default:
                 throw new Error(`ParamValues : mode de valeurs ${ParamValueMode[this._valueMode]} incorrect`);
         }