diff --git a/spec/value_ref/value_ref_section.spec.ts b/spec/value_ref/value_ref_section.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..58d7479d557aebaf34efefa07b510ee03b17bb7b
--- /dev/null
+++ b/spec/value_ref/value_ref_section.spec.ts
@@ -0,0 +1,49 @@
+import { SectionParametree } from "../../src/section/section_nub";
+import { acSection } from "../../src/section/section_type";
+import { cSnTrapez, ParamsSectionTrapez } from "../../src";
+
+/**
+ * IMPORTANT !
+ * Décommenter temporairement la ligne suivante (import { } from "./mock_jasmine")
+ * Pour exécuter ce code dans le débugger.
+ * Faire de même avec le fichier test_func.ts
+ */
+// import { describe, expect, it, xdescribe, xit } from "../mock_jasmine";
+
+let nub1: SectionParametree;
+let nub2: SectionParametree;
+let prm1: ParamsSectionTrapez;
+let prm2: ParamsSectionTrapez;
+
+/**
+ * crée l'environnement de test.
+ * répété à chaque test car il manque un mock de beforeEach
+ */
+function createEnv() {
+    // Nub maître
+    nub1 = new SectionParametree(new cSnTrapez(new ParamsSectionTrapez(1, 0.5, 1, 0.01, 1, 0.01, 0.01, 2)));
+    prm1 = nub1.parameters as ParamsSectionTrapez;
+
+    // Nub esclave
+    nub2 = new SectionParametree(new cSnTrapez(new ParamsSectionTrapez(1, 0.5, 1, 0.01, 1, 0.01, 0.01, 2)));
+    prm2 = nub2.parameters as ParamsSectionTrapez;
+}
+
+describe("référence d'un paramètre à un autre : ", () => {
+    describe("résultat complémentaire/section : ", () => {
+        it("test 1", () => {
+            // cas de figure :
+            // nub2.Y est lié au résultat complémentaire Yf de nub1
+            // lecture de nub2.Y
+
+            createEnv();
+
+            prm2.Y.v = 0;  // valeur esclave, doit être masquée par la valeur maître (cad prm1.Yf)
+            prm2.Y.defineReference(nub1, ".Yf");
+
+            nub1.CalcSerie();
+
+            expect(prm2.Y.v).toEqual(1);
+        });
+    });
+});
diff --git a/src/nub.ts b/src/nub.ts
index 79696d1da912e9f01721d4c34e2d6a3554d31e69..de4cdbaf048ca391f340445808708ae2ec76407d 100644
--- a/src/nub.ts
+++ b/src/nub.ts
@@ -160,4 +160,10 @@ export abstract class Nub extends ComputeNode implements IReferencedObject {
 
         return this.CalcSerie(0.001, 0.1, desc);
     }
+
+    public getReferencedExtraResult(desc: string): any {
+        const tmp: string[] = desc.split(".");
+        const r: Result = this.getReferencedResult(tmp[0]);
+        return r.getExtraResult(tmp[1]);
+    }
 }
diff --git a/src/param/param-base.ts b/src/param/param-base.ts
index 6712c7ffd48d533b9da321b23668bc32b069e498..7eaae19a184d3786f8580ba3d321ce39aeea6317 100644
--- a/src/param/param-base.ts
+++ b/src/param/param-base.ts
@@ -154,6 +154,10 @@ export class BaseParam extends JalhydObject implements IObjectReference {
         this._paramValues.defineReference(target, desc);
     }
 
+    public get referenceDesc(): string {
+        return this._paramValues.referenceDesc;
+    }
+
     public get isReferenceDefined(): boolean {
         return this._paramValues.isReferenceDefined;
     }
@@ -165,4 +169,8 @@ export class BaseParam extends JalhydObject implements IObjectReference {
     public get referencedResult(): Result {
         return this._paramValues.referencedResult;
     }
+
+    public get referencedExtraResult(): any {
+        return this._paramValues.referencedExtraResult;
+    }
 }
diff --git a/src/param/param-definition.ts b/src/param/param-definition.ts
index ef4f2f1b5518c815049d8a6a4a8db4e3f25f32ec..8a90e7ed028c43fd0a034071f7cb2a4e65a876b5 100644
--- a/src/param/param-definition.ts
+++ b/src/param/param-definition.ts
@@ -45,17 +45,24 @@ export class ParamDefinition extends BaseParam {
     }
 
     get v(): number {
-        if (this.isReferenceDefined)
-            switch (this.referencedParamValues.valueMode) {
-                case ParamValueMode.CALCUL:
-                    const r = this.referencedResult;
-                    if (r.nbResultElements == 1)
-                        return r.resultElement.vCalc;
-                    throw new Error(`il n'y a pas exactement un ResultElement dans le Result "${r.name}"`);
-
-                default:
-                    return this.referencedParamValues.currentValue;
+        if (this.isReferenceDefined) {
+            const parts: string[] = this.referenceDesc.split(".");
+
+            if (parts.length === 1) {
+                switch (this.referencedParamValues.valueMode) {
+                    case ParamValueMode.CALCUL:
+                        const r = this.referencedResult;
+                        if (r.nbResultElements == 1)
+                            return r.resultElement.vCalc;
+                        throw new Error(`il n'y a pas exactement un ResultElement dans le Result "${r.name}"`);
+
+                    default:
+                        return this.referencedParamValues.currentValue;
+                }
             }
+            else
+                return this.referencedExtraResult;
+        }
         else
             switch (this.paramValues.valueMode) {
                 case ParamValueMode.SINGLE:
diff --git a/src/param/param-values.ts b/src/param/param-values.ts
index 9f6fb677beeec12e7ac742727dad5d0f5e3cc852..1b13d34cca83a535c940323ad82e7c251b661dd2 100644
--- a/src/param/param-values.ts
+++ b/src/param/param-values.ts
@@ -286,6 +286,10 @@ export class ParamValues implements IObjectReference {
         this._valueRef.defineReference(target, desc);
     }
 
+    public get referenceDesc(): string {
+        return this._valueRef.referenceDesc;
+    }
+
     public get isReferenceDefined(): boolean {
         return this._valueRef.isReferenceDefined;
     }
@@ -297,4 +301,8 @@ export class ParamValues implements IObjectReference {
     public get referencedResult(): Result {
         return this._valueRef.referencedResult;
     }
+
+    public get referencedExtraResult(): any {
+        return this._valueRef.referencedExtraResult;
+    }
 }
diff --git a/src/value_ref/object_ref.ts b/src/value_ref/object_ref.ts
index 1591dff85810cefc4437b93d97fb7af0db474fba..39d87bda503fbba82bd4c4537ee082dfe463cd1d 100644
--- a/src/value_ref/object_ref.ts
+++ b/src/value_ref/object_ref.ts
@@ -17,6 +17,12 @@ export interface IReferencedObject {
      * @param desc : description sous forme symbolique
      */
     getReferencedResult(desc: string): Result;
+
+    /**
+     * getter du résultat complémentaire
+     * @param desc : description sous forme symbolique
+     */
+    getReferencedExtraResult(desc: string): any;
 }
 
 /**
@@ -30,6 +36,11 @@ export interface IObjectReference {
      */
     defineReference(target: IReferencedObject, desc: string): void;
 
+    /**
+     * description symbolique de la référence
+     */
+    readonly referenceDesc: string;
+
     /**
      * true si la référence a été définie
      */
@@ -44,6 +55,11 @@ export interface IObjectReference {
      * instance de Result référencée
      */
     readonly referencedResult: Result;
+
+    /**
+     * instance de résultat complémentaire référencée
+     */
+    readonly referencedExtraResult: any;
 }
 
 /**
@@ -59,6 +75,13 @@ export class ObjectReference implements IObjectReference {
         this._refDefinition = desc;
     }
 
+    /**
+     * description symbolique de la référence
+     */
+    public get referenceDesc(): string {
+        return this._refDefinition;
+    }
+
     public get isReferenceDefined(): boolean {
         return this._referencedObject !== undefined && this._refDefinition !== undefined;
     }
@@ -83,4 +106,13 @@ export class ObjectReference implements IObjectReference {
     public get referencedResult(): Result {
         return this._referencedObject.getReferencedResult(this._refDefinition);
     }
+
+    /**
+     * instance de résultat complémentaire référencée
+     */
+    public get referencedExtraResult(): any {
+        const tmp: string[] = this._refDefinition.split(".");
+        const r: Result = this._referencedObject.getReferencedResult(tmp[0]);
+        return r.getExtraResult(tmp[1]);
+    }
 }