diff --git a/src/param/param-base.ts b/src/param/param-base.ts
index 9778896bc44f46246964e6748dbe976c6114591a..027b62cdc0c0f90ce5235d3c5d1533bd2c18056c 100644
--- a/src/param/param-base.ts
+++ b/src/param/param-base.ts
@@ -145,6 +145,107 @@ export class BaseParam extends JalhydObject implements IObjectReference, Iterabl
         }
     }
 
+    /**
+     * vérifie si un min/max est valide par rapport au domaine de définition
+     */
+    private isMinMaxDomainValid(v: number): boolean {
+        if (v == undefined)
+            return false;
+
+        if (this._paramValues.valueMode == ParamValueMode.MINMAX)
+            try {
+                this.checkValue(v);
+            }
+            catch (e) {
+                return false;
+            }
+
+        return true;
+    }
+
+    public checkMin(min: number): boolean {
+        return this.isMinMaxDomainValid(min) && (min < this._paramValues.max);
+    }
+
+    public checkMax(max: number): boolean {
+        return this.isMinMaxDomainValid(max) && (this._paramValues.min < max);
+    }
+
+    private checkMinMax(min: number, max: number): boolean {
+        return this.isMinMaxDomainValid(min) && this.isMinMaxDomainValid(max) && (min < max);
+    }
+
+    public get isMinMaxValid(): boolean {
+        return this.checkMinMax(this._paramValues.min, this._paramValues.max);
+    }
+
+    public checkStep(step: number): boolean {
+        return this.isMinMaxValid && this._paramValues.stepRefValue.intervalHasValue(step);
+    }
+
+    public get isValueValid(): boolean {
+        try {
+            const v = this.getValue();
+            this.checkValue(v);
+            return true;
+        }
+        catch (e) {
+            return false;
+        }
+    }
+
+    private get isListValid(): boolean {
+        if (this._paramValues.valueList == undefined)
+            return false;
+
+        for (let v of this._paramValues.valueList)
+            try {
+                this.checkValue(v);
+            }
+            catch (e) {
+                return false;
+            }
+        return true;
+    }
+
+    public get isRangeValid(): boolean {
+        switch (this._paramValues.valueMode) {
+            case ParamValueMode.LISTE:
+                return this.isListValid;
+
+            case ParamValueMode.MINMAX:
+                return this.checkStep(this._paramValues.step);
+        }
+
+        throw new Error(`"BaseParam.isRangeValid() : valeur ${ParamValueMode[this._paramValues.valueMode]} de ParamValueMode non prise en compte`);
+    }
+
+    public get isValid() {
+        switch (this._paramValues.valueMode) {
+            case ParamValueMode.SINGLE:
+                return this.isValueValid;
+
+            case ParamValueMode.MINMAX:
+            case ParamValueMode.LISTE:
+                return this.isRangeValid;
+
+            case ParamValueMode.CALCUL:
+                return true;
+
+            case ParamValueMode.LINK:
+                try {
+                    for (const v of this.valuesIterator)
+                        this.checkValue(v);
+                    return true
+                }
+                catch (e) {
+                    return false;
+                }
+        }
+
+        throw new Error(`"BaseParam.isValid() : valeur de ParamValueMode '${ParamValueMode[this._paramValues.valueMode]}' non prise en charge`);
+    }
+
     public get valueMode() {
         return this._paramValues.valueMode;
     }