diff --git a/src/nub.ts b/src/nub.ts
index 367114fad637ec566620b8d89b0d2032302d9954..c37f38c003d21f42967232905493de08a784c6fa 100644
--- a/src/nub.ts
+++ b/src/nub.ts
@@ -76,13 +76,19 @@ export abstract class Nub extends ComputeNode implements IReferencedObject {
     public CalcSerie(rPrec: number = 0.001, rInit?: number, sDonnee?: string): Result {
         let variatedParam: ParamDefinition;
         let computedParam: ParamDefinition;
-        for (const p of this.parameterIterator) {
+        let prmValue: ParamValues; // instance de ParamValues utilisée pour le paramètre varié (qui peut être un paramètre référencé (importé))
 
+        for (const p of this.parameterIterator) {
             switch (p.valueMode) {
+                case ParamValueMode.SINGLE:
+                    break;
+
                 case ParamValueMode.LISTE:
                 case ParamValueMode.MINMAX:
-                    if (variatedParam == undefined)
+                    if (variatedParam == undefined) {
                         variatedParam = p;
+                        prmValue = p.paramValues;
+                    }
                     else
                         throw new Error(`CalcSerie() : il y plusieurs paramètres à varier (au moins ${variatedParam.symbol} et ${p.symbol})`);
                     break;
@@ -95,6 +101,39 @@ export abstract class Nub extends ComputeNode implements IReferencedObject {
                             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:
+                                if (variatedParam == undefined) {
+                                    variatedParam = p;
+                                    prmValue = p.referencedParamValues;
+                                }
+                                else
+                                    throw new Error(`CalcSerie() : il y plusieurs paramètres à varier (au moins ${variatedParam.symbol} et ${p.symbol})`);
+                                break;
+
+                            case ParamValueMode.CALCUL:
+                                if (sDonnee == undefined) {
+                                    if (computedParam == undefined)
+                                        computedParam = p;
+                                    else
+                                        throw new Error(`CalcSerie() : il y plusieurs paramètres à calculer (au moins ${computedParam.symbol} et ${p.symbol})`);
+                                }
+                                break;
+
+                            default:
+                                throw new Error(`CalcSerie() : valeur référencée de ParamValueMode ${ParamValueMode[p.referencedParamValues.valueMode]} non prise en charge`);
+                        }
+                    break;
+
+                default:
+                    throw new Error(`CalcSerie() : valeur de ParamValueMode ${ParamValueMode[p.valueMode]} non prise en charge`);
             }
         }
 
@@ -113,9 +152,9 @@ export abstract class Nub extends ComputeNode implements IReferencedObject {
             this._result = this.Calc(computedSymbol, rInit, rPrec); // résultat dans this._result
         else {
             const res = new Result();
-            variatedParam.paramValues.initIterator();
-            while (variatedParam.paramValues.hasNext) {
-                variatedParam.paramValues.next;
+            prmValue.initIterator();
+            while (prmValue.hasNext) {
+                prmValue.next;
                 this.Calc(computedSymbol, rInit, rPrec);  // résultat dans this._result
                 if (this._result.ok) {
                     res.addResultElement(this._result.resultElement);
diff --git a/src/param/param-values.ts b/src/param/param-values.ts
index d4e5373c610cebf80a044b1e2e77eeae5e79a1b9..98fe06155687caac5038ff0c6d92f47645997caf 100644
--- a/src/param/param-values.ts
+++ b/src/param/param-values.ts
@@ -81,16 +81,7 @@ export class ParamValues implements IObjectReference, IterableValues {
     }
 
     public get valueMode() {
-        switch (this._valueMode) {
-            case ParamValueMode.LINK:
-                const pv = this.referencedParamValues;
-                if (pv == undefined)
-                    return undefined;
-                return pv.valueMode;
-
-            default:
-                return this._valueMode;
-        }
+        return this._valueMode;
     }
 
     public set valueMode(m: ParamValueMode) {