diff --git a/src/app/formulaire/definition/form-definition.ts b/src/app/formulaire/definition/form-definition.ts
index 2a1e305afa902ee19e67ddc945b4945ff7767a27..f27c653b5f4240ac5ae5de8255fd49069620ea3e 100644
--- a/src/app/formulaire/definition/form-definition.ts
+++ b/src/app/formulaire/definition/form-definition.ts
@@ -517,6 +517,42 @@ export abstract class FormulaireDefinition extends FormulaireNode implements Obs
         }
     }
 
+    /**
+     * MAJ des liens entre paramètres lors de la désérialisation JSON
+     */
+
+    private getNthFieldset(n: number): FieldSet {
+        let i = 0;
+        for (const e of this.topFormElements) {
+            if (e instanceof FieldSet) {
+                if (i === n)
+                    return e;
+                i++;
+            }
+        }
+
+        return undefined;
+    }
+
+    /**
+      * @param json conf du formulaire
+      * @param uidMap table de correspondance uid dans le fichier de conf <-> uid en mémoire
+      */
+    public updateParamsLinks(json: {}, uidMap: {}[]) {
+        for (const ks in json)
+            switch (ks) {
+                case "elements":
+                    let n = 0;
+                    for (const e of json[ks]) {
+                        if (Object.keys(e)[0] === "fieldset") {
+                            this.getNthFieldset(n).updateParamsLinks(e["fieldset"], uidMap);
+                            n++;
+                        }
+                    }
+                    break;
+            }
+    }
+
     //  interface Observer
 
     public update(sender: any, data: any) {
diff --git a/src/app/formulaire/fieldset.ts b/src/app/formulaire/fieldset.ts
index 64bbcf197b24934c531d313e0f15e11f9752f61f..d4272e313c4a74cab049614f902596880271ea51 100644
--- a/src/app/formulaire/fieldset.ts
+++ b/src/app/formulaire/fieldset.ts
@@ -441,4 +441,42 @@ export class FieldSet extends FormulaireElement implements Observer {
             }
         }
     }
+
+    /**
+     * MAJ des liens entre paramètres lors de la désérialisation JSON
+     * @param json conf du fieldset issue du fichier
+     * @param uidMap table de correspondance uid dans le fichier de conf <-> uid en mémoire
+     */
+    public updateParamsLinks(json: {}, uidMap: {}[]) {
+        for (const ks in json)
+            switch (ks) {
+                case "elements":
+                    for (const e of json[ks])
+                        if (Object.keys(e)[0] === "param") {
+                            const prm = e["param"];
+                            if (prm["values"]["mode"] === "LINK") {
+                                // id du formulaire cible dans le fichier
+                                const oldFormUid = +prm["values"]["form_uid"];
+
+                                // correspondance avec l'objet mémoire
+                                let newFormUid;
+                                for (const m of uidMap)
+                                    if (m["type"] === "form" && m["old"] == oldFormUid) {
+                                        newFormUid = m["new"];
+                                        break;
+                                    }
+
+                                // formulaire dont le Nub est la cible du lien
+                                const destForm: FormulaireDefinition = ServiceFactory.instance.formulaireService.getFormulaireFromId(newFormUid);
+
+                                // paramètre source (celui qui est lié à une valeur)
+                                const src: NgParameter = this.getFormulaireNodeById(prm["id"]) as NgParameter;
+
+                                // création du lien
+                                src.paramDefinition.defineReference(destForm.currentSessionNub.nub, prm["values"]["ref"]);
+                            }
+                            break;
+                        }
+            }
+    }
 }
diff --git a/src/app/formulaire/ngparam.ts b/src/app/formulaire/ngparam.ts
index c6856de9ab04abb10684b5f15ee4a42dd4a4a037..7f25ebf3768ac277215029fc2429e44440e55c02 100644
--- a/src/app/formulaire/ngparam.ts
+++ b/src/app/formulaire/ngparam.ts
@@ -375,6 +375,9 @@ export class NgParameter extends InputField implements Observer {
                 this._paramValues.valueMode = ParamValueMode.CALCUL;
                 break;
 
+            case ParamValueMode.LINK:
+                break;  // cf FormulaireService.updateParamsLinks()
+
             default:
                 throw new Error(`session file : invalid value mode '${json["mode"]}' in param object`);
         }
diff --git a/src/app/services/formulaire/formulaire.service.ts b/src/app/services/formulaire/formulaire.service.ts
index c66096a4fb655cfc48cf6aad8bf7624a67bf0165..6a08c55462f4dfbb6168911f5b4ee2ce68085203 100644
--- a/src/app/services/formulaire/formulaire.service.ts
+++ b/src/app/services/formulaire/formulaire.service.ts
@@ -165,7 +165,6 @@ export class FormulaireService extends Observable {
             f.parseConfig();
             if (jsonState !== undefined) {
                 f.deserialiseJSON(jsonState);
-                const props = jsonState["props"];
             }
             // la méthode loadUpdateFormulaireLocalisation retourne une Promise; le fait de retourner une Promise dans un then
             // fait que le then suivant est exécuté juste après.
@@ -414,13 +413,13 @@ export class FormulaireService extends Observable {
         });
     }
 
-    private deserialiseForm(elements: {}) {
+    private deserialiseForm(elements: {}): Promise<FormulaireDefinition> {
         const props = elements["props"];
         const ct: CalculatorType = props["calcType"];
-        this.createFormulaire(ct, elements);
+        return this.createFormulaire(ct, elements);
     }
 
-    private deserialiseSessionElement(element: {}, formInfos: any[]) {
+    private deserialiseSessionElement(element: {}, formInfos: any[]): Promise<FormulaireDefinition> {
         const keys = Object.keys(element);
         if (keys.length !== 1) {
             throw new Error(`session file : invalid session object '${element}'`);
@@ -432,7 +431,7 @@ export class FormulaireService extends Observable {
 
                 for (const i of formInfos) {
                     if (i["uid"] === form["uid"] && i["selected"]) {
-                        this.deserialiseForm(form);
+                        return this.deserialiseForm(form);
                     }
                 }
                 break;
@@ -442,12 +441,85 @@ export class FormulaireService extends Observable {
         }
     }
 
+    /**
+     * met à jour les liens d'un formulaire
+     * @param json conf du formulaire
+     * @param formInfos métadonnées sur les formulaires chargés
+     * @param form formulaire dont on met à jour les liens
+     * @param uidMap table de correspondance uid dans le fichier de conf <-> uid en mémoire
+     */
+    private updateFormLinks(json: {}, formInfos: any[], form: FormulaireDefinition, uidMap: {}[]) {
+        for (const i of formInfos) {
+            if (i["uid"] === json["uid"] && i["selected"]) {
+                form.updateParamsLinks(json, uidMap);
+            }
+        }
+    }
+
+    /**
+     * MAJ des liens entre paramètres lors de la désérialisation JSON
+     */
+
+    private updateParamsLinks(json: {}, formInfos: any[], oldFormCount: number) {
+        // table de correspondance des uid fichier <-> objets mémoire
+        // forme : tableau d'objets de la forme :
+        // { "type" : <type de l'objet. "form" pour formulaire>,
+        //   "old": <uid dans le fichier>,
+        //   "new": <uid de l'objet mémoire>}
+
+        const uidMap = [];
+        for (const ks in json) {
+            switch (ks) {
+                case "elements":
+                    let n = oldFormCount;
+                    for (const e of json[ks]) {
+                        if (Object.keys(e)[0] === "form") {
+                            uidMap.push({
+                                "type": "form",
+                                "old": e["form"]["uid"],
+                                "new": this._formulaires[n].uid
+                            });
+                            n++;
+                        }
+                    }
+            }
+        }
+
+        // MAJ liens
+
+        for (const ks in json) {
+            switch (ks) {
+                case "elements":
+                    let n = 0;
+                    for (const e of json[ks]) {
+                        if (Object.keys(e)[0] === "form") {
+                            this.updateFormLinks(e["form"], formInfos, this._formulaires[n + oldFormCount], uidMap);
+                            n++;
+                        }
+                    }
+                    break;
+
+                default:
+                    throw new Error(`session file : invalid key '${ks}' in session object`);
+            }
+        }
+    }
+
     private deserialiseSession(elements: {}, formInfos: any[]) {
+        let p: Promise<FormulaireDefinition>;
+
+        const oldFormCount = this._formulaires.length;
         for (const ks in elements) {
             switch (ks) {
                 case "elements":
                     for (const e of elements[ks]) {
-                        this.deserialiseSessionElement(e, formInfos);
+                        if (p === undefined) {
+                            p = this.deserialiseSessionElement(e, formInfos);
+                        } else {
+                            p = p.then(_ => {
+                                return this.deserialiseSessionElement(e, formInfos);
+                            });
+                        }
                     }
                     break;
 
@@ -455,6 +527,7 @@ export class FormulaireService extends Observable {
                     throw new Error(`session file : invalid key '${ks}' in session object`);
             }
         }
+        p.then(_ => this.updateParamsLinks(elements, formInfos, oldFormCount));
     }
 
     /**