diff --git a/administration/guide_developpeur/filtres_couches.md b/administration/guide_developpeur/filtres_couches.md
index 2f03d88a0e8c2b17f8f62c26061043319d5d8673..b186a8a60cfd32eea2a3c1bf8b3e1b8b1264050c 100644
--- a/administration/guide_developpeur/filtres_couches.md
+++ b/administration/guide_developpeur/filtres_couches.md
@@ -51,4 +51,172 @@ Après avoir mis à jour le calque, une nouvelle section "Formulaire de filtre"
 
 # Autres exemples d'utilisation des filtres dans vMap
 
-Section en cours de rédaction..
+## 1 - Filtre textuelle non obligatoire et fonctionnement similaire au LIKE en SQL
+
+Dans le studio il faudra définir un champ de type texte ou une liste déroulante avec une source de données adaptée.
+
+Il faudra définir votre filtre pour qu'il utilise une valeur par défaut qui permettra de court-circuiter le filtre. (Dans le cas présent **'empty'**)
+
+Si vous voulez un fonctionnement plus proche d'un LIKE SQL utilisez **~** à la place de **=**. (voir exemple ci-dessous)
+
+```
+	FILTER (([type] = '%type%' or '%type%' = 'empty') and ([liketext] ~ '%liketext%' or '%liketext%' = 'empty')
+    VALIDATION
+        'type' '^empty|value_type_1|value_type_2|value_type_3$'
+        'liketext' '^empty|.{1,}$'
+        'default_type' 'empty'
+        'default_liketext' 'empty'
+    END
+```
+
+## 2 - Filtre sur une colonne de type date/timestamp
+
+Pour filtrer sur un attribut unique de type date/timestamp référez vous à la documentation de MapServer http://mapserver.org/ogc/wms_time.html.
+
+## 3 - Filtre sur plusieurs colonnes de type date/timestamp
+
+Vue que la spécification d'un champ de type date/timestamp se fait dans la partie **METADATA**, il est impossible pour MapServer de traiter deux champs de ce type en théorie.
+
+En réalité par un moyen détourné, il est possible de gérer autant de champs date/timestamp que vous voulez.
+
+Pour l'exemple, je vais prendre trois champs en base creation_date (date de création d'un objet, type postgres timestamp with time zone), date_debut_travaux (une date de début de travaux pour un objet métier par exemple, type timestamp with time zone), duree_travaux_jour (la durée des travaux en jours à partie de la date de début, type integer)
+
+### a - Adapter votre vue
+
+Pour permettre à MapServer de les traiter comme des entiers il va falloir que la vue retourne des entiers.
+
+Exemple de code permettant de faire cela :
+
+```sql
+	date_part('epoch'::text, table.creation_date)::integer AS mstmstp_creation_date,
+    date_part('epoch'::text, table.date_debut_travaux)::integer AS mstmstp_date_debut_travaux,
+    date_part('epoch'::text, table.date_debut_travaux + table.duree_travaux_jour * '1 day'::interval)::integer AS mstmstp_date_fin_travaux
+```
+
+### b - Adapter votre formulaire avec le studio
+
+Ajouter les champs dates que vous voulez. Dans le cas présent on va laisser la possibilité de prendre une date au dessus, en dessous, ou d'encadrer la/les date(s).
+Pour chaque champ date il faut un champ caché. Le champ date va renvoyer une valeur formatée  du type 'DD/MM/YYYY' ou 'YYYY-MM-DD', mais nous voulons un timestamp. Nous allons voir dans la prochaine partie comment utiliser un champ date pour remplir un champ caché avec un timestamp.
+
+
+![](../../images/filtres_couches_exemples_1.jpg)
+
+### c - Permettre au formulaire de calculer les timestamps
+
+Il va falloir ajouter du code javascript spécifique à ce formulaire. Pour ce faire il va falloir changer de mode d'utilisation du studio, pour pouvoir éditer du javascript.
+
+![](../../images/filtres_couches_exemples_2.jpg)
+
+Vous allez arriver devant un champ vide.
+
+Voici le code permettant de remplir les champs cachés pour l'exemple :
+
+```javascript
+/* global angular, goog, moment, vitisApp, bootbox */
+
+// goog fonctionne en mode décompilé mais pas en mode compilé
+
+console.info("filtre_mapserver_couche_NOM loaded --> your functions are ready");
+/***********************************************************************************
+ filtre_mapserver_couche_NOM Javascript
+ ***********************************************************************************/
+
+var oFormRequired = {
+    "sUrl": "",
+    "scope_": {},
+    "toDestructor": []
+};
+/**
+ * constructor_form
+ * Fonction appelée à l'initialisation du formulaire
+ * @param {type} scope
+ * @param {type} s_url
+ * @returns {undefined}
+ */
+var constructor_form = function (scope, s_url) {
+
+    oFormRequired.sUrl = s_url;
+    oFormRequired.scope_ = scope;
+
+    var formaterStringFrom = "DD/MM/YYYY";
+    var formaterStringTo = "X"; // timestamp UNIX
+    oFormRequired.toDestructor.push(oFormRequired.scope_.$watch("oFormValues." + oFormRequired.scope_.sFormDefinitionName + ".creation_date_min_viz", function (value) {
+            if (typeof(value) !== "undefined" && value !== "") {
+                oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["creation_date_min"] = moment(value, formaterStringFrom).format(formaterStringTo);
+            } else {
+                oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["creation_date_min"] = null;
+            }
+        })
+    );
+    oFormRequired.toDestructor.push(oFormRequired.scope_.$watch("oFormValues." + oFormRequired.scope_.sFormDefinitionName + ".creation_date_max_viz", function (value) {
+            if (typeof(value) !== "undefined" && value !== "") {
+                oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["creation_date_max"] = moment(value, formaterStringFrom).format(formaterStringTo);
+            } else {
+                oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["creation_date_max"] = null;
+            }
+        })
+    );
+    oFormRequired.toDestructor.push(oFormRequired.scope_.$watch("oFormValues." + oFormRequired.scope_.sFormDefinitionName + ".tavaux_date_min_viz", function (value) {
+            if (typeof(value) !== "undefined" && value !== "") {
+                oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["travaux_date_min"] = moment(value, formaterStringFrom).format(formaterStringTo);
+            } else {
+                oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["travaux_date_min"] = null;
+            }
+        })
+    );
+    oFormRequired.toDestructor.push(oFormRequired.scope_.$watch("oFormValues." + oFormRequired.scope_.sFormDefinitionName + ".tavaux_date_max_viz", function (value) {
+            if (typeof(value) !== "undefined" && value !== "") {
+                oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["travaux_date_max"] = moment(value, formaterStringFrom).format(formaterStringTo);
+            } else {
+                oFormRequired.scope_["oFormValues"][oFormRequired.scope_["sFormDefinitionName"]]["travaux_date_max"] = null;
+            }
+        })
+    );
+
+};
+/**
+ * destructor_form
+ * Fonction appelée quand on quitte le formulaire (ne pas modifier)
+ * @returns {undefined}
+ */
+var destructor_form = function () {
+    console.log("Destructor");
+
+    for (var i = 0; i < oFormRequired.toDestructor.length; i++) {
+        oFormRequired.toDestructor[i] = undefined;
+        delete oFormRequired.toDestructor[i];
+    }
+
+    //supprimer la balise script du js pour pouvoir le recharger si on revient sur le formulaire plus tard
+    angular.element('[src="' + oFormRequired.sUrl + '?version=' + oFormRequired.scope_["oProperties"]["build"] + '"]').remove();
+
+    oFormRequired = undefined;
+    delete oFormRequired;
+
+    constructor_form = undefined;
+    delete constructor_form;
+    destructor_form = undefined;
+    delete destructor_form;
+};
+/**********************************************************************************/
+```
+
+Ce code créé une instance pour surveiller les changements des champs dates (**$watch**) et utilise une librairie intégrée à Vitis (**moment.js**) pour parser la date, la transformer en timestamp Unix et stocker le résultat dans le champ caché.
+
+### d - Intégration du filtre dans la couche MapServer
+
+```
+	FILTER (([mstmstp_date_debut_travaux] < '%travaux_date_max%' or [mstmstp_date_fin_travaux] < '%travaux_date_max%') and ([mstmstp_date_debut_travaux] < '%travaux_date_min%' or [mstmstp_date_fin_travaux] < '%travaux_date_min%') and ([mstmstp_creation_date] < '%travaux_date_max%') and ([mstmstp_creation_date] > '%creation_date_min%'))
+
+    VALIDATION
+        'creation_date_max' '^[0-9]{1,}$'
+        'creation_date_min' '^[0-9]{1,}$'
+        'travaux_date_max' '^[0-9]{1,}$'
+        'travaux_date_min' '^[0-9]{1,}$'
+        'default_creation_date_max' '10000000000000000000000000'
+        'default_creation_date_min' '0'
+        'default_travaux_date_max' '10000000000000000000000000'
+        'default_travaux_date_min' '0'
+    END
+
+```
diff --git a/images/filtres_couches_exemples_1.jpg b/images/filtres_couches_exemples_1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3addbc4f9f7aee45cefb9f6050d06245e71b3413
Binary files /dev/null and b/images/filtres_couches_exemples_1.jpg differ
diff --git a/images/filtres_couches_exemples_2.jpg b/images/filtres_couches_exemples_2.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..60cb7e9b0f22eab9da0134fc3ae40f7262a58de8
Binary files /dev/null and b/images/filtres_couches_exemples_2.jpg differ