diff --git a/app/Archive.py b/app/Archive.py
index 7e0d42b3e2626a7d02969af3bc2afe5aaaeb8ed5..76f271e026eb4282fd5a65698eb9535c55210a4e 100644
--- a/app/Archive.py
+++ b/app/Archive.py
@@ -21,9 +21,6 @@ import app.Constantes as Constantes
 id_tuile   = re.compile("T[0-9]+[A-Z]+")
 date_tuile = re.compile("[SENTINEL.+?_]([0-9]*?)-")
 
-def str2bool(v):
-    return v.lower() in (["false"])
-
 class Archive():
     """
         Classe pour lister, télécharger les archives via site Theia selon un shapefile représentant la zone d'étude.
@@ -161,93 +158,79 @@ class Archive():
         return "{},{},{},{}".format(extent_[2], extent_[0], extent_[3], extent_[1])
 
     def listing_by_tile(self):
-        
-        for tuile in self.liste_tuiles :
-
-            self.requete['location'] = tuile
-
-            print(urlencode(self.requete))
-
-    def listing(self):
-        """
-            Méthode pour lister les images disponibles sur la plateforme 'Theia Land' correspondant à la zone.
-        """
 
         nbImage = 0
 
-        if hasattr(self, 'liste_tuiles'):
-           self.listing_by_tile()
-
-        # print(urlencode(self.requete))
-        # print(self.coord_box_dd())
-        self.requete['box'] = self.coord_box_dd()
-
-        # sys.exit(1)
-        self.liste_annees = ["2019"]
-        self.niveau = 'LEVEL2A'
-        # Boucle sur les annees
-        # self.logger.info("Images availables")
-        for annee in self.liste_annees:
-
-            self.logger.info("=============== {0} ===============".format(annee))
-
-            if self.emprise :
-                # self.url =  "{0}/{1}/api/collections/{2}/search.json?lang=fr&processingLevel={3}&_pretty=true&q={4}&box={5}&maxRecord=500".format(self.serveur, self.resto, self.capteur, self.niveau, annee, self.coord_box_dd())
-                self.url =  "{0}/{1}/api/collections/{2}/search.json?{3}".format(self.serveur, self.resto, self.capteur, urlencode(self.requete))
-            else :
-                self.url = "{0}/{1}/api/collections/{2}/search.json?lang=fr&processingLevel={3}&_pretty=true&q={4}&location={5}&maxRecord=500".format(self.serveur, self.resto, self.capteur, self.niveau, annee, self.liste_tuiles[0])
-
-            # S'il existe une autre image, suivante = vrai, faux sinon
-            suivante = True
+        for tuile in self.liste_tuiles :
 
-            print(self.url)
+            self.requete['location'] = tuile
 
-            # Tant qu'il existe une image à traiter
-            while suivante:
+            self.url =  "{0}/{1}/api/collections/{2}/search.json?{3}".format(self.serveur, self.resto, self.capteur, urlencode(self.requete))
 
-                try :
-                    request_headers = {"User-Agent": "Magic-browser"}
-                    req = urllib.request.Request(self.url, headers = request_headers) # Connexion à la base de données
-                    data = urllib.request.urlopen(req).read() # Lecture de la base de données
+            self.get_liste_images()
 
-                    new_data = re.sub(b"null", b"'null'", data) # Suppression de l'expression "null" pouvant causer une erreur Python
-                    new_data = re.sub(b"false", b"False", new_data) # Renomme le booléen selon la syntaxe Python
+    def listing_by_coord(self):
 
-                    # Conversion des données sous la forme d'un dictionnaire
-                    data_Dict = defaultdict(list)
-                    data_Dict = UserDict(eval(new_data))
+        self.requete['box'] = self.coord_box_dd()
 
-                    # Selection des archives à télécharger
-                    for d in range(len(data_Dict['features'])):
-                        name_archive = data_Dict['features'][d]['properties']['productIdentifier']
-                        feature_id = data_Dict["features"][d]['id']
-                        link_archive = data_Dict['features'][d]['properties']['services']['download']['url'].replace("\\", "")
-                        url_archive = link_archive.replace(self.resto, "rocket/#")
-                        archive_download = url_archive.replace("/download", "") # Url de l'archive à télécharger
-                        out_archive = "{0}/{1}.zip".format(self.dossier_sortie, name_archive) # Nom de sortie de l'archive
+        self.url =  "{0}/{1}/api/collections/{2}/search.json?{3}".format(self.serveur, self.resto, self.capteur, urlencode(self.requete))
 
-                        if "SENTINEL2X" not in out_archive or self.niveau == "LEVEL3A":
-                            self.liste_archive.append([archive_download, out_archive, feature_id])
+        self.get_liste_images()
 
-                    # Vérification si d'autres images sont disponibles
-                    for link in data_Dict['properties']['links'] :
-                        if link["title"] is 'suivant' :
-                            self.url = link['href'].replace("\\", "")
-                            suivante = True
-                            break
-                        else :
-                            suivante = False
+    def get_liste_images(self):
+        
+        # S'il existe une autre image, suivante = vrai, faux sinon
+        suivante = True
+
+        # Tant qu'il existe une image à traiter
+        while suivante:
+
+            try :
+                request_headers = {"User-Agent": "Magic-browser"}
+                req = urllib.request.Request(self.url, headers = request_headers) # Connexion à la base de données
+                data = urllib.request.urlopen(req).read() # Lecture de la base de données
+
+                new_data = re.sub(b"null", b"'null'", data) # Suppression de l'expression "null" pouvant causer une erreur Python
+                new_data = re.sub(b"false", b"False", new_data) # Renomme le booléen selon la syntaxe Python
+
+                # Conversion des données sous la forme d'un dictionnaire
+                data_Dict = defaultdict(list)
+                data_Dict = UserDict(eval(new_data))
+
+                # Selection des archives à télécharger
+                for d in range(len(data_Dict['features'])):
+                    name_archive = data_Dict['features'][d]['properties']['productIdentifier']
+                    feature_id = data_Dict["features"][d]['id']
+                    link_archive = data_Dict['features'][d]['properties']['services']['download']['url'].replace("\\", "")
+                    url_archive = link_archive.replace(self.resto, "rocket/#")
+                    archive_download = url_archive.replace("/download", "") # Url de l'archive à télécharger
+                    out_archive = "{0}/{1}.zip".format(self.dossier_sortie, name_archive) # Nom de sortie de l'archive
+
+                    if "SENTINEL2X" not in out_archive or self.requete["processingLevel"] == "LEVEL3A":
+                        self.liste_archive.append([archive_download, out_archive, feature_id])
+
+                # Vérification si d'autres images sont disponibles
+                for link in data_Dict['properties']['links'] :
+                    if link["title"] is 'suivant' :
+                        self.url = link['href'].replace("\\", "")
+                        suivante = True
+                        break
+                    else :
+                        suivante = False
 
-                except Exception as e:
-                    self.logger.error("Error connexion or error variable : {0}".format(e))
-                    sys.exit(1)
+            except Exception as e:
+                self.logger.error("Error connexion or error variable : {0}".format(e))
+                sys.exit(1)
 
-            # Si aucune image n'est disponible pour une année, le dossier correspondant n'est pas créé
-            if nbImage != len(self.liste_archive) :
-                if not os.path.exists("{}/{}/Images".format(self.dossier_sortie, annee)) :
-                    os.makedirs("{}/{}/Images".format(self.dossier_sortie, annee))
+    def listing(self):
+        """
+            Méthode pour lister les images disponibles sur la plateforme 'Theia Land' correspondant à la zone.
+        """
 
-            nbImage = len(self.liste_archive)
+        if hasattr(self, 'liste_tuiles'):
+            self.listing_by_tile()
+        else :
+            self.listing_by_coord()           
 
         self.logger.info("{0} image(s) correspondent aux critères.".format(len(self.liste_archive)))
 
@@ -314,7 +297,7 @@ class Archive():
             nom_image = l[1].split("/")[-1][:-4]
 
             # Lecture du fichier de sauvegarde
-            sauvegarde.read("{}/{}/sauvegarde.ini".format(self.dossier_sortie, date[:4]))
+            sauvegarde.read("{}/sauvegarde.ini".format(self.dossier_sortie))
 
             # Si la date existe dans le fichier de sauvegarde ...
             if str(date) in sauvegarde.keys() :
@@ -323,7 +306,6 @@ class Archive():
                 if nom_image not in sauvegarde[str(date)].keys() :
 
                     sauvegarde[str(date)][nom_image] = "False"
-                    sauvegarde[str(date)]["NDVI"] = "False"
 
                     if date in dico_date.keys() :
                         dico_date[date].append(l)
@@ -333,8 +315,6 @@ class Archive():
                 # ... et que l'image exite mais n'a pas été traité, on la rajoute dans la liste des images à traiter.
                 elif sauvegarde[str(date)][nom_image] == "False" :
 
-                    sauvegarde[str(date)]["NDVI"] = "False"
-
                     if date in dico_date.keys() :
                         dico_date[date].append(l)
                     else :
@@ -351,7 +331,7 @@ class Archive():
                     dico_date[date] = [l]
 
             # Sauvegarde du fichier de sauvegarde mis à jour.
-            with open("{}/{}/sauvegarde.ini".format(self.dossier_sortie, date[:4]), 'w') as configfile:
+            with open("{}/sauvegarde.ini".format(self.dossier_sortie), 'w') as configfile:
                 sauvegarde.write(configfile)
 
         # Pour toutes les dates à traiter
@@ -371,15 +351,14 @@ class Archive():
                 reponse = requests.get(url, headers=head, proxies=proxyDict)
 
                 if self.extraction :
-                    # Ajout de l'archive à la liste
+                     # Ajout de l'archive à la liste
                     liste_content.append(reponse.content)
                     del reponse
                 else :
                     if self.groupe == "Tuile" :
-                        dossier_archive = "{0}/{1}/Archive".format(self.dossier_sortie, id_tuile.search(img[1]).group(0))
+                        dossier_archive = "{0}/{1}".format(self.dossier_sortie, id_tuile.search(img[1]).group(0))
                     else:
-                        dossier_archive = "{0}/{1}/Archive".format(self.dossier_sortie, cle[:4])
-
+                        dossier_archive = "{0}/Archive/{1}".format(self.dossier_sortie, cle[:4])
 
                     if not os.path.exists(dossier_archive):
                         os.makedirs(dossier_archive)
@@ -393,9 +372,10 @@ class Archive():
                 self.traitement_images(cle, liste_content)
                 del liste_content
 
+
             # Mis à jour du fichier de sauvegarde
             # Lecture du fichier de sauvegarde
-            sauvegarde.read("{}/{}/sauvegarde.ini".format(self.dossier_sortie, cle[:4]))
+            sauvegarde.read("{}/sauvegarde.ini".format(self.dossier_sortie))
 
             # Pour toutes les images traitées à cette date
             for img in dico_date[cle] :
@@ -403,7 +383,7 @@ class Archive():
                 sauvegarde[str(cle)][img[1].split("/")[-1][:-4]] = "True"
 
             # Sauvegarde du fichier de sauvegarde mis à jour.
-            with open("{}/{}/sauvegarde.ini".format(self.dossier_sortie, cle[:4]), 'w') as configfile:
+            with open("{}/sauvegarde.ini".format(self.dossier_sortie), 'w') as configfile:
                 sauvegarde.write(configfile)
 
         self.logger.info("All images have been downloaded !")
@@ -501,7 +481,7 @@ class Archive():
 
         """
 
-        self.logger.info("Date : {0} -> {1} image(s)".format(date, len(liste_content)))
+        self.logger.info("Date : {0} ".format(date))
 
         tuiles_image = []
         tuiles_nuage = []
@@ -513,7 +493,7 @@ class Archive():
 
         # Pour chaque archive
         for idx, content in enumerate(liste_content) :
-           
+
             # Lecture de l'archive
             tzip = zipfile.ZipFile(io.BytesIO(content))
 
@@ -533,9 +513,8 @@ class Archive():
                 mmap_name = "/vsimem/"+uuid4().hex
                 liste_mem.append(mmap_name)
                 gdal.FileFromMemBuffer(mmap_name, tzip.read(img))
-                print(mmap_name)
-                sys.exit(1)
-                liste_bandes.append(gdal.Open(mmap_name))
+                # liste_bandes.append(gdal.Open(mmap_name))
+                liste_bandes.append(mmap_name)
 
             # On fusionne les différentes bandes en une seule image
             # on découpe l'image selon l'emprise
@@ -562,7 +541,7 @@ class Archive():
 
                     gdal.FileFromMemBuffer(mmap_name, tzip.read(image_nuage))
                     liste_mem.append(mmap_name)
-                    tuiles_nuage.append(Outils.clip(gdal.Open(mmap_name), self.zone_etude))
+                    tuiles_nuage.append(Outils.clip(mmap_name, self.zone_etude))
 
             for mmap_name in liste_mem :
                 gdal.Unlink(mmap_name)
@@ -572,7 +551,7 @@ class Archive():
             liste_bandes = None
 
             del tzip
-            liste_content[idx] = None
+            del liste_content[idx]
 
         del liste_content
 
@@ -582,7 +561,10 @@ class Archive():
 
                 self.logger.info("Sauvegarde des images")
 
-                dossier = "{0}/{1}/Images".format(self.dossier_sortie, date[:4])
+                dossier = "{0}/Images/{1}".format(self.dossier_sortie, date[:4])
+
+                if not os.path.exists(dossier):
+                    os.makedirs(dossier)
 
                 self.logger.debug("Dossier image : {0}".format(dossier))
 
diff --git a/app/Outils.py b/app/Outils.py
index 3923982741d22de5cf3f8283e28f7a3c3f56c00d..fc2bf3dcd46a5b30fcd0d2ef5b49bf2b6c9f49ec 100644
--- a/app/Outils.py
+++ b/app/Outils.py
@@ -125,6 +125,8 @@ def clip(image, cut, form="Mem", dst="", type_sortie=gdal.GDT_Float32, nodata="N
 
 	return gdal.Warp(dst, image, options=option_clip)
 
+def str2bool(v):
+    return v.lower() in (["false"])
 
 def checkDate(date):