diff --git a/src/module_vmap/module/javascript/app/vmap/tools/select/basicselect.js b/src/module_vmap/module/javascript/app/vmap/tools/select/basicselect.js
index cd9c3943d6433202f21825bcf74e4b98006c7185..e134c148e7ca0f0cf3c97c5f37a71378f5753459 100755
--- a/src/module_vmap/module/javascript/app/vmap/tools/select/basicselect.js
+++ b/src/module_vmap/module/javascript/app/vmap/tools/select/basicselect.js
@@ -282,8 +282,10 @@ nsVmap.nsToolsManager.BasicSelect.prototype.basicSelectController.prototype.quer
  */
 nsVmap.nsToolsManager.BasicSelect.prototype.basicSelectController.prototype.getBOLayersFilters_ = function (oQueryBo) {
     oVmap.log('nsVmap.nsToolsManager.BasicSelect.prototype.basicSelectController.prototypeBO.getLayersFilters_');
+    var formReaderSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["formReaderService"]);
 
     var oFilterValues = {};
+    var oFilterDefinition = {};
     var sFilter = "";
     var filter = {
         'relation': 'AND',
@@ -297,6 +299,13 @@ nsVmap.nsToolsManager.BasicSelect.prototype.basicSelectController.prototype.getB
                 oLayerFilter_ = oQueryBo['layers'][i].get('filter_values_cleared');
                 if (goog.isObject(oLayerFilter_)) {
                     goog.object.extend(oFilterValues, oLayerFilter_);
+                    oLayerFilterDef_ = oQueryBo['layers'][i].get('filter_form');
+                    if(goog.isObject(oLayerFilterDef_)){
+                        for (var field in oLayerFilter_){
+                            var oFieldDef = formReaderSrvc["getFormElementDefinition"](field, 'search', oLayerFilterDef_);
+                            oFilterDefinition[field] = oFieldDef;
+                        }
+                    }
                 }
             }
         }
@@ -323,13 +332,51 @@ nsVmap.nsToolsManager.BasicSelect.prototype.basicSelectController.prototype.getB
                 continue;
             }
         }
-
-        filter['operators'].push({
-            'column': key,
-            'compare_operator': goog.isArray(oFilterValues[key]) ? 'IN' : '=',
-            'value': oFilterValues[key]
-        });
-    }
+        var sValue = oFilterValues[key]
+        //surcharge le filtre si une définition est rpésente dans le formulaire
+        if(goog.isDefAndNotNull(oFilterDefinition[key]["comparator"])){
+            var aOperators = [];
+            for (var j = 0;j < oFilterDefinition[key]["comparator"].length;j++){
+                var oOperator = {};
+                if (goog.isDefAndNotNull(oFilterDefinition[key]["comparator"][j]["formater"])) {
+                    sValue = oFilterDefinition[key]["comparator"][j]["formater"].replace(/<VALUE_TO_REPLACE>/g, sValue);
+                }
+                if(goog.isArray(oFilterDefinition[key]["comparator"][j]["compare_operator"])) {
+                    oOperator["relation"] = (goog.isDefAndNotNull(oFilterDefinition[key]["comparator"][j]["relation"]) ? oFilterDefinition[key]["comparator"][j]["relation"] : "AND");
+                    oOperator["operators"] = [];
+                    for (var k = 0; k < oFilterDefinition[key]["comparator"][j]["compare_operator"].length; k++){
+                        oOperator["operators"].push({
+                            "column": (goog.isArray(oFilterDefinition[key]["comparator"][j]["column"]) ? oFilterDefinition[key]["comparator"][j]["column"][k] : key),
+                            "compare_operator": oFilterDefinition[key]["comparator"][j]["compare_operator"][k],
+                            "value": sValue
+                        });
+                    }
+                }else{
+                    oOperator["column"] = (goog.isDefAndNotNull(oFilterDefinition[key]["comparator"][j]["column"]) ? oFilterDefinition[key]["comparator"][j]["column"] : key);
+                    oOperator["compare_operator"] = oFilterDefinition[key]["comparator"][j]["compare_operator"];
+                    oOperator["value"] = sValue;
+                }
+                if(goog.isDefAndNotNull(oFilterDefinition[key]["comparator"][j]["compare_operator_options"])){
+                    oOperator["compare_operator_options"] = oFilterDefinition[key]["comparator"][j]["compare_operator_options"];
+                }
+                aOperators.push(oOperator);
+            }
+            if(goog.isDefAndNotNull(oFilterDefinition[key]["comparator_relation"])){
+                filter['operators'].push({
+                    "relation": oFilterDefinition[key]["comparator_relation"],
+                    "operators": aOperators
+                });
+            }else{
+                filter['operators'] = filter['operators'].concat(aOperators);
+            }
+        } else {
+            filter['operators'].push({
+                'column': key,
+                'compare_operator': goog.isArray(oFilterValues[key]) ? 'IN' : '=',
+                'value': sValue
+            });
+        }
+    } 
     sFilter = JSON.stringify(filter);
 
     return sFilter;