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.
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 :
- Exportez d'abord votre catalogue existant pour récupérer les ID actuels
- Faites correspondre ces ID avec les données de votre fournisseur
- Importez le fichier avec l'option "Forcer les identifiants" activée
- 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
- **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.
- **Sauvegardez votre base de données** avant tout import massif
- **Testez sur 5-10 produits** avant d'importer la totalité
- Activez l'option **"Forcer les identifiants"** ou **"Utiliser la référence comme clé"**
- Vérifiez le mapping des colonnes dans l'écran d'aperçu
- Lancez l'import et surveillez le rapport d'erreurs
- Créez un **modèle de correspondance** dans l'outil d'import (enregistrez le mapping des colonnes)
- Utilisez la référence fournisseur comme clé d'identification
- Ne mettez à jour que les colonnes nécessaires (prix, stock) — inutile de réimporter les descriptions à chaque fois
- Automatisez si possible avec un module d'import CRON ou via l'API Webservice
- 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
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_producten 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 :
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
Procédure de mise à jour sécurisée
Gérer les imports récurrents (fournisseur)
Si vous recevez régulièrement un fichier fournisseur :
Sur PrestaShop 8.x : les nouveautés de l'import
PrestaShop 8.x a amélioré l'outil d'import natif :
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
Questions fréquentes
Tout ce que vous devez savoir sur ce sujet.
Un projet PrestaShop ?
Discutons-en directement.
193 projets livrés
Lire sur le blog

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.