📦 CatalogueIntermédiaire PS 1.6 PS 1.7 PS 8.x

Mettre à jour son catalogue PrestaShop par import CSV : guide complet

Apprenez à mettre à jour votre catalogue PrestaShop via CSV : forcer les ID, requêtes SQL d'export, gestion des références et bonnes pratiques d'import.

En bref : Pour mettre à jour votre catalogue PrestaShop par CSV sans créer de doublons, utilisez l'option « Forcer les identifiants » ou « Utiliser la référence comme clé » dans l'outil d'import natif, et exportez vos données existantes via le Gestionnaire SQL pour faire correspondre les ID.

Publié le 21 mars 2026 6 min de lecture Alexandre Carette

Pourquoi l'import CSV reste incontournable pour gérer son catalogue

Même à l'ère des API et des connecteurs ERP, l'import CSV demeure l'outil le plus utilisé par les marchands PrestaShop pour maintenir leur catalogue à jour. Que vous receviez les tarifs de votre fournisseur chaque semaine ou que vous deviez modifier des centaines de prix en une seule opération, maîtriser l'import CSV vous fera gagner un temps considérable.

Le problème le plus fréquent que je rencontre chez mes clients : ils importent un fichier fournisseur et au lieu de mettre à jour les produits existants, PrestaShop crée des doublons. La raison est simple — il faut indiquer au système comment identifier les produits existants.

Les trois stratégies d'identification des produits

Lors d'une mise à jour par CSV, PrestaShop doit pouvoir faire correspondre chaque ligne du fichier à un produit existant en base. Trois approches s'offrent à vous.

1. Forcer les identifiants (ID produit)

C'est la méthode la plus fiable. Dans l'outil d'importation de PrestaShop (Paramètres avancés > Import), cochez l'option "Forcer les identifiants". Le système utilisera alors la colonne ID de votre CSV pour retrouver le produit correspondant en base de données.

En pratique :

  1. Exportez d'abord votre catalogue existant pour récupérer les ID actuels
  2. Faites correspondre ces ID avec les données de votre fournisseur
  3. Importez le fichier avec l'option "Forcer les identifiants" activée
  4. Si votre fichier fournisseur ne contient pas d'ID, vous pouvez les ajouter manuellement : créez une colonne ID, saisissez 1 dans la première cellule, puis utilisez la poignée de recopie de votre tableur pour générer une séquence incrémentale.

    Attention : cette méthode ne fonctionne que si les ID de votre fichier correspondent exactement aux id_product en base de données. Un ID inexistant créera un nouveau produit.

    2. Utiliser la référence comme clé

    C'est souvent la meilleure approche quand vous travaillez avec des fichiers fournisseurs. Dans l'écran d'import, PrestaShop propose l'option "Utiliser la référence produit comme clé". Le système cherchera alors une correspondance sur le champ reference plutôt que sur l'ID.

    Avantages :

    • Indépendant de la base de données (pas besoin de connaître les ID internes)
    • Les références fournisseur sont généralement stables dans le temps
    • Fonctionne même après une réinstallation ou une migration

    Prérequis : chaque produit doit avoir une référence unique. Vérifiez qu'il n'y a pas de doublons avec cette requête SQL :

    
    SELECT reference, COUNT(*) as nb
    FROM ps_product
    WHERE reference != ''
    GROUP BY reference
    HAVING nb > 1;
    

    3. Exporter puis réimporter (correspondance manuelle)

    Si aucune des deux premières méthodes ne convient, exportez votre catalogue complet, faites correspondre manuellement les lignes avec le fichier fournisseur dans un tableur (via RECHERCHEV / VLOOKUP), puis réimportez le fichier consolidé.

    Exporter son catalogue complet via SQL

    L'export natif de PrestaShop est parfois insuffisant. Voici une requête SQL complète à exécuter dans Paramètres avancés > Gestionnaire SQL pour obtenir un export exhaustif avec catégories et images :

    
    SELECT 
      p.id_product AS ID,
      pl.name AS Nom,
      p.reference,
      p.price AS Prix_HT,
      p.wholesale_price AS Prix_achat,
      p.quantity AS Stock,
      p.active AS Actif,
      cl.id_category AS ID_Cat_defaut,
      cl.name AS Cat_defaut,
      GROUP_CONCAT(DISTINCT cp.id_category SEPARATOR ',') AS Categories,
      pl.description_short AS Resume,
      pl.link_rewrite AS URL_rewrite
    FROM ps_product p
    LEFT JOIN ps_product_lang pl 
      ON p.id_product = pl.id_product AND pl.id_lang = 1
    LEFT JOIN ps_category_lang cl 
      ON p.id_category_default = cl.id_category AND cl.id_lang = 1
    LEFT JOIN ps_category_product cp 
      ON p.id_product = cp.id_product
    GROUP BY p.id_product
    ORDER BY p.id_product ASC;
    

    Adapter la requête à votre installation

    Préfixe des tables : le préfixe par défaut est ps_, mais il peut avoir été personnalisé lors de l'installation (par exemple shop_ ou monsite_). Vérifiez dans votre fichier config/settings.inc.php (PrestaShop 1.6) ou app/config/parameters.php (PrestaShop 1.7/8.x) la valeur de _DB_PREFIX_.

    Identifiant de langue : la valeur pl.id_lang = 1 suppose que votre langue principale a l'ID 1. Pour vérifier, rendez-vous dans Localisation > Langues depuis le back-office : l'ID est affiché dans la première colonne du tableau.

    Sur PrestaShop 8.x, vous pouvez aussi le vérifier en SQL :

    
    SELECT id_lang, name, iso_code, active 
    FROM ps_lang 
    ORDER BY id_lang;
    

    Reconstruire les URLs d'images

    PrestaShop stocke les images dans une arborescence basée sur l'ID de l'image. Par exemple, l'image 12345 sera stockée dans /img/p/1/2/3/4/5/12345.jpg. Voici comment reconstruire ces chemins en SQL :

    
    SELECT 
      p.id_product,
      im.id_image,
      CONCAT(
        'https://votresite.com/img/p/',
        SUBSTRING(im.id_image, 1, 1), '/',
        CASE WHEN LENGTH(im.id_image) >= 2 
          THEN CONCAT(SUBSTRING(im.id_image, 2, 1), '/') ELSE '' END,
        CASE WHEN LENGTH(im.id_image) >= 3 
          THEN CONCAT(SUBSTRING(im.id_image, 3, 1), '/') ELSE '' END,
        CASE WHEN LENGTH(im.id_image) >= 4 
          THEN CONCAT(SUBSTRING(im.id_image, 4, 1), '/') ELSE '' END,
        CASE WHEN LENGTH(im.id_image) >= 5 
          THEN CONCAT(SUBSTRING(im.id_image, 5, 1), '/') ELSE '' END,
        im.id_image, '.jpg'
      ) AS image_url
    FROM ps_product p
    JOIN ps_image im ON p.id_product = im.id_product
    ORDER BY p.id_product, im.position;
    

    PrestaShop 8.x : si vous avez activé le nouveau système de stockage d'images, les chemins peuvent différer. Vérifiez la configuration dans Préférences > Images.

    Bonnes pratiques pour un import CSV sans erreur

    Préparer son fichier

    • **Encodage UTF-8 sans BOM** : indispensable pour les caractères accentués. Dans Excel, utilisez "Enregistrer sous > CSV UTF-8". Dans LibreOffice, cochez "Éditer les paramètres de filtre" et sélectionnez UTF-8.
    • **Séparateur point-virgule** : PrestaShop accepte la virgule et le point-virgule, mais le point-virgule évite les conflits avec les descriptions contenant des virgules.
    • **Pas de cellules fusionnées** ni de formatage riche : le CSV ne les supporte pas et cela génère des erreurs silencieuses.

    Procédure de mise à jour sécurisée

    1. **Sauvegardez votre base de données** avant tout import massif
    2. **Testez sur 5-10 produits** avant d'importer la totalité
    3. Activez l'option **"Forcer les identifiants"** ou **"Utiliser la référence comme clé"**
    4. Vérifiez le mapping des colonnes dans l'écran d'aperçu
    5. Lancez l'import et surveillez le rapport d'erreurs
    6. Gérer les imports récurrents (fournisseur)

      Si vous recevez régulièrement un fichier fournisseur :

      1. Créez un **modèle de correspondance** dans l'outil d'import (enregistrez le mapping des colonnes)
      2. Utilisez la référence fournisseur comme clé d'identification
      3. Ne mettez à jour que les colonnes nécessaires (prix, stock) — inutile de réimporter les descriptions à chaque fois
      4. Automatisez si possible avec un module d'import CRON ou via l'API Webservice
      5. Sur PrestaShop 8.x : les nouveautés de l'import

        PrestaShop 8.x a amélioré l'outil d'import natif :

        • Meilleure gestion de la mémoire pour les gros fichiers (10 000+ lignes)
        • Possibilité de définir la taille des lots (batch size) pour éviter les timeouts
        • Logs d'import plus détaillés
        • Support amélioré du multistore

        Pour les catalogues volumineux (50 000+ références), privilégiez l'import via le CLI de Symfony ou un script PHP dédié utilisant ObjectModel plutôt que l'interface web.

        Erreurs fréquentes et solutions

        ErreurCause probableSolution Produits dupliquésOption "Forcer les ID" non cochéeActiver l'option ou utiliser la référence comme clé Caractères corrompusMauvais encodage du fichierConvertir en UTF-8 sans BOM Colonnes décaléesMauvais séparateurVérifier le séparateur dans les paramètres d'import Import qui s'arrêteTimeout PHPAugmenter `max_execution_time` dans `php.ini` Prix à 0Format décimal incorrectUtiliser le point comme séparateur décimal
#import csv #catalogue #mise à jour produits #export sql #gestion stock

Questions fréquentes

Tout ce que vous devez savoir sur ce sujet.

Un projet PrestaShop ?

Discutons-en directement.

★★★★★

193 projets livrés

Gratuit & sans engagement — réponse sous 24h

Alexandre Carette

Alexandre Carette

Expert PrestaShop & Architecture E-commerce

Développeur PrestaShop depuis 2014, 193 projets livrés. Je conçois des architectures headless Nuxt + PrestaShop et des outils d'automatisation IA pour les e-commerçants.