diff --git a/conf/requires/config.js b/conf/requires/config.js
index b0a1e942349940d7a023e69735488e3bd7bab04d..a2d2c3757e624ebd7b7204411a02e9331f3c3246 100644
--- a/conf/requires/config.js
+++ b/conf/requires/config.js
@@ -29,6 +29,7 @@ var oApplicationFiles = {
         'modules/vmap/css/ol.css',
         'modules/vmap/css/vmap.less',
         'modules/vm4ms/less/main.less',
+        'modules/anc/less/main.less',
         'css/lib/codemirror/codemirror.css',
         'css/lib/codemirror/codemirror_foldgutter.css',
         'css/lib/codemirror/map.css',
diff --git a/src/module_anc/module/less/installation.less b/src/module_anc/module/less/installation.less
new file mode 100644
index 0000000000000000000000000000000000000000..e38d8f784d3187ee36503dd58890da72e2b6b8fe
--- /dev/null
+++ b/src/module_anc/module/less/installation.less
@@ -0,0 +1,13 @@
+// Bouton "supprimer les installations".
+button[name="anc_saisie_anc_installation_deleteFlexigrid"] {
+    color: #fff;
+    background-color: #d9534f;
+    border-color: #d43f3a;
+}
+// Bouton "Ajouter une installation".
+button[name="anc_saisie_anc_installation_add_smallFlexigrid"] {
+    color: #fff;
+    background-color: #5cb85c;
+    border-color: #4cae4c;
+    margin-right: 100px;
+}
\ No newline at end of file
diff --git a/src/module_anc/module/less/main.less b/src/module_anc/module/less/main.less
new file mode 100644
index 0000000000000000000000000000000000000000..bb0d9d122754198104f0338eaf75dec3909d4767
--- /dev/null
+++ b/src/module_anc/module/less/main.less
@@ -0,0 +1,5 @@
+// LESS
+@ui-grid-bg-image: "../images/ui-grid/wbg.gif";
+@font-color-purple: #6d1a67;
+@test-color: black;
+@import 'installation.less';
\ No newline at end of file
diff --git a/src/module_anc/web_service/sql/sqlQueries.xml b/src/module_anc/web_service/sql/sqlQueries.xml
index 2cac10d2514ed43b687b4cbb469f796fe2d06fb3..e79a608203bce38504876669bb09dc9559fea187 100644
--- a/src/module_anc/web_service/sql/sqlQueries.xml
+++ b/src/module_anc/web_service/sql/sqlQueries.xml
@@ -3114,5 +3114,16 @@
 				]]>
 			</code>
 		</query>
+		<query>
+			<type>init</type>
+			<version>2019.01.00</version>
+			<code>
+				<![CDATA[
+				DELETE FROM s_vitis.vm_table_button WHERE tab_id = (SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'anc_installation') AND label_id IN ('anc_13', 'anc_14');
+				INSERT INTO s_vitis.vm_table_button (button_class, table_button_id, event, label_id, ressource_id, tab_id) VALUES ('add_smallFlexigrid',(SELECT nextval('s_vitis.seq_vm'::regclass)), 'AddSectionForm', 'anc_14', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'anc_installation'), (SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'anc_installation'));
+				INSERT INTO s_vitis.vm_table_button (button_class, table_button_id, event, label_id, ressource_id, tab_id) VALUES ('deleteFlexigrid',(SELECT nextval('s_vitis.seq_vm'::regclass)), 'DeleteSelection', 'anc_13', (SELECT ressource_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'anc_installation'), (SELECT tab_id FROM s_vitis.vm_tab WHERE vm_tab.name = 'anc_installation'));
+				]]>
+			</code>
+		</query>
 	</queriesCollection>
 </sqlQueries>
diff --git a/src/module_vmap/module/javascript/app/vmap/tools/insert.js b/src/module_vmap/module/javascript/app/vmap/tools/insert.js
index 3e2a40ce1ede6f7d9f266c25b9d54b077e6eb669..b4b7e11aabe4ec7145ccb781d40db4ae9276cd5f 100644
--- a/src/module_vmap/module/javascript/app/vmap/tools/insert.js
+++ b/src/module_vmap/module/javascript/app/vmap/tools/insert.js
@@ -1528,14 +1528,24 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController.prototype.getFormDat
     var oFormData_ = new FormData();
 
     for (var key in oValues) {
+
+        var bIsMultipleFiles = false;
+        if (goog.isObject(oValues[key])) {
+            if (goog.isDefAndNotNull(oValues[key].length)) {
+                bIsMultipleFiles = true
+            }
+        }
+
         // Fichier ?
-        if (goog.isDefAndNotNull(oValues[key])) {
-            if (goog.isDefAndNotNull(oValues[key]['aFiles'])) {
-                oFormData_.append(key + '_attached_content', oValues[key]['aFiles'][0]);
-                oFormData_.append(key, oValues[key]['aFiles'][0]['name']);
-            } else {
-                oFormData_.append(key, oValues[key]);
+        if (goog.isDefAndNotNull(oValues[key]['aFiles'])) {
+            oFormData_.append(key + '_attached_content', oValues[key]['aFiles'][0]);
+            oFormData_.append(key, oValues[key]['aFiles'][0]['name']);
+        } else if (bIsMultipleFiles) {
+            for (var i = 0; i < oValues[key].length; i++) {
+                oFormData_.append(key + '[]', oValues[key][i]);
             }
+        } else {
+            oFormData_.append(key, oValues[key]);
         }
     }
 
diff --git a/src/module_vmap/module/javascript/app/vmap/tools/select/select.js b/src/module_vmap/module/javascript/app/vmap/tools/select/select.js
index 40e7600350320c0c3a9d0e026ba2554433e1bdad..6438fce7e678a9d6e390b184d5a9bd03cc69a6e0 100755
--- a/src/module_vmap/module/javascript/app/vmap/tools/select/select.js
+++ b/src/module_vmap/module/javascript/app/vmap/tools/select/select.js
@@ -1650,10 +1650,22 @@ nsVmap.nsToolsManager.Select.prototype.selectController.prototype.getFormDataFro
     var oFormData_ = new FormData();
 
     for (var key in oValues) {
+
+        var bIsMultipleFiles = false;
+        if (goog.isObject(oValues[key])) {
+            if (goog.isDefAndNotNull(oValues[key].length)) {
+                bIsMultipleFiles = true
+            }
+        }
+
         // Fichier ?
         if (goog.isDefAndNotNull(oValues[key]['aFiles'])) {
             oFormData_.append(key + '_attached_content', oValues[key]['aFiles'][0]);
             oFormData_.append(key, oValues[key]['aFiles'][0]['name']);
+        } else if (bIsMultipleFiles) {
+            for (var i = 0; i < oValues[key].length; i++) {
+                oFormData_.append(key + '[]', oValues[key][i]);
+            }
         } else {
             oFormData_.append(key, oValues[key]);
         }
diff --git a/src/module_vmap/web_service/ws/Querys.class.inc b/src/module_vmap/web_service/ws/Querys.class.inc
index 3aed39da27e23ba5bbe1615d9fa027c6127d5f48..da9788fb5969e4db206760b1971e165d81d4fd2b 100644
--- a/src/module_vmap/web_service/ws/Querys.class.inc
+++ b/src/module_vmap/web_service/ws/Querys.class.inc
@@ -15,8 +15,9 @@ require_once 'Vmap.class.inc';
 require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vitis_lib/Connection.class.inc';
 require_once 'Query.class.inc';
 require_once 'BusinessObject.class.inc';
-require_once(dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vmlib/BdDataAccess.inc');
-require_once(dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vmlib/phpUtil.inc');
+require_once (dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vmlib/BdDataAccess.inc');
+require_once (dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vmlib/phpUtil.inc');
+require_once (dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vmlib/files/Files_manager.class.inc');
 require_once 'vmlib/logUtil.inc';
 
 require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vmlib/Vm.class.inc';
@@ -51,6 +52,8 @@ class Querys extends Vmap {
         $this->aProperties = $properties;
         $this->aValues['getGroup'] = false;
         $this->oConnection = new Connection($this->aValues, $this->aProperties);
+
+        error_log('$_FILES: '. print_r($_FILES, true));
     }
 
     /**
@@ -841,7 +844,15 @@ class Querys extends Vmap {
 
                         foreach ($aLigne['bo_' . $type] as $key => $value) {
                             if (is_dir($sDataDir . "/" . $key)) {
-                                $aLigne['bo_' . $type][$key] = $sDataUrl . "/" . $key . "/" . $value . "?d=" . $date->getTimestamp();
+                                $aFiles = explode('|', $value);
+                                if (count($aFiles) > 1) {
+                                    $aLigne['bo_' . $type][$key] = [];
+                                    for ($i=0; $i < count($aFiles); $i++) {
+                                        array_push($aLigne['bo_' . $type][$key], $sDataUrl . "/" . $key . "/" . $aFiles[$i] . "?d=" . $date->getTimestamp());
+                                    }
+                                } else {
+                                    $aLigne['bo_' . $type][$key] = $sDataUrl . "/" . $key . "/" . $value . "?d=" . $date->getTimestamp();
+                                }
                             }
                         }
                     }
@@ -1429,32 +1440,18 @@ class Querys extends Vmap {
 
         $this->aValues['my_vitis_id'] = $this->aValues[$bo_id_field];
 
-        // Définit si il a des fichiers a uploader
-        $bUploadFiles = false;
-        foreach ($this->aValues as $key => $value) {
-            if (strrpos($key, '_file')) {
-                $sName = substr($key, 0, strrpos($key, '_file'));
-                if (isset($this->aValues[$sName . '_name'])) {
-                    $bUploadFiles = true;
-                }
-            }
-        }
-
         // Fichiers à uploader ?
-        if ($bUploadFiles) {
-            // Création du dossier contenneur si il n'existe pas
-            $sDirPath = $this->createElementFilesFolder($sBusinessObjectId, $this->aValues['my_vitis_id']);
-            if (!is_dir($sDirPath)) {
-                $oError = new VitisError(1, "Unable to acces to the business object direrctory :" . $sDirPath);
-                $aXmlRacineAttribute['status'] = 0;
-                $sMessage = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
-                return $sMessage;
+        if (!empty($_FILES) && !empty($this->aValues['my_vitis_id'])) {
+
+            // Écriture du fichier
+            $oFileManager = new Files_manager($this->aProperties);
+            foreach ($_FILES as $sName => $aFile) {
+                $aUploadReturn = $oFileManager->uploadInWsDataDir('vitis', $sBusinessObjectId, $this->aValues['my_vitis_id'], $sName, 'documents');
+                $this->aValues[$sName] = $aUploadReturn['field_value'];
             }
-            // Mise en place des fichiers
-            $this->aValues = $this->extractFilesFromValues($this->aValues, $sDirPath);
-        }
 
-        $aReturn = $this->genericPut($bo_schema, $bo_table, $bo_id_field);
+            $aReturn = $this->genericPut($bo_schema, $bo_table, $bo_id_field);
+        }
 
         // Lance l'évènement webSocket
         if (!empty($bo_event)) {
@@ -1467,37 +1464,51 @@ class Querys extends Vmap {
         return $aReturn['sMessage'];
     }
 
-    /**
-     * Extract the files from aValues and modify the paths
-     * @param array $aValues
-     * @param string $sDirPath
-     * @param string $sFilePrefix
-     * @return array Parsed $aValues
-     */
-    function extractFilesFromValues($aValues, $sDirPath) {
+    function extractFile($aValues, $sName, $oFile, $sDirPath) {
 
-        foreach ($aValues as $key => $value) {
-            if (strrpos($key, '_file')) {
+        if (!empty($sName) && !empty($oFile['name']) && !empty($oFile['file'])) {
 
-                $sName = substr($key, 0, strrpos($key, '_file'));
-                $sFileName = $aValues[$sName . '_name'];
+            // Crée le dossier si besoin
+            $sDirColumnPath = $sDirPath . '/' . $sName;
+            if (!is_dir($sDirColumnPath)) {
+                mkdir($sDirColumnPath, 0777, true);
+            }
 
-                if (!empty($sFileName)) {
+            // Cŕee le fichier sur le serveur
+            $fp = fopen($sDirColumnPath . '/' . $oFile['name'], "w");
+            fwrite($fp, $oFile['file']);
+            fclose($fp);
 
-                    $sDirColumnPath = $sDirPath . '/' . $sName;
-                    if (!is_dir($sDirColumnPath)) {
-                        mkdir($sDirColumnPath, 0777, true);
-                    }
+            // Mise en place pour la base de données
+            if (empty($aValues[$sName])) {
+                $aValues[$sName] = $oFile['name'];
+            } else {
+                $aValues[$sName] .= '|' . $oFile['name'];
+            }
+
+            if (!empty($aValues[$sName . '_file'])) {
+                unset($aValues[$sName . '_file']);
+            }
+            if (!empty($aValues[$sName . '_name'])) {
+                unset($aValues[$sName . '_name']);
+            }
+        }
 
-                    // Cŕee le fichier sur le serveur
-                    $fp = fopen($sDirColumnPath . '/' . $sFileName, "w");
-                    fwrite($fp, $value);
-                    fclose($fp);
+        return $aValues;
+    }
+
+    function extractFiles($aValues, $sDirPath) {
 
-                    // Mise en place pour la base de données
-                    $aValues[$sName] = $aValues[$sName . '_name'];
-                    unset($aValues[$sName . '_file']);
-                    unset($aValues[$sName . '_name']);
+        foreach ($_FILES as $key => $value) {
+
+            if (!empty($value['file'])) {
+                $aValues = $this->extractFile($aValues, $key, $value, $sDirPath);
+            }
+            if (!empty($value[0])) {
+                for ($i=0; $i < count($value); $i++) {
+                    if (!empty($value[$i]['file'])) {
+                        $aValues = $this->extractFile($aValues, $key, $value[$i], $sDirPath);
+                    }
                 }
             }
         }
@@ -1612,27 +1623,13 @@ class Querys extends Vmap {
         // Fichiers à uploader ?
         if (!empty($_FILES) && !empty($this->aValues['my_vitis_id'])) {
 
-            // Création du dossier contenneur
-            $sDirPath = $this->createElementFilesFolder($sBusinessObjectId, $this->aValues['my_vitis_id']);
-            if (!is_dir($sDirPath)) {
-                $oError = new VitisError(1, "Unable to acces to the business object direrctory :" . $sDirPath);
-                $aXmlRacineAttribute['status'] = 0;
-                $sMessage = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
-                return $sMessage;
-            }
             // Écriture du fichier
+            $oFileManager = new Files_manager($this->aProperties);
             foreach ($_FILES as $sName => $aFile) {
-
-                $sDirColumnPath = $sDirPath . '/' . $sName;
-                if (!is_dir($sDirColumnPath)) {
-                    mkdir($sDirColumnPath, 0777, true);
-                }
-
-                $this->aValues[$sName] = $aFile['name'];
-
-                // Écrit le fichier dans son enplacement
-                uploadFile($sName, "", $sDirColumnPath . "/" . $aFile['name'], $aFile['size'] + 1);
+                $aUploadReturn = $oFileManager->uploadInWsDataDir('vitis', $sBusinessObjectId, $this->aValues['my_vitis_id'], $sName, 'documents');
+                $this->aValues[$sName] = $aUploadReturn['field_value'];
             }
+
             $this->genericPut($bo_schema, $bo_table, $bo_id_field);
         }