diff --git a/src/app/formulaire/definition/concrete/form-parallel-structures.ts b/src/app/formulaire/definition/concrete/form-parallel-structures.ts
index d629a2cf928077d743a36e14ef519c723a327912..5606c737ef3dc065100e0c395c42096a8d1b540c 100644
--- a/src/app/formulaire/definition/concrete/form-parallel-structures.ts
+++ b/src/app/formulaire/definition/concrete/form-parallel-structures.ts
@@ -193,25 +193,117 @@ export class FormulaireParallelStructure extends FormulaireDefinition {
     }
 
     /**
-     * après une modification, détermine si les propriétés sont compatibles entre elles et les ajuste au besoin
+     * recherche dans une config le 1er select avec une entrée "enum" avec une valeur donnée
+     */
+    private findSelectWithEnum(conf: {}, enumName: string, enumVal: string): {
+        "select": { [key: string]: string; },
+        "entry": { [key: string]: string; }
+    } {
+        let select; // select 
+        let selectEntry; // entrée du select correspondant à la valeur de l'enum
+
+        for (const k in conf) {
+            const kid = conf[k];
+            if (kid.type === "select") {
+                // entrées
+                for (const e of kid.select) {
+                    if (e.enum !== undefined) {
+                        const tmp = e.enum.split(".");
+                        const found = tmp[0] === enumName && tmp[1] === enumVal;
+                        if (found) {
+                            select = kid;
+                            selectEntry = e;
+                            break;
+                        }
+                    }
+                }
+                if (select !== undefined)
+                    break;
+            }
+        }
+
+        if (select === undefined)
+            return undefined;
+
+        return { "select": select, "entry": selectEntry };
+    }
+
+    /**
+     * recherche dans une config le 1er objet avec dépendance donnée
+     */
+    private findObjectWithDependency(conf: {}, refid: string, refvalue: string): {} {
+        for (const k in conf) {
+            const kid = conf[k];
+            if (kid.dep_exist !== undefined) {
+                for (const dep of kid.dep_exist)
+                    if (dep.refid === refid && dep.refvalue === refvalue)
+                        return kid;
+            }
+        }
+
+        return undefined;
+    }
+
+    /**
+     * trouve une loi de débit compatible avec un type de structure dans un Fieldset en tenant compte des dépendances entre selects
+     * @param fs 
+     * @param structType
+     */
+    private adjustLoiDebit(fs: FieldSet, structType: StructureType): Props {
+        const res: Props = fs.properties.clone();
+
+        // recherche du select "type de structure"
+
+        const structSelect = this.findSelectWithEnum(fs.jsonConfig["fields"], "StructureType", StructureType[structType]);
+        if (structSelect === undefined)
+            throw new Error(`pas de select trouvé pour la propriété StructureType=${StructureType[structType]}`);
+
+        // recherche du select dépendant (lois de débit)
+
+        const loidebitSelect = this.findObjectWithDependency(fs.jsonConfig["fields"], structSelect.select.id, structSelect.entry.id);
+        if (loidebitSelect === undefined || loidebitSelect["type"] !== "select")
+            throw new Error(`pas de select trouvé avec une dépendance au select 'type de structure' pour la valeur ${structSelect.select.id}=${structSelect.entry.id} (1)`);
+
+        // liste des enums du select dépendant
+
+        const loisDebit = [];
+        for (const e of loidebitSelect["select"])
+            if (e.enum !== undefined) {
+                const tmp = e.enum.split(".");
+                loisDebit.push(LoiDebit[tmp[1]]);
+            }
+
+        if (loisDebit.length === 0)
+            throw new Error(`pas de select trouvé avec une dépendance au select 'type de structure' pour la valeur ${structSelect.select.id}=${structSelect.entry.id} (2)`);
+
+        res.setPropValue("loiDebit", StructureProperties.findCompatibleLoiDebit(structType, loisDebit));
+
+        return res;
+    }
+
+    // private adjustTypeStruct(fs: FieldSet, loiDebit: LoiDebit): Props {
+    //     return undefined;
+    // }
+
+    /**
+     * après une modification, détermine si les propriétés d'un Fieldset sont compatibles entre elles et les ajuste au besoin
      * @param props propriétés à vérifier
      * @param name nom de la propriété qui vient de changer
      * @param val nouvelle valeur de la propriété
      */
-    private adjustProperties(props: Props, name: string, val: any) {
-        const res: Props = props.clone();
-
-        // si prop=type d'ouvrage, on prend une loi de débit compatible avec (spécifique aux ouvrages //) comme valeur par défaut
+    private adjustProperties(fs: FieldSet, name: string, val: any): Props {
+        // si prop=type d'ouvrage, on prend la 1ère loi de débit compatible avec (spécifique aux ouvrages //), en tenant compte des dépendances.
+        // (par ex, s'il existe un select de lois de débit dépendant du select de types d'ouvrage, on prend la 1ère entrée du select de lois de débit compatible)
         if (name === "structureType") {
-            if (!StructureProperties.isCompatibleValues(val, res.getPropValue("loiDebit")))
-                res.setPropValue("loiDebit", StructureProperties.findCompatibleLoiDebit(val));
+            if (!StructureProperties.isCompatibleValues(val, fs.properties.getPropValue("loiDebit")))
+                return this.adjustLoiDebit(fs, val);
         }
         // si prop=loi débit, on prend un type d'ouvrage compatible
-        else if (name === "loiDebit")
-            if (!StructureProperties.isCompatibleValues(res.getPropValue("structureType"), val))
-                res.setPropValue("structureType", StructureProperties.findCompatibleStructure(val));
+        // else if (name === "loiDebit")
+        //     if (!StructureProperties.isCompatibleValues(fs.properties.getPropValue("structureType"), val))
+        //         return this.adjustTypeStruct(fs, val);
 
-        return res;
+        return fs.properties;
     }
 
     /**
@@ -251,7 +343,7 @@ export class FormulaireParallelStructure extends FormulaireDefinition {
         else if (sender instanceof FieldSet && data.action == "propertyChange") {
             switch (sender.id) {
                 case "fs_ouvrage":
-                    const props = this.adjustProperties(sender.properties, data["name"], data["value"]);
+                    const props = this.adjustProperties(sender, data["name"], data["value"]);
                     const newNub = this.replaceSessionNub(sender.sessionNub, props);
                     sender.setSessionNub(newNub);
                     this.reset();
diff --git a/src/app/formulaire/fieldset.ts b/src/app/formulaire/fieldset.ts
index a4777cecf47a921649ba3c407ec81e47e4994fea..cfcd138fa17a735385f5a5213e55c2fba338f5fe 100644
--- a/src/app/formulaire/fieldset.ts
+++ b/src/app/formulaire/fieldset.ts
@@ -112,6 +112,10 @@ export class FieldSet extends FormulaireElement implements Observer {
         return this._sessionNub.nub.getParameter(symbol);
     }
 
+    public get jsonConfig(): {} {
+        return this._jsonConfig;
+    }
+
     /**
      * crée un input
      * @param json definition de l'input, extrait du fichier de conf de la calculette
@@ -332,7 +336,7 @@ export class FieldSet extends FormulaireElement implements Observer {
                         case "select_ouvrage": // ouvrages parallèles
                             this.setPropValue("structureType", data.value.value);
                             break;
-                        case "select_loidebit": // ouvrages parallèles et dérivées
+                        case "select_loidebit": // ouvrages parallèles et dérivés
                             this.setPropValue("loiDebit", data.value.value);
                             break;
                         case "select_resolution": // courbes de remous, méthode de résolution