diff --git a/spec/value_ref/value_ref.spec.ts b/spec/value_ref/value_ref.spec.ts
index 8b735d06d3e40cad6c69ff326a847abcdb2c8df0..b48a4d32f9433f94bc0bb6766d7460b30e42ad49 100644
--- a/spec/value_ref/value_ref.spec.ts
+++ b/spec/value_ref/value_ref.spec.ts
@@ -195,7 +195,7 @@ describe("référence d'un paramètre à un autre : ", () => {
 
             let n = 0;
             let i = min;
-            for (const v of prm2.A.referencedValues) {
+            for (const v of prm2.A.paramValues.getValuesIterator()) {
                 expect(v).toEqual(i);
                 n++;
                 i += step;
diff --git a/src/nub.ts b/src/nub.ts
index 162988fbb2411b9f51539c10673df23ddecbe81f..d8110b2bb4cdeb404b583cc4705f8f3c2beef418 100644
--- a/src/nub.ts
+++ b/src/nub.ts
@@ -148,37 +148,14 @@ export abstract class Nub extends ComputeNode implements IReferencedObject {
 
     // interface IReferencedObject
 
-    /**
-     * getter de la (des) valeurs référencées
-     */
-    public getReferencedValues(desc: string): number[] {
-        const p: ParamDefinition = this.getParameter(desc);
-        if (p !== undefined) {
-            switch (p.valueMode) {
-                case ParamValueMode.CALCUL:
-                    {
-                        this.CalcSerie(0.001, 0.1, p.symbol);
-                        const res: number[] = [];
-                        for (const re of this._result.resultElements)
-                            res.push(re.vCalc);
-                        return res;
-                    }
-
-                case ParamValueMode.LINK:
-                    return p.referencedValues;
-
-                default:
-                    const res: number[] = [];
-                    for (const v of p.paramValues.getValuesIterator())
-                        res.push(v);
-                    return res;
-            }
-        }
-
-        throw new Error(`Nub : appel à IReferencedObject.getReferencedValues('${desc}') invalide`);
+    public getReferencedParamValues(desc: string): ParamValues {
+        return this.getParameter(desc).paramValues;
     }
 
-    public getReferencedValueMode(desc: string): ParamValueMode {
-        return this.getParameter(desc).paramValues.valueMode;
+    public getReferencedResult(desc: string): Result {
+        if (this._result !== undefined && this._result.name === desc)
+            return this._result;
+
+        return this.CalcSerie(0.001, 0.1, desc);
     }
 }
diff --git a/src/param/param-base.ts b/src/param/param-base.ts
index d8890fd81b0c654673452309bed579ada9be7512..fc8de5e275404d6e4f1b5665dda417a4a3daeb2d 100644
--- a/src/param/param-base.ts
+++ b/src/param/param-base.ts
@@ -5,7 +5,8 @@ import { Message, MessageCode } from "../util/message";
 import { JalhydObject } from "../jalhyd_object"
 import { ParamDomain, ParamDomainValue } from "./param-domain";
 import { ParamValues, ParamValueMode } from "./param-values";
-import { IReferencedObject, IObjectReference, ObjectReference } from "../value_ref/object_ref";
+import { IReferencedObject, IObjectReference } from "../value_ref/object_ref";
+import { Result } from "..";
 
 /**
  * paramètre avec symbole et domaine de définition
@@ -27,15 +28,9 @@ export class BaseParam extends JalhydObject implements IObjectReference {
      */
     private _paramValues: ParamValues;
 
-    /**
-     * implémentation par délégation de IObjectReference
-     */
-    private _valueRef: ObjectReference;
-
     constructor(symb: string, d: ParamDomain | ParamDomainValue, val?: number) {
         super();
         this._symbol = symb;
-        this._valueRef = new ObjectReference();
 
         this._paramValues = new ParamValues();
         this._paramValues.setSingleValue(val);
@@ -64,6 +59,8 @@ export class BaseParam extends JalhydObject implements IObjectReference {
     }
 
     public get paramValues(): ParamValues {
+        if (this.isReferenceDefined)
+            return this.referencedParamValues;
         return this._paramValues;
     }
 
@@ -82,16 +79,7 @@ export class BaseParam extends JalhydObject implements IObjectReference {
             throw e;
         }
 
-        if (this.isReferenceDefined)
-            return this._valueRef.referencedValues[0];
-        else
-            switch (this.valueMode) {
-                case ParamValueMode.SINGLE:
-                    return this._paramValues.singleValue;
-
-                default:
-                    throw new Error(`mode de valeur ${ParamValueMode[this.valueMode]} invalide`);
-            }
+        return this._paramValues.singleValue;
     }
 
     public setValue(val: number) {
@@ -158,37 +146,24 @@ export class BaseParam extends JalhydObject implements IObjectReference {
     }
 
     public get valueMode() {
-        switch (this._paramValues.valueMode) {
-            case ParamValueMode.LINK:
-                return this.referencedValueMode;
-
-            default:
-                return this._paramValues.valueMode;
-        }
+        return this._paramValues.valueMode;
     }
 
     // interface IObjectReference
 
     public defineReference(target: IReferencedObject, desc: string) {
-        this.paramValues.valueMode = ParamValueMode.LINK;
-        this._valueRef.defineReference(target, desc);
+        this._paramValues.defineReference(target, desc);
     }
 
     public get isReferenceDefined(): boolean {
-        return this._valueRef.isReferenceDefined;
+        return this._paramValues.isReferenceDefined;
     }
 
-    /**
-     * valeurs de l'objet IReferencedObject référencé
-     */
-    public get referencedValues(): number[] {
-        return this._valueRef.referencedValues;
+    public get referencedParamValues(): ParamValues {
+        return this._paramValues.referencedParamValues;
     }
 
-    /**
-     * mode de valeur dans l'objet référencé
-     */
-    public get referencedValueMode(): ParamValueMode {
-        return this._valueRef.referencedValueMode;
+    public get referencedResult(): Result {
+        return this._paramValues.referencedResult;
     }
 }
diff --git a/src/param/param-values.ts b/src/param/param-values.ts
index 1376898c6be2cbefa5b9b880b2be939e111f5a92..57b5457b97cfa1378a0af15b1fcf5c2997e394ca 100644
--- a/src/param/param-values.ts
+++ b/src/param/param-values.ts
@@ -1,5 +1,7 @@
 import { Pair } from "../util/pair"
 import { DefinedNumber } from "../util/definedvalue";
+import { IReferencedObject, IObjectReference, ObjectReference } from "../value_ref/object_ref";
+import { Result } from "..";
 
 /**
  * mode de génération des valeurs
@@ -178,7 +180,7 @@ export class ParamValueIterator implements IterableIterator<number> {
     }
 }
 
-export class ParamValues {
+export class ParamValues implements IObjectReference {
     /**
      * mode de génération des valeurs : min/max, liste, ...
      */
@@ -214,8 +216,14 @@ export class ParamValues {
      */
     private _iterator: ParamValueIterator;
 
+    /**
+     * implémentation par délégation de IObjectReference
+     */
+    private _valueRef: ObjectReference;
+
     constructor() {
         this._singleValue = new DefinedNumber();
+        this._valueRef = new ObjectReference();
     }
 
     public setValues(o: number | any, max?: number, step?: number) {
@@ -239,7 +247,13 @@ export class ParamValues {
     }
 
     public get valueMode() {
-        return this._valueMode;
+        switch (this._valueMode) {
+            case ParamValueMode.LINK:
+                return this.referencedParamValues.valueMode;
+
+            default:
+                return this._valueMode;
+        }
     }
 
     public set valueMode(m: ParamValueMode) {
@@ -283,7 +297,9 @@ export class ParamValues {
         }
     }
 
-    public get singleValue() {
+    public get singleValue(): number {
+        if (this.isReferenceDefined)
+            return this._valueRef.referencedParamValues.singleValue;
         return this._singleValue.value;
     }
 
@@ -301,7 +317,17 @@ export class ParamValues {
     }
 
     public get min() {
-        return this._minValue;
+        switch (this._valueMode) {
+            case ParamValueMode.MINMAX:
+                return this._minValue;
+
+            case ParamValueMode.LINK:
+                return this._valueRef.referencedParamValues.min;
+
+            default:
+                this.checkValueMode(ParamValueMode.MINMAX); // pour générer une erreur
+                return undefined; // pour le compilo
+        }
     }
 
     public set min(v: number) {
@@ -310,7 +336,17 @@ export class ParamValues {
     }
 
     public get max() {
-        return this._maxValue;
+        switch (this._valueMode) {
+            case ParamValueMode.MINMAX:
+                return this._maxValue;
+
+            case ParamValueMode.LINK:
+                return this._valueRef.referencedParamValues.max;
+
+            default:
+                this.checkValueMode(ParamValueMode.MINMAX);
+                return undefined; // pour le compilo
+        }
     }
 
     public set max(v: number) {
@@ -324,8 +360,17 @@ export class ParamValues {
     }
 
     public get step() {
-        this.checkValueMode(ParamValueMode.MINMAX);
-        return this._stepValue;
+        switch (this._valueMode) {
+            case ParamValueMode.MINMAX:
+                return this._stepValue;
+
+            case ParamValueMode.LINK:
+                return this._valueRef.referencedParamValues.step;
+
+            default:
+                this.checkValueMode(ParamValueMode.MINMAX); // pour générer une erreur
+                return undefined; // pour le compilo
+        }
     }
 
     public set step(v: number) {
@@ -359,13 +404,16 @@ export class ParamValues {
         switch (this._valueMode) {
             case ParamValueMode.LISTE:
             case ParamValueMode.MINMAX:
+                this._iterator = this.getValuesIterator(reverse);
+                break;
+
+            case ParamValueMode.LINK:
+                this._iterator = this._valueRef.referencedParamValues.getValuesIterator(reverse);
                 break;
 
             default:
                 throw new Error(`ParamValues : mode de valeurs ${ParamValueMode[this._valueMode]} incorrect`);
         }
-
-        this._iterator = this.getValuesIterator(reverse);
     }
 
     /**
@@ -383,4 +431,23 @@ export class ParamValues {
         this._singleValue.value = this._iterator.next().value;
         return this._singleValue.value;
     }
+
+    // interface IObjectReference
+
+    public defineReference(target: IReferencedObject, desc: string) {
+        this.valueMode = ParamValueMode.LINK;
+        this._valueRef.defineReference(target, desc);
+    }
+
+    public get isReferenceDefined(): boolean {
+        return this._valueRef.isReferenceDefined;
+    }
+
+    public get referencedParamValues(): ParamValues {
+        return this._valueRef.referencedParamValues;
+    }
+
+    public get referencedResult(): Result {
+        return this._valueRef.referencedResult;
+    }
 }
diff --git a/src/value_ref/object_ref.ts b/src/value_ref/object_ref.ts
index 0c0451442a0d13ea993e1b966f90054f51d44dc1..200cc3bb24ba038050270af2f8c474c3d136842d 100644
--- a/src/value_ref/object_ref.ts
+++ b/src/value_ref/object_ref.ts
@@ -1,4 +1,5 @@
-import { ParamValueMode } from "../param/param-values";
+import { ParamValueMode, ParamValueIterator, ParamValues } from "../param/param-values";
+import { Result } from "..";
 
 /**
  * objet (paramètre ou résultat) dont les valeurs sont référençables pour réutilisation
@@ -6,15 +7,16 @@ import { ParamValueMode } from "../param/param-values";
  */
 export interface IReferencedObject {
     /**
-     * getter de la (des) valeurs
+     * getter des valeurs
+     * @param desc : description sous forme symbolique
      */
-    getReferencedValues(desc: string): number[];
-
+    getReferencedParamValues(desc: string): ParamValues;
 
     /**
-     * getter du mode de valeur
+     * getter du résultat
+     * @param desc : description sous forme symbolique
      */
-    getReferencedValueMode(desc: string): ParamValueMode;
+    getReferencedResult(desc: string): Result;
 }
 
 /**
@@ -34,14 +36,14 @@ export interface IObjectReference {
     readonly isReferenceDefined: boolean;
 
     /**
-     * valeurs de l'objet IReferencedObject référencé
+     * instance de ParamValues référencée
      */
-    readonly referencedValues: number[];
+    readonly referencedParamValues: ParamValues;
 
     /**
-     * mode de valeur dans l'objet référencé
+     * instance de Result référencée
      */
-    readonly referencedValueMode: ParamValueMode;
+    readonly referencedResult: Result;
 }
 
 /**
@@ -69,16 +71,16 @@ export class ObjectReference implements IObjectReference {
     }
 
     /**
-     * valeurs dans l'objet référencé
+     * instance de ParamValues référencée
      */
-    public get referencedValues(): number[] {
-        return this._referencedObject.getReferencedValues(this._refDefinition);
+    public get referencedParamValues(): ParamValues {
+        return this._referencedObject.getReferencedParamValues(this._refDefinition);
     }
 
     /**
-     * mode de valeur dans l'objet référencé
+     * instance de Result référencée
      */
-    public get referencedValueMode(): ParamValueMode {
-        return this._referencedObject.getReferencedValueMode(this._refDefinition);
+    public get referencedResult(): Result {
+        return this._referencedObject.getReferencedResult(this._refDefinition);
     }
 }