Lire un fichier Microsoft Excel (.xls) avec PHP

Logo de la librairie PHPExcelCe tutoriel ce veut simplisme. On va juste voir comment lire un fichier Excel afin de le représenter au format HTML.

Pour cela on va utiliser la librairie PHPExcel de CodePlex.
Contrairement au tutoriel précédent, cette librairie est maintenue et ne pose pas de problème d’encodage.
La librairie est bien documentée et un grand nombre d’exemples sont fournis et elle est utilisée dans PhpMyAdmin.

require_once '.Classes/PHPExcel/IOFactory.php';

// Chargement du fichier Excel
$objPHPExcel = PHPExcel_IOFactory::load("unFichierExcel.xls");

/**
* récupération de la première feuille du fichier Excel
* @var PHPExcel_Worksheet $sheet
*/
$sheet = $objPHPExcel->getSheet(0);

echo '<table border="1">';

// On boucle sur les lignes
foreach($sheet->getRowIterator() as $row) {

   echo '<tr>';

   // On boucle sur les cellule de la ligne
   foreach ($row->getCellIterator() as $cell) {
      echo '<td>';
      print_r($cell->getValue());
      echo '</td>';
   }

   echo '</tr>';
}
echo '</table>';

Voila. C’est tout. Rien de compliqué.

Par contre si vous voulez aller plus loin, la librairie regorge de fonctionnalités pour la lecture et l’écriture de fichier. Et elle ne se contente pas du format xls elle prend aussi en charge le xlsx d’Excel 2007.

Tagués avec : , ,

66 Comments on “Lire un fichier Microsoft Excel (.xls) avec PHP

      • Bonjour
        Merci à vous .
        Je souhaite savoir si existe une possibilité d’afficher à la fois le contenu de deux différents fichiers excel?
        J’ai un projet de fin d’étude et je suis confronté à ce problème .
        Je dois récupérer le contenu de deux différents fichiers .xls, les affichées dans dans le même interface HTML avec le php.
        je dois utiliser les valeurs venant des deux fichiers pour effectuer des calculs .
        J’ai besoins de votre aide .
        Merci à l’avance

        • C’est assez simple, il suit d’instancier deux fois le lecteur :
          $objPHPExcel1 = PHPExcel_IOFactory::load(« unFichierExcel_1.xls »);
          $objPHPExcel2 = PHPExcel_IOFactory::load(« unFichierExcel_2.xls »);

          • Merci pour votre astuce, ça m’a un peu dépanné pour injecter des fichiers excel dans un script PHP censé convertir ces derniers en PDF.

  1. Bonsoir,
    bein je ne sais comment te remercier! car je me suis taper la doc et je n’ai réussie à comprendre comment afficher toute les cellules d’une feuille.
    MErcie encore
    bonne soirée

  2. Bonjour,
    J’utilise PHPExcel depuis peu. Je dois valider la structure de fichiers Excel déposés par les utilisateurs, et je dois notamment vérifier la présence de propriétés personnalisées (custom properties), mais ça ne fonctionne pas (j’ai toujours vide en retour) et de plusieurs zones de texte (shapes je crois en VBA), mais j’ai l’impression que ce n’est pas géré par cette bibliothèque.
    Pourrais-tu m’éclairer s’il te plaît ?
    Merci d’avance.

    • Je ne suis pas allé aussi loin dans l’utilisation de cette librairie. Mieux vaut que tu regarde directement sur le site de l’éditeur.

  3. Bonjour;
    Merci une fois de plus pour le code, j’ai le même problème que « Zinab », j’aimerai recuperer les données depuis une colonne précise, ou de plusieurs cellules précises.
    Merci de vos reponses

  4. Bonjour !
    J ai un probleme avec ce listing, (je precise que je redebute le php apres un arret de plusieurs années)
    lors de l execution je me retrouve avec ce message :

    Fatal error: Class ‘�PHPExcel_IOFactory’ not found in C:Program Files (x86)EasyPHP-5.3.9wwwExcelToTable.php on line 4

    j ai d abord cru a un probleme d inclusion, puis j ai rajouté un echo idiot au debut de IOFactory.php, le message apparait alors bien avant l erreur fatal donc le fichier est bien inclus…

    Si quelqu un a une idée, je suis preneur.

    • Bonjour,
      Je ne suis pas nouveau en PHP, mais je découvre cette semaine cette bibliothèque. Et je tombe sur le même problème « Class ‘ PHPExcel_IOFactory’ not found in … ».
      J’ai un peu galéré jusqu’à m’apercevoir que le message parlait de la classe ‘ PHPExcelIOFactory’ (avec une espace devant). J’ai examiné ce message avec un éditeur hexadécimal, l’espace correspond aux octets 0xC2 0xA0.
      Dans mon instruction qui était
      $objPHPExcel = PHPExcel_IOFactory::load(« ./test.xls »);
      j’ai supprimé les espaces avant et après le signe ‘=’
      $objPHPExcel=PHPExcel_IOFactory::load(« ./test.xls »);
      … plus de message d’erreur
      j’ai remis les espaces, toujours plus de message d’erreur.
      Je ne comprends pas ce qui a pu se passer, mais si cette « amulette » peut servir à quelqu’un, j’en serai ravi. (et je sais qu’il y en a, vu mes recherches…)
      Et un grand merci à mon-beulogue.

  5. Bonjour,
    Merci pour le code, ça m’a évité pas mal de recherches. S’il y a des cellules vides et qu’on veut les récupérer j’ai mis ça à la place du premier foreach :

    // On boucle sur les lignes
    foreach($sheet->getRowIterator() as $row) {
     $cellIterator = $row->getCellIterator();
     $cellIterator->setIterateOnlyExistingCells(false);
       echo '';
     
       // On boucle sur les cellule de la ligne
       foreach ($cellIterator as $cell) {
          echo '<pre>';
          print_r($cell->getValue());
          echo '</pre>';
       }
     
       echo '';
    }
    
    • Imaginons que j’ai un tableau de A à F, va t-il lire les cellules après de G à IV?
      Si oui comment récupérer le nombre de cellules non vides dans la premières ligne contenant les entêtes de colonnes de mon tableau?

      • La librairie ne lie que les cellules non nulle.
        Donc si dans excel ton tableau s’arrête à C la librairie retournera nulle à la lecture de la cellule E2.

        • Le tableau est défini de la dernière ligne et à la dernière colonne avec une valeur de cellule.
          C’est à dire que si j’ai une valeur en A1 et une valeur en F8 et avec le parametre setIterateOnlyExistingCells(false), tu vas faire de ma ligne à 1 à 8 et de la cellule A à F soit 6 (colonnes) * 8 (lignes) valeurs.

    • @Olivier: Je ne comprends pas ton post sur les « echo » mal passés, j’essayé ton script et j’ai une erreur:
      Fatal error: Call to undefined method PHPExcel_Worksheet_CellIterator::getCellIterator() in ……

      Une idée ?

      Merci,

      • C’est bon, j’ai trouvé mon 1er foreach était

        foreach ($cellIterator->getCellIterator() as $cell))

        alors qu’il faut

        foreach ($cellIterator as $cell))

        Merci,

  6. merci beaucoup pour le code.
    mais j’ai une petite préoccupation.
    je voudrai rechercher une partie de mot contenu dans une cellule
    comment le faire?

  7. Bonjour,
    Merci pour ce code.
    Je suis en train de traiter un problème sérieux avec votre billet.
    J’aimerai compter le nombres de lignes contenant des données, y a t-il un moyen de le faire?

    Merci d’avance.

  8. Bonjour,
    Merci pour ce bout de code, mais j’ai un soucis quand j »essai ce code jai une erreur :
    Fatal error: Call to a member function getBlipType() on a non-object in Classes/PHPExcel/Reader/Excel5.php on line 995

    jai le bon chemin des classes et le bon fichier excel, je ne comprend pas, est que vous avez une idée de se qui pourrai clocher???

  9. Bonjour, je souhaiterais pouvoir parcourir un fichier excel, afin de récupérer le contenu des cellules pour ensuite les insérer dans une base de donnée directement depuis une page PHP. est ce possible ?

  10. Bonjour,

    parfois j’ai une erreur de type:
    PHPExcel_Worksheet->getCell(‘2’) #2 {main} thrown in /htdocs/public/www/Classes_librairie_excel/PHPExcel/Cell.php on line 539

    Je me demande si possible de traiter cette exception afin de générer un message personalisé.

    Merci.

    • Oui tu peux gérer ce genre de problème.
      Un try cath devrais suffire.

      try {
          PHPExcel_Worksheet->getCell('2');
      }catch(Exceltion $e){
          die($e->getMessage());
      }
      
  11. Salut,

    Merci de ton aide.
    J’ai un souci d’encodage, les valeurs affichées change les accents en lettres avec des accents

    cdt

  12. Salut,
    J’ai un souci avec le chargement d’un fichier. j’upload des fichiers Excel pour les traiter. J’arrive à ouvri tout les fichiers avec la ligne : $objPHPExcel = PHPExcel_IOFactory::load($fichier);
    sauf, un qui a pourtant le bon nom de fichier le bon chemin, mais il arrête l’exécution de la page.
    Si je fait un echo après il ne s’affiche pas.
    Une idée du probleme ? Il n’affiche aucune erreur,…

    • Cherche dans le php.ini (fichier de config de php) pour qu’il t’affiche les erreurs.
      De tête :
      display_errors = On
      html_errors = On

  13. Bonjour,
    Je travaille actuellement sur une application php et je dois récupérer les informations sur un fichier excel afin d’alimenter ma base de donnée. Le code ci-dessous marche bien à une condition qu’il ne faut pas y avoir d’accent. En effet si la cellule possède un accent, le getValue est nul, il ne renvoie absolument rien juste à cause d’un accent dans la cellule. J’ai déjà essayer iconv, utf8_encode mais sans succès. Avez vous des idées pour remédier à mon problème ?
    Je vous laisse mon code ci-dessous

    require_once("lib/Classes/PHPExcel/IOFactory.php");
    ini_set('max_execution_time',3600);

    //Chargement du fichier Excel
    $objPHPExcel = PHPExcel_IOFactory::load($_FILES['excel']['tmp_name']);

    //Récupération de la première feuille du fichier Excel
    $sheet = $objPHPExcel->getSheet(0);

    //Variable n° ligne
    $i=0;

    // On boucle sur les lignes
    foreach($sheet->getRowIterator() as $row) {
    if($i>12){

    // On boucle sur les cellules de la ligne
    $tab = array();
    foreach ($row->getCellIterator() as $cell) {
    array_push($tab,$cell->getValue());
    }
    $text = $tab[0];
    }

  14. Peut on lire un fichier xlsm ? j’ai ceci quand j’essaye :
    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2097152 bytes) in C:wampwwwintranetPHPExcel_1.7.9_docClassesPHPExcelCachedObjectStorageMemory.php on line 55

  15. J’ai un fichier Excel que j’ouvre à l’aide de la méthode ci-dessus.
    J’aimerais enregistrer une copie de ce fichier sur le serveur une fois les modifs effectuées.

    Comment faire ?
    Merci d’avance.

  16. Super post MErci.

    Juste une interrogation : Comment faire pour prendre en compte une cellule vide et stocker par exemple dans la variable $cell une chaine vide ?

    Actuellement, si la cellule est vide il n’en tiens pas compte … J’aimerai qu’il en tienne compte :)

    Merci

  17. Bonjour, En faite voila j’ai un soucis,quand jexecute le fichier, avec une class, il me met class « COM » not found, dans lexemple de COM

    Cordialement

  18. Bonjour,

    Comment fait on pour inserer le contenu des cellules dans une requette SQL ?
    Je ne comprends pas, débutant en PHP, j’ai lu la doc avec les exemples, mais je ne parviens pas au résultat souhaité.

    Ci dessous le code :

    
    require_once 'Classes/PHPExcel/IOFactory.php'; // Chargement du fichier Excel
    $objPHPExcel = PHPExcel_IOFactory::load("./upload/PMR.xls"); 
    /*
    $objPHPExcel = PHPExcel_IOFactory::load("./upload/PMR.xls"); 
    
    *
    * récupération de la première feuille du fichier Excel* @var PHPExcel_Worksheet $sheet
    */
    $sheet = $objPHPExcel->getSheet(0); 
    echo '<table border="1">'; 
    // On boucle sur les lignes
    foreach($sheet->getRowIterator(2) as $row) {    
    	echo '<tr>';    
    	// On boucle sur les cellule de la ligne   
    		foreach ($row->getCellIterator() as $cell) {      
    			echo '<td>';   
    			print_r($cell->getValue()); 
    			$sql = "INSERT into insert_pmr(colonn1,colonn2,colonn3,colonn4) values ('$cell[0]->getValue()','$cell[1]->getValue()','$cell[2]->getValue()','$cell[3]->getValue()')"; 
    mysql_query($sql) or die('Erreur SQL !<br/>'.$sql.'<br/>'.mysql_error());
    
    
    
    			
    			echo '</td>';   
    		}    
    	echo '</tr>';
    }
    
    echo '</table>';
    
    

    Bien entendu, l’affichage fonctionne mais pas l’insertion.
    Sachant que « $cell[0]->getValue() » ne renvoie pas la valeur d’une cellule
    Merci de votre aide.

    • Salut, essaye avec quelque chose comme cela :

      $sql = sprintf("INSERT into insert_pmr(colonn1,colonn2,colonn3,colonn4) values ('%s','%s','%s','%s')",
      $cell[0]->getValue(), $cell[1]->getValue(), $cell[2]->getValue(), $cell[3]->getValue());

  19. C’est très génial pour moi cette librairie;
    mais on a un problème de getters sur $cell->getValue();
    à l’origine dans le cellule, j’ai « Home@FEEK »
    mais quand on le récupère, on a le bug suivant
    PHPExcel_RichText Object ( [_richTextElements:PHPExcel_RichText:private] => Array ( [0] => PHPExcel_RichText_Run Object ( [_font:PHPExcel_RichText_Run:private] => PHPExcel_Style_Font Object ( [_name:protected] => Calibri [_size:protected] => 11 [_bold:protected] => [_italic:protected] => [_superScript:protected] => [_subScript:protected] => [_underline:protected] => single [_strikethrough:protected] => [_color:protected] => PHPExcel_Style_Color Object ( [_argb:protected] => FFFF0000 [_parentPropertyName:protected] => [_isSupervisor:protected] => [_parent:protected] => ) [_isSupervisor:protected] => [_parent:protected] => ) [_text:PHPExcel_RichText_TextElement:private] => Home@FEEK ) ) )

  20. Très pratique, je dois convertir de multiples feuilles *.xls en différents tableau à afficher dans des pages html ou php. cependant, je récupère uniquement les formules et non les valeurs. Qu’en pensez – vous ?

  21. En cherchant un peu, j’ai trouvé la solution. Pour ne pas afficher les formules, mais les valeurs de celle ci, il ne faut pas utiliser

    print_r($cell->getValue());

    mais

    print_r($cell->getCalculatedValue());

  22. Bonjour,
    tout d’abord merci pour votre tuto.
    Ca m’a vraiment beaucoup aidé.

    Je n’arrive cependant pas, malgre ma lecture de la doc officielle, à prendre des cellules differentes dans des feuilles (pas fichiers) differentes.
    Sur une feuille j’ai reussi sans souci mais je bloque sur plusieurs.

    Si vous avez une petite idee ou piste ca serait super sympa.

    Merci

    • Pour accéder aux cellules des autres feuilles il faut changer de feuille (oui dis comme ça, ça parait con..)
      $sheet = $objPHPExcel->getSheet(ICI LE NUMÉRO DE TA FEUILLE);

      Je crois que la librairie mais aussi à disposition une méthode du style getSheetByName(«  ») qui te permet de pointer sur tes feuilles par leurs nom.

      En espérant que ce bout de code te vienne en aide.

  23. Bonjour,

    Tout d’abord merci de ton travail, il est toujours aussi agréable de trouver des gens désireux de faire partager leurs connaissances !

    J’essaie actuellement d’afficher un document .xlsx (seulement en lecture) sur une page html classique comprenant du php et je ne comprends pas bien le fonctionnement de la librairie PHPExcel.

    J’ai utilisé le code de ton article, lié à mon fichier excel, et j’obtiens un tableau assez moche représentant les valeurs de mes cases mais sans les convertir. Cad que j’ai des cases ou j’ai : =C6*D6 ou des SUMM(E4:E9), bref les fonctions quoi…
    J’ai consulté pas mal de sites et consulté les docs de la librairie mais je nage un peu…

    Mon but est seulement que la personne consultant la page puisse naviguer sur le fichier excel, entre les différentes feuilles.

    Pourrais-tu me préciser la manière dont je dois procéder?

    Merci d’avance :)

  24. bonjour merci pour le code mais il ne marche pas lorsque je l’execute pourtant c’est bien fichier excel que je passe en paramètre please help me

  25. Bonjour à tous
    Je suis tombée sur ce post mais je me demande si je suis bien au bon endroit !
    Voila, pour mon cas je travaille sur mysql workbench, et j’ai une BDD existante avec 15 tables non vide, je veux importer un fichier Excel(c’est fait j’ai créé une table ayant le même nom que mon fichier en .csv et j’ai importé tout le contenu à l’aide d’un outil sur MySql workbench qui le fait), cependant le problème maintenant c’est que chaque colonne de ma feuille Excel va aller dans un champ d’une table donnée de ma Base.
    J’ai trouvé ce code que je n’arrive pas à bien saisir:

    ————–
    SET AUTOCOMMIT = 0
    ————–

    ————–
    START TRANSACTION
    ————–

    ————–
    DROP DATABASE IF EXISTS `base`
    ————–

    ————–
    CREATE DATABASE IF NOT EXISTS `base`
    DEFAULT CHARACTER SET `latin1`
    DEFAULT COLLATE `latin1_general_ci`
    ————–

    ————–
    DROP TABLE IF EXISTS Cities
    ————–

    ————–
    CREATE TABLE Cities (
    Country CHAR(2),
    City CHAR(22),
    AccentCity CHAR(3),
    Region CHAR(2),
    Population INT UNSIGNED NULL DEFAULT NULL,
    Latitude FLOAT,
    Longitude FLOAT,
    Date DATETIME
    ) ENGINE=InnoDB
    DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
    ROW_FORMAT=COMPRESSED
    ————–

    ————–
    TRUNCATE Cities
    ————–

    ————–
    set unique_checks = 0
    ————–

    ————–
    set foreign_key_checks = 0
    ————–

    ————–
    set sql_log_bin = 0
    ————–

    ————–
    alter table Cities DISABLE KEYS
    ————–

    ————–
    commit
    ————–

    ————–
    LOAD DATA LOCAL INFILE ‘fichier.txt’
    INTO TABLE `Cities`
    CHARACTER SET latin1
    FIELDS TERMINATED BY ‘,’
    ENCLOSED BY ‘ »‘
    ESCAPED BY ‘\\’ LINES
    TERMINATED BY ‘\r\n’
    IGNORE 0 LINES
    (@F1, @F2, @F3, @F4, Population, Latitude, Longitude, @F8)
    set Country = trim(@F1),
    City = trim(@F2),
    AccentCity = trim(@F3),
    Region = trim(@F4),
    Date = outils.chgdate(@F8)
    ————–

    ————–
    commit
    ————–

    ————–
    alter table Cities ENABLE KEYS
    ————–

    ————–
    set unique_checks = 1
    ————–

    ————–
    set foreign_key_checks = 1
    ————–

    ————–
    set sql_log_bin = 1
    ————–

    ————–
    commit
    ————–

    ————–
    select concat(‘>’, Country,  », City,  », AccentCity, », Region,  », Population, », Latitude,  », Longitude,  », date, ‘frdijon bourgogne—bo5000002001502015-12-10 15:20:00frparis ile de france—il2000000100502015-06-15 07:15:00frnice paca—pa100000250752015-07-25 19:58:00frmarseille paca—pa3000750152015-03-12 19:58:00< |
    +———+———————–+————+——–+————+———-+———–+———————–+
    ————–
    COMMIT
    ————–

    ————–
    SET AUTOCOMMIT = 0
    ————–

    Si vous avez compris merci de m'éclairer et si vous avez d'autres pistes merci de me renseigner!

  26. Bonjour,
    J’ai un petit soucis, voici mon message d’erreur:
    Warning: DOMDocument::loadHTMLFile() expects exactly 1 parameter, 2 given in C:\wamp\www\php\PHPExcel\Classes\PHPExcel\Reader\HTML.php on line 427

    A cette ligne 427 du fichier « HTML.php » voici ce qu’il y a :

    $loaded = $dom->loadHTMLFile($pFilename, PHPExcel_Settings::getLibXmlLoaderOptions());

    L’erreur viens peut être de mon code? => Le voici:

    ?php
    require_once (‘C:\wamp\www\php\PHPExcel\Classes\PHPExcel\IOFactory.php’);

    // Chargement du fichier Excel
    $objPHPExcel=PHPExcel_IOFactory::load(« C:\User\U496452\Intervention\Intervention.xls »);

    /**
    * récupération de la première feuille du fichier Excel
    * @var PHPExcel_Worksheet $sheet
    */
    $sheet = $objPHPExcel->getSheet(0);

    echo  »;

    // On boucle sur les lignes
    foreach($sheet->getRowIterator() as $row) {

    echo  »;

    // On boucle sur les cellule de la ligne
    foreach ($row->getCellIterator() as $cell) {
    echo  »;
    print_r($cell->getValue());
    echo  »;
    }

    echo  »;
    }
    echo  »;
    ?>

  27. Hello

    Jai un probleme avec des cellule vide , qui du coup decalle les colonne a certaines lignes

    J’ai appliqué la solution proposé mais cela ne marche pas

    voici mon code

    $sheet = $objPHPExcel->getSheet(0);

    echo  »;

    // On boucle sur les lignes
    foreach($sheet->getRowIterator() as $row) {
    $cellIterator = $row->getCellIterator();
    $cellIterator->setIterateOnlyExistingCells(false);
    echo  »;

    // On boucle sur les cellule de la ligne
    foreach ($row->getCellIterator() as $cell) {

    echo  »;

    print_r($cell->getValue());

    echo  »;

    }
    echo  »;

    }
    echo  »;

    est ce que qqun aurais une piste SVP ??

    Merci

  28. Bonjour,
    Vous faites bien de partager vos connaissances avec ceux qui souhaitent apprendre. J’ai utilisé cette librairie pour lire un fichier xlsx mais je n’arrive même pas à inclure le fichier de la librairie. Voilà l’erreur :
    Warning: require_once(/usr/local/lib/PHPExcel_1.8.0/PHPExcel/Classes/PHPExcel/Reader/Excel2007.php) [function.require-once]: failed to open stream: No such file or directory in /var/www/html/intranet/test/lecture/Test_lecture_fichier_excel_PHP.php on line 8
    Fatal error: require_once() [function.require]: Failed opening required ‘/usr/local/lib/PHPExcel_1.8.0/PHPExcel/Classes/PHPExcel/Reader/Excel2007.php’ (include_path=’.:/usr/share/pear’) in /var/www/html/intranet/test/lecture/Test_lecture_fichier_excel_PHP.php on line 8
    voilà une partie du code utilisé :
    $lib_path= »/usr/local/lib/PHPExcel_1.8.0″;
    require_once(« $lib_path/PHPExcel/Classes/PHPExcel/Reader/Excel2007.php »);(==> ligne 8)

    $lien_vers_mon_document_excel=’Test_lecture_fichier.xlsx’;
    $array_data = array();
    $XLSXDocument = new PHPExcel_Reader_Excel2007();
    $Excel = $XLSXDocument->load($lien_vers_mon_document_excel);

    Pouvez-vous m’aider à inclure cette librairie ? j’ai un serveur apache et le paramètre include_path n’est pas défini dans mon fichier php.ini
    Je vous remercie d’avance

  29. bonjour
    merci pour votre code
    mais après la lecture même des commentaire je reste encore bloqué avec le problème des cellules vides, ça décale les les valeurs non nulles vers les colonnes dont les valeurs sont nulles
    donc chaque ligne se réduit en fonction des valeurs monquantes
    veillez m’aider s’il vous plait
    merci d’avance

  30. Bonjour,
    tous d’abord merci pour ton billet, ça m’a vraiment été d’une grande aide, je decouvre php et je vient de trouver la lib PHPExcel, je veux juste vous demander deux trucs :
    1 – dans certaines cellules, ça renvoi la formule et pas la valeur, comment corriger ça ?
    2 – Supposons que j’ai une table excel de 3 ligne et 6 colonnes, comment récupérer chaque cellule dans une variable, (par exemple récupérer la premiere ligne dans 6 variables, les enregistrer dans une BD, et faire une loop pour que ça se repete selon le nombre des lignes)

    Grand merci d’avance.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.