diff --git a/VERSIONS_HOTLINE/95190 b/VERSIONS_HOTLINE/95190
new file mode 100644
index 0000000000000000000000000000000000000000..cbf5ca4b528b2f2ad21ea7a7e7e4b9bf81f4d4f9
--- /dev/null
+++ b/VERSIONS_HOTLINE/95190
@@ -0,0 +1 @@
+hotline #95190 : Administration : Export CSV des medias
\ No newline at end of file
diff --git a/application/modules/admin/controllers/AlbumController.php b/application/modules/admin/controllers/AlbumController.php
index 4d972393113e1900243bee4479d5374bddb21a40..9dbf72058adabdabc10be8d5aae05d9e67615e5c 100644
--- a/application/modules/admin/controllers/AlbumController.php
+++ b/application/modules/admin/controllers/AlbumController.php
@@ -119,7 +119,8 @@ class Admin_AlbumController extends ZendAfi_Controller_Action {
 
     $form = $this->_formImportEAD();
     $this->view->form_import_ead = $form;
-    $this->view->form_export_ead = $this->_formExportEad();
+    $this->view->form_export_ead = $this->_formExport();
+    $this->view->form_export_csv = $this->_formExport('csv');
 
     if (!$this->_request->isPost())
       return;
@@ -159,12 +160,12 @@ class Admin_AlbumController extends ZendAfi_Controller_Action {
   }
 
 
-  protected function _formExportEAD() {
+  protected function _formExport($type='ead') {
     return $this->view
       ->newForm(['id' => 'export_ead', 'class' => 'form'])
       ->setMethod('post')
       ->setAttrib('enctype', 'multipart/form-data')
-      ->setAction($this->view->url(['action' => 'export-ead']))
+      ->setAction($this->view->url(['action' => 'export-'.$type]))
       ->addElement('select',
                    'cat_id',
                    ['style' => 'max-width:445px;',
@@ -172,12 +173,34 @@ class Admin_AlbumController extends ZendAfi_Controller_Action {
                     'required' => true,
                     'multiOptions' => ['' => $this->_('Choisissez une catégorie')]
                                              + Class_AlbumCategorie::getAllLibelles()])
-      ->addElement('submit', 'submit', ['label' => 'Exporter en EAD']);
+      ->addElement('submit', 'submit', ['label' => 'Exporter en ' . strtoupper($type)]);
+  }
+
+
+  public function exportCsvAction() {
+    $description = (new Class_TableDescription('ressources'))
+      ->addColumn($this->_('Categorie'), 'album_category_absolute_path')
+      ->addColumn($this->_('Titre Album'), 'titre_album')
+      ->addColumn($this->_('Description Album'), 'description_album')
+      ->addColumn($this->_('Date'), 'annee')
+      ->addColumn($this->_('Créateur'), 'auteur')
+      ->addColumn($this->_('Editeur'), 'editeur')
+      ->addColumn($this->_('Titre'), 'titre')
+      ->addColumn($this->_('Description'), 'description')
+      ->addColumn($this->_('Ressource'), 'play_ressource_url');
+    $categories = [Class_AlbumCategorie::find($this->_getParam('cat_id',1))];
+
+    $datas = [];
+    foreach(Class_AlbumCategorie::getAlbumsFromCategories([$this->_getParam('cat_id',1)]) as $album)
+      $datas = array_merge($album->getRessources(),$datas);
+    return $this->_helper->csv('export.csv',
+                               $this->view->renderCsv($description, $datas));
+
   }
 
 
   public function exportEadAction() {
-    $form = $this->_formExportEAD();
+    $form = $this->_formExport();
     if ($form->isValid($this->_request->getPost())) {
       $this->getHelper('ViewRenderer')->setNoRender();
       $response = $this->_response;
diff --git a/application/modules/admin/views/scripts/album/import-ead.phtml b/application/modules/admin/views/scripts/album/import-ead.phtml
index cdc4995e225ee44e3917f7099031f4fdfd589197..7985bb47262e4f52597171ccfea3d5973f1f4afe 100644
--- a/application/modules/admin/views/scripts/album/import-ead.phtml
+++ b/application/modules/admin/views/scripts/album/import-ead.phtml
@@ -3,4 +3,5 @@ echo $this->tag('h2', $this->_('Import'));
 echo $this->renderForm($this->form_import_ead);
 echo $this->tag('h2', $this->_('Export'));
 echo $this->renderForm($this->form_export_ead);
+echo $this->renderForm($this->form_export_csv);
 ?>
diff --git a/library/Class/AlbumRessource.php b/library/Class/AlbumRessource.php
index 9912bf5c92cd594f381af9bc2b1c5a405f221e4f..58fe6b96890be587a1c7ae8c27551a6db0d4f04a 100644
--- a/library/Class/AlbumRessource.php
+++ b/library/Class/AlbumRessource.php
@@ -138,6 +138,14 @@ class Class_AlbumRessource extends Storm_Model_Abstract {
   }
 
 
+  /**
+   * @return String
+   */
+  public function getDescriptionAlbum() {
+    return $this->getAlbum()->getDescription();
+  }
+
+
   /**
    * @return string
    */
@@ -146,6 +154,14 @@ class Class_AlbumRessource extends Storm_Model_Abstract {
   }
 
 
+  /**
+   * @return string
+   */
+  public function getAlbumCategoryAbsolutePath() {
+    return $this->getAlbum()->getCategorie()->getAbsolutePath();
+  }
+
+
   /**
    * @return String
    */
diff --git a/library/ZendAfi/View/Helper/RenderCsv.php b/library/ZendAfi/View/Helper/RenderCsv.php
index 35bbeb21b5ac20ee6e16208f4a7c0086c755322f..3069bbc315660c3bd6ae7aad3560cc837757eaf7 100644
--- a/library/ZendAfi/View/Helper/RenderCsv.php
+++ b/library/ZendAfi/View/Helper/RenderCsv.php
@@ -73,7 +73,7 @@ class ZendAfi_View_Helper_RenderCsv extends ZendAfi_View_Helper_BaseHelper {
       ->_description
       ->columnsCollect(function($column) use ($model)
                        {
-                         return $column->renderModelOn($model, $this);
+                         return  $column->renderModelOn($model,$this);
                        });
     return $this->_values;
   }
@@ -91,4 +91,4 @@ class ZendAfi_View_Helper_RenderCsv extends ZendAfi_View_Helper_BaseHelper {
 
   public function renderModelAction($model, $description) { }
 }
-?>
\ No newline at end of file
+?>
diff --git a/scripts/export_csv_category.php b/scripts/export_csv_category.php
new file mode 100755
index 0000000000000000000000000000000000000000..bf988c1d4bdfc8056509822a2abe4bedebe9ce81
--- /dev/null
+++ b/scripts/export_csv_category.php
@@ -0,0 +1,45 @@
+<?php
+error_reporting(E_ERROR | E_PARSE);
+require(__DIR__.'/../console.php');
+
+class Scripts_ExportCsvCategory extends ZendAfi_Controller_Action{
+
+  public function __construct($cat_id, $filename){
+  $usage = "usage : php export_category_csv.php catid filename.csv
+
+   catid = id category à utiliser  pour l'export
+
+   filename = nom du fichier à générer
+";
+
+if (!isset($cat_id) || !($categories = Class_AlbumCategorie::find($cat_id))){
+  print $usage;
+}
+
+
+$description = (new Class_TableDescription('ressources'))
+      ->addColumn($this->_('Categorie'), 'album_category_absolute_path')
+      ->addColumn($this->_('Titre Album'), 'titre_album')
+      ->addColumn($this->_('Description Album'), 'description_album')
+      ->addColumn($this->_('Date'), 'annee')
+      ->addColumn($this->_('Créateur'), 'auteur')
+      ->addColumn($this->_('Editeur'), 'editeur')
+      ->addColumn($this->_('Titre'), 'titre')
+      ->addColumn($this->_('Description'), 'description')
+      ->addColumn($this->_('Ressource'), 'play_ressource_url');
+
+$datas = [];
+foreach(Class_AlbumCategorie::getAlbumsFromCategories([$cat_id]) as $album)
+  $datas = array_merge( $album->getRessources(),$datas);
+
+
+$handle = fopen($filename?$filename:'export.csv','w');
+
+$zf_render_csv = new ZendAfi_View_Helper_RenderCsv();
+fwrite($handle, $zf_render_csv->renderCsv($description, $datas));
+fclose($handle);
+
+}
+}
+new Scripts_ExportCsvCategory($argv[1], $argv[2]);
+?>
diff --git a/tests/application/modules/admin/controllers/AlbumControllerTest.php b/tests/application/modules/admin/controllers/AlbumControllerTest.php
index 385cc9044c1f45376b881bcd583b81a90fc06622..79ff16ab2cf39ff3e87aa469ad6068cf5b05a7f5 100644
--- a/tests/application/modules/admin/controllers/AlbumControllerTest.php
+++ b/tests/application/modules/admin/controllers/AlbumControllerTest.php
@@ -2956,6 +2956,78 @@ abstract class ControllerAlbumMultiMediasTestCase extends Admin_AlbumControllerT
 
 
 
+class AlbumControllerMultiMediasExportCSV extends ControllerAlbumMultiMediasTestCase {
+  protected $_csv = [];
+
+  public function setUp() {
+    parent::setUp();
+
+    $this->fixture('Class_AlbumCategorie',
+                   ['id' => '34',
+                    'libelle' => 'Jeunesse']);
+
+    Class_AlbumCategorie::find(33)
+         ->setParentCategorie(Class_AlbumCategorie::find(34))
+         ->save();
+
+    Class_Album::find('999')
+      ->AddEditor('Dargaud')
+      ->setAnnee('2019');
+
+    $this->postDispatch('/admin/album/export-csv',
+                        ['cat_id' => 34],
+                        true);
+    $this->_csv = array_map(function($line) { return str_getcsv($line, ";", '"'); },
+                            explode("\n", rtrim($this->_response->getBody())));
+  }
+
+
+  /** @test */
+  public function responseBodyShouldBeAttachment() {
+    $this->assertHeaderContains('Content-Disposition', 'attachment');
+  }
+
+
+  /** @test */
+  public function csvShouldCountFiveLines() {
+    $this->assertCount(5, $this->_csv);
+  }
+
+
+  /** @test */
+  public function firstRowShouldContainsAllHeaders() {
+    // cannot assertEquals entire row due to array sort diff between php5 and php7
+    foreach(['Categorie', "Titre Album", "Description Album", 'Date', 'Créateur', 'Editeur', 'Titre', 'Description', 'Ressource']
+            as $header)
+      $this->assertContains($header, $this->_csv[0]);
+  }
+
+
+  /** @test
+  */
+  public function secondRowShouldContainsValuesForAlbum() {
+    // cannot assertEquals entire row due to array sort diff between php5 and php7
+    foreach(['Jeunesse > Comics', 'Plein de medias', '<p>pour passer la soirée</p>', '2019','Titi','Dargaud']
+            as $value)
+      $this->assertContains($value, $this->_csv[1]);
+  }
+
+
+  /** @test
+  */
+  public function thirdRowShouldContainsValuesForBatmanDarkKnightRessource() {
+    foreach(['Batman Dark Knight', 'Une nouvelle aventure du justicier noir' ]
+            as $value)
+      $this->assertContains($value, $this->_csv[2]);
+
+    $this->assertEquals(1, substr_count($this->_csv[2][8],
+                                        '/bib-numerique/play-ressource/id'));
+  }
+}
+
+
+
+
 class AlbumControllerMultiMediasExportEAD extends ControllerAlbumMultiMediasTestCase {
   public function setUp() {
     parent::setUp();