diff --git a/src/app/components/generic-input/generic-input.component.ts b/src/app/components/generic-input/generic-input.component.ts
index 2077a6bbb78005e599216d64696aa783c7640b4d..64487d22e1a613383b5701d6065739292adedb19 100644
--- a/src/app/components/generic-input/generic-input.component.ts
+++ b/src/app/components/generic-input/generic-input.component.ts
@@ -150,8 +150,13 @@ export abstract class GenericInputComponent extends BaseComponent {
 
     public set model(v: any) {
         this.setAndValidateModel(v);
+        this.updateAndValidateUI();
+    }
 
-        // MAJ UI
+    /**
+     * MAJ et validation de l'UI
+     */
+    protected updateAndValidateUI() {
         this._uiValue = this.modelToUI(this.getModelValue());
         this.validateUI();
     }
@@ -175,8 +180,8 @@ export abstract class GenericInputComponent extends BaseComponent {
      * @see BaseComponent
      */
     protected afterFirstViewChecked() {
-        this._uiValue = this.modelToUI(this.getModelValue());
-        this.validate();
+         this.updateAndValidateUI();
+        this.validateModel();
     }
 
     /**
diff --git a/src/app/components/ngparam-input/ngparam-input.component.ts b/src/app/components/ngparam-input/ngparam-input.component.ts
index 064101c27cdc6d60909ecd2e12122a6dfde39ef7..ed085de0f2d1fab8edf62b24bcb72e59310c0f35 100644
--- a/src/app/components/ngparam-input/ngparam-input.component.ts
+++ b/src/app/components/ngparam-input/ngparam-input.component.ts
@@ -8,12 +8,13 @@ import { ComputeNodeType, ParamDefinition, NumericalString, Message, MessageCode
 import { InternationalisationService } from "../../services/internationalisation/internationalisation.service";
 import { NgParameter } from "../../formulaire/ngparam";
 import { GenericInputComponent } from "../generic-input/generic-input.component";
+import { Observer, IObservable } from "../../services/observer";
 
 @Component({
     selector: "ngparam-input",
     templateUrl: "../generic-input/generic-input.component.html"
 })
-export class NgParamInputComponent extends GenericInputComponent {
+export class NgParamInputComponent extends GenericInputComponent implements Observer {
     /**
      * paramètre géré
      */
@@ -88,5 +89,13 @@ export class NgParamInputComponent extends GenericInputComponent {
             if (this._paramDef.isDefined)
                 this._model = this._paramDef.getValue();
         super.afterFirstViewChecked();
+        this._paramDef.addObserver(this);
+    }
+
+    public update(sender: IObservable, data: any): void {
+        if (data["action"] == "value") {
+            this._model = data["value"];
+            this.updateAndValidateUI();
+        }
     }
 }
diff --git a/src/app/formulaire/ngparam.ts b/src/app/formulaire/ngparam.ts
index 7dd3fda876c24f7c7411bf204e5d4b44795da584..dd7fb6554cfbcd3e01fae5d742329d07252e28f6 100644
--- a/src/app/formulaire/ngparam.ts
+++ b/src/app/formulaire/ngparam.ts
@@ -4,6 +4,7 @@ import { InputField } from "./input-field";
 import { Dependency } from "./dependency";
 import { DependencyConditionType } from "./dependency-condition";
 import { ValueDependencyCondition } from "./value-dependency-condition";
+import { Observable, IObservable, Observer } from "../services/observer";
 
 export enum ParamRadioConfig {
     /**
@@ -41,7 +42,7 @@ export enum ParamValueMode {
 /**
  * classe englobante de ParamDefinition (champs supplémentaires pour l'affichage, radio boutons, ...)
  */
-export class NgParameter extends InputField {
+export class NgParameter extends InputField implements IObservable {
     public unit: string;
     public radioConfig: ParamRadioConfig;
     public radioState: ParamRadioConfig;
@@ -72,8 +73,15 @@ export class NgParameter extends InputField {
      */
     private _valueList: number[];
 
+    /**
+     * implémentation par délégation de IObservable
+     */
+    private _observable: Observable;
+
     constructor(private _paramDef: ParamDefinition, formId: number) {
         super(_paramDef.computeNodeType, _paramDef.symbol, formId);
+        this._observable = new Observable();
+        this._observable.sender = this;
     }
 
     get symbol(): string {
@@ -90,6 +98,12 @@ export class NgParameter extends InputField {
 
     public setValue(val: number) {
         this._paramDef.v = val;
+        this.notifyObservers(
+            {
+                "action": "value",
+                "value": val
+            }
+        )
     }
 
     get isDefined(): boolean {
@@ -270,4 +284,27 @@ export class NgParameter extends InputField {
                 throw "NgParameter.verifyDependency() : type de condition '" + DependencyConditionType[d.masterCondition.type] + "' non pris en charge";
         }
     }
+
+    // interface IObservable
+
+    /**
+     * ajoute un observateur à la liste
+     */
+    public addObserver(o: Observer) {
+        this._observable.addObserver(o);
+    }
+
+    /**
+     * supprime un observateur de la liste
+     */
+    public removeObserver(o: Observer) {
+        this._observable.removeObserver(o);
+    }
+
+    /**
+     * notifie un événement aux observateurs
+     */
+    public notifyObservers(data: any) {
+        this._observable.notifyObservers(data);
+    }
 }