diff --git a/src/app/formulaire/ngparam.ts b/src/app/formulaire/ngparam.ts
index 6972f2b26354b00f539ba5e42cf02533018b1fde..bc6effb9a833ecd80dff7a7e6b445ebae07c399a 100644
--- a/src/app/formulaire/ngparam.ts
+++ b/src/app/formulaire/ngparam.ts
@@ -1,10 +1,9 @@
-import { ParamDefinition, Pair, ParamDomain, ParamValues, ParamValueMode, ParamValueIterator, Nub } from "jalhyd";
+import { ParamDefinition, Pair, ParamDomain, ParamValueMode, ParamValueIterator, Nub, Observer, asObservable } from "jalhyd";
 
 import { InputField } from "./input-field";
 import { Dependency } from "./dependency/dependency";
 import { DependencyConditionType } from "./dependency/dependency-condition";
 import { ValueDependencyCondition } from "./dependency/value-dependency-condition";
-import { FormulaireDefinition } from "./definition/form-definition";
 import { ServiceFactory } from "../services/service-factory";
 import { ApplicationSetupService } from "../services/app-setup/app-setup.service";
 import { StringMap } from "../stringmap";
@@ -35,7 +34,7 @@ export enum ParamRadioConfig {
 /**
  * classe englobante de ParamDefinition (champs supplémentaires pour l'affichage, radio boutons, ...)
  */
-export class NgParameter extends InputField {
+export class NgParameter extends InputField implements Observer {
     public unit: string;
     public radioConfig: ParamRadioConfig;
 
@@ -112,18 +111,39 @@ export class NgParameter extends InputField {
      * @param val 
      */
     public setValue(sender: any, val: number) {
-        this._paramDef.v = val;
+        this._paramDef.setValue(val, sender);
         this.notifyValueModified(sender);
     }
 
+    /**
+     * supprime un lien avec un paramètre
+     */
+    private unlinkParameter() {
+        let o = asObservable(this._paramDef.referencedObject);
+        if (this.valueMode === ParamValueMode.LINK) {
+            this._paramDef.undefineReference();
+            if (o !== undefined)
+                o.removeObserver(this);
+        }
+    }
+
     /**
      * crée le lien avec un paramètre
      */
     public linkToParameter(n: Nub, p: ParamDefinition) {
-        const changed: boolean = this.paramDefinition.referencedNub !== n || this.paramDefinition.referenceDefinition !== p.symbol;
+        const changed: boolean = this._paramDef.valueMode !== ParamValueMode.LINK || this._paramDef.referencedNub !== n || this._paramDef.referenceDefinition !== p.symbol;
         if (changed) {
+            let o = asObservable(this._paramDef.referencedObject);
+            if (o !== undefined)
+                o.removeObserver(this);
+
             this.valueMode = ParamValueMode.LINK;
             this._paramDef.defineReference(n, p.symbol);
+
+            o = asObservable(this._paramDef.referencedObject);
+            if (o !== undefined)
+                o.addObserver(this); // pour être prévenu des changements de valeur de l'object référencé
+
             this.notifyObservers({
                 "action": "valueLinkChange",
                 "value": this._paramDef.getValue()
@@ -152,6 +172,7 @@ export class NgParameter extends InputField {
         // undefined si on clique en dehors du select après l'avoir ouvert (cad sans avoir fait de sélection)
         // et au même niveau, cad à côté du bouton et non à côté du menu déroulant
         if (m !== undefined && this._paramDef.valueMode !== m) {
+            this.unlinkParameter();
             this._paramDef.valueMode = m;
             this.notifyObservers({
                 "action": "valueModeChange",
@@ -352,4 +373,14 @@ export class NgParameter extends InputField {
             }
         }
     }
+
+    // interface Observer
+
+    public update(sender: any, data: any) {
+        switch (data["action"]) {
+            case "baseparamAfterValue": // changement de valeur envoyé par l'objet référencé
+                this.notifyValueModified(sender);
+                break;
+        }
+    }
 }