Dernière mise à jour : juin 2026. Ceci est un résumé en langage clair de la manière dont les réglages PrestaShop correspondent aux règles courantes d’affichage des prix dans l’UE, ce n’est pas un avis juridique. Faites confirmer vos obligations pour chaque marché par un conseiller qualifié.

La plupart des marchands PrestaShop traitent l’affichage des prix comme une question de style, une taille de police, une couleur de prix barré, l’emplacement de la mention « TTC ». En Europe, ce n’est rien de tout cela. Faut-il afficher un prix HT ou TTC, un prix unitaire doit-il apparaître à côté du prix de vente, quelle règle nationale s’applique quand un client français achète dans votre boutique allemande : toutes ces questions ont une réponse juridique, et se tromper sur ce point est typiquement le genre d’erreur qu’un concurrent signale ou qu’une autorité de protection des consommateurs contrôle. La bonne nouvelle : presque toutes ces règles correspondent à un réglage précis dans PrestaShop. Ce guide porte exactement sur cette correspondance, ce que la réglementation sur la présentation des prix exige, et quel interrupteur, champ ou règle de taxe du back-office permet d’y répondre.

Pour rester concentrés : cet article traite de l’affichage des prix, HT ou TTC, prix unitaires et présentation des prix réduits. Les mécanismes de TVA eux-mêmes, taux applicable, inscription OSS/IOSS, autoliquidation pour le B2B transfrontalier. Font l’objet de guides dédiés, liés aux endroits où ils se recoupent avec le sujet. Si votre question est « quel taux dois-je appliquer », commencez par la configuration des taxes dans PrestaShop et la TVA dans l’UE : OSS, IOSS et ce que votre boutique doit gérer. Si votre question est « quel prix dois-je afficher », vous êtes au bon endroit.

La règle qui sous-tend tout : les prix B2C sont TTC

Bord d'étagère de magasin avec des porte-étiquettes de prix vides et des boîtes de produits neutres, représentant les règles d'affichage des prix
Les étiquettes de rayon rendent les règles tangibles : ce que voient les acheteurs doit être net, TTC ou prix à l'unité, comme l'exige la loi.

Dans chaque État membre de l’UE, le prix vu par un consommateur doit être le total qu’il paie, TVA comprise. Cela découle de la directive relative aux droits des consommateurs et de la directive sur l’indication des prix (98/6/CE) : le « prix de vente » affiché à un consommateur est le prix final, toutes taxes comprises. Un produit qui coûte 100 € plus 21 % de TVA s’affiche à l’acheteur à 121,00 €, point final. Afficher uniquement des prix HT aux consommateurs n’est pas une préférence de style que l’on peut activer ; ce n’est pas conforme.

Ce point prend souvent les marchands au dépourvu, car PrestaShop n’a pas de bouton général « Afficher les prix TTC » sur une page de réglages. L’affichage TTC ou HT est piloté par le groupe client. Chaque visiteur appartient à un groupe, et chaque groupe possède une Méthode d’affichage des prix réglée soit sur Taxes incluses, soit sur Taxes exclues. Le comportement vu par vos visiteurs anonymes et vos clients particuliers ordinaires est contrôlé par les groupes par défaut sous Clients → Groupes, dans une installation standard, il s’agit de Visiteur, Invité et Client. Pour toute boutique qui vend à des consommateurs, la Méthode d’affichage des prix de chacun de ces groupes doit être Taxes incluses. Qu’est-ce que cela change concrètement ? Ce réglage détermine si les pages produit, les listes de catégories, le panier et les résultats de recherche affichent à ce visiteur le montant TTC ou HT. Laissez un groupe par défaut sur « Taxes exclues », un état que l’on retrouve parfois dans des thèmes importés ou des configurations orientées B2B, et chaque prix visible par ces consommateurs devient techniquement illégal en Europe, même si la TVA reste correctement calculée sur la ligne de commande.

Un réglage voisin est souvent confondu avec celui-ci : sous International → Taxes, il existe un interrupteur Afficher les taxes dans le panier (la clé de configuration PS_TAX_DISPLAY), mais il ne détermine que l’affichage ou non de la taxe sur une ligne séparée dans le panier, il ne contrôle pas l’affichage HT/TTC des prix du catalogue. Le levier pertinent est bien la Méthode d’affichage des prix du groupe.

Deux choses que la méthode d’affichage du groupe ne fait pas, et qui créent souvent de la confusion : elle n’ajoute pas littéralement la mention « TTC » (c’est du texte dans le template du thème, nous y revenons plus bas), et un groupe B2B réglé en HT est précisément le mécanisme à utiliser pour proposer des prix HT en parallèle des prix TTC B2C. Ce second point est l’endroit où la plupart des boutiques mixtes se mettent en difficulté ; il mérite donc sa propre section.

Afficher du HT aux professionnels et du TTC aux consommateurs, sans enfreindre la loi pour les uns ni pour les autres

Les prix HT ne sont pas interdits. Ils sont même indispensables pour le bon public. Le modèle standard et licite est le suivant : les clients professionnels vérifiés voient des prix HT, avec une mention claire « HT », tandis que tous les autres voient des prix TTC. PrestaShop gère cela avec le même mécanisme de groupes clients décrit plus haut, un groupe B2B dédié reçoit simplement la méthode d’affichage inverse.

Allez dans Clients → Groupes, créez ou modifiez un groupe (par exemple un groupe « Grossiste » ou « B2B »), puis réglez la Méthode d’affichage des prix sur Taxes exclues. Le champ est stocké comme price_display_method du groupe, et PrestaShop détermine le montant visible par un visiteur donné à partir du réglage de son groupe via Product::getTaxCalculationMethod(). Un client affecté à ce groupe voit désormais des prix HT dans toute la boutique ; un client particulier dans un groupe par défaut continue de voir des prix TTC. Les deux affichages sont conformes pour leur public, à condition que votre thème signale clairement l’affichage HT, afin qu’un acheteur professionnel ne doute jamais que la TVA sera ajoutée.

La vraie difficulté pratique se trouve autour de cet interrupteur : affecter les clients au bon groupe, gérer les visiteurs qui ne sont pas encore connectés et permettre à un acheteur de basculer entre les vues lorsque votre catalogue s’adresse légitimement aux deux publics. Construire toute cette logique de groupes, l’inscription conditionnée au numéro de TVA et les conditions de paiement à échéance qui l’accompagnent souvent est un projet à part entière, nous couvrons toute la configuration B2B dans l’e-commerce B2B avec PrestaShop : gestion de la TVA, prix HT et conditions de paiement, et l’autoliquidation transfrontalière qui applique un taux zéro à un numéro de TVA intracommunautaire valide fait partie du guide OSS/IOSS.

Si vous souhaitez une expérience plus propre que le changement manuel de groupe, un sélecteur HT/TTC visible que l’acheteur contrôle, ou un affichage automatique par groupe sans modifier le thème, c’est précisément le besoin auquel répond notre module Tax Display Switcher. Le bénéfice concret : une boutique qui sert légitimement des clients particuliers et professionnels peut montrer à chacun le prix qu’il est en droit de voir, configuré depuis le back-office, sans devoir dupliquer ou modifier lourdement votre thème.

La mention « TTC » est du texte de template, pas un réglage

Voici une distinction qui coûte réellement de l’argent aux marchands allemands : régler la méthode d’affichage d’un groupe sur « Taxes incluses » rend le prix TTC, mais n’imprime pas à lui seul les mots « inkl. MwSt. » à côté du prix. Ce libellé vient du thème, et plusieurs pays, l’Allemagne plus strictement que les autres, exigent la mention, pas seulement le montant TTC.

Dans les thèmes par défaut de PrestaShop, le bloc de prix est rendu par le template product-prices.tpl (dans themes/<your-theme>/templates/catalog/_partials/). Sur la page produit elle-même, le thème affiche un indicateur de taxe générique via {$product.labels.tax_short}, qui se résout en « (tax incl.) » ou « (tax excl.) », et non en nom localisé de la taxe. La formulation propre à chaque pays est pilotée ailleurs : il existe un interrupteur par pays Afficher le libellé de taxe sous International → Localisation → Pays (le champ display_tax_label), et le nom de la taxe elle-même, que vous définissez sous International → Taxes et appliquez par pays sous International → Règles de taxes. Est ce qui remonte dans les contextes de libellé de taxe (notamment le panier, le transporteur et la commande). Pour afficher correctement la formulation allemande, il faut généralement modifier le template du thème afin d’imprimer littéralement « inkl. MwSt. » près du prix, car le cœur de PrestaShop ne fournit par défaut que la chaîne générique « (tax incl.) ». Et alors ? Une boutique allemande qui affiche 119,00 € sans texte « inkl. MwSt. » ne respecte pas la Preisangabenverordnung, même si le calcul est correct, et c’est un correctif de template et de nom de taxe, pas un recalcul de prix.

La PAngV allemande : le cadre le plus strict, et ce qu’il exige dans PrestaShop

Si vous vendez à des consommateurs allemands, vous configurez en pratique l’affichage de vos prix selon le standard le plus exigeant de l’UE. La Preisangabenverordnung (PAngV) impose aux prix destinés aux consommateurs de :

  • Inclure la TVA (19 % au taux normal, 7 % au taux réduit). Vos groupes clients par défaut doivent être réglés sur Taxes incluses, avec la bonne règle de taxe allemande.
  • Porter la mention littérale « inkl. MwSt. » (ou « inkl. gesetzlicher MwSt. »), c’est le point sur le libellé de taxe ci-dessus.
  • Indiquer les frais de livraison ou créer un lien vers ceux-ci près du prix, généralement une ligne « zzgl. Versandkosten » avec un lien vers votre page CMS de livraison, placée dans le bloc de prix.
  • Afficher un prix unitaire (Grundpreis) pour tout produit vendu au poids, au volume, à la longueur ou à la surface. Un shampoing de 500 ml à 8,99 € doit aussi afficher « 17,98 € / 1 Liter ».

La règle du Grundpreis concerne bien plus de produits que les propriétaires de boutique ne l’imaginent : cosmétiques, alimentation, produits d’entretien, tissu au mètre, câble au mètre, bref tout ce pour quoi un acheteur comparerait raisonnablement les quantités. La conclusion pratique à laquelle arrivent de nombreux marchands est de configurer toute leur boutique selon les standards allemands et de servir chaque marché ainsi, c’est une base prudente plutôt qu’une garantie universelle de conformité, l’affichage à l’allemande de la TVA, des frais de livraison et du prix unitaire constitue un standard commun solide, mais ne satisfait pas à lui seul chaque règle nationale de langue, d’information, d’Omnibus, de secteur ou de tunnel de commande, vous le construisez donc une fois au lieu de créer une logique d’affichage différente par pays. La partie prix unitaire dispose d’un champ PrestaShop dédié, sujet de la section suivante.

Prix unitaire : le champ produit que la plupart des boutiques laissent vide

Le prix unitaire, prix au kg, au litre, au mètre, à la pièce, est obligatoire dans toute l’UE (directive 98/6/CE) pour les biens vendus en quantité mesurable, et PrestaShop dispose depuis des années d’un champ natif pour cela. La plupart des boutiques ne le remplissent tout simplement jamais.

Sur la page produit, ouvrez l’onglet Prix et cherchez Prix par unité (les anciennes versions 1.6/1.7 l’appellent « Prix unitaire »). Vous saisissez l’unité (par kg, par litre, par m, « pièce ») et PrestaShop calcule le montant unitaire à partir du prix du produit. Sous le capot, il s’agit des champs unit_price_ratio et unity du produit, et le front-office rend le résultat automatiquement, la ligne « 17,98 € / 1 Liter » apparaît à côté du prix sans intervention dans le template. Qu’est-ce que cela vous apporte concrètement ? La conformité pour les produits concernés, et un bénéfice discret sur la conversion : un prix clair au litre ou au kilo est exactement ce qu’un acheteur comparatif cherche, et l’afficher supprime une raison d’aller chez un concurrent qui a fait le calcul à sa place.

Deux notes opérationnelles tirées de mises en place à grande échelle. D’abord, pour un grand catalogue, vous ne voulez pas saisir l’unité à la main sur des centaines de produits. Le champ est disponible dans l’import produit CSV (Paramètres avancés → Import), vous pouvez donc mapper vos colonnes « unité » et « ratio de prix unitaire » et les définir en masse. Ensuite, le prix unitaire affiché est dérivé du prix de base ; si votre prix de base est TTC (comme il doit l’être en B2C), le prix unitaire l’est aussi, gardez les deux cohérents, sinon un contrôle du Grundpreis allemand signalera l’écart.

Prix réduits : afficher les remises selon la logique Omnibus

Les règles Omnibus sur les réductions de prix s’appliquent dans les États membres de l’UE par le biais des lois nationales depuis l’échéance de transposition de 2022, avec des détails locaux. La façon dont vous affichez une remise est donc encadrée, pas seulement le fait d’en proposer une. Lorsque vous annoncez une réduction de prix, le prix de référence que vous barrez doit être le prix le plus bas auquel le produit a été vendu au cours des 30 jours précédents, sauf exception locale applicable, pas le prix plein d’origine, et certainement pas un montant gonflé la semaine précédant la promotion.

Exemple concret : un produit est normalement à 50 €. Vous avez lancé une promotion de week-end à 40 € il y a deux semaines. Vous lancez maintenant une nouvelle vente à 35 €. La référence légale est 40 € (le prix le plus bas des 30 jours), vous devez donc présenter 40 € → 35 €, soit une réduction de 12,5 %, et non 50 € → 35 € avec 30 % de remise. La règle s’applique aux prix barrés sur les pages produit, aux bannières promotionnelles, aux e-mails commerciaux et à chaque opération Black Friday ou déstockage. Elle ne s’applique pas aux réductions personnalisées (une remise fidélité sur le panier d’un client), aux vrais prix de lots, ni aux produits présents sur le marché depuis moins de 30 jours.

Là où cela pose problème dans PrestaShop : les Règles de prix catalogue et les Prix spécifiques (le panneau « Ajouter un prix spécifique » par produit dans l’onglet Prix) affichent par défaut le prix d’origine comme référence barrée, et dans le cœur, « prix d’origine » signifie votre prix catalogue, ce qui n’est pas la même chose que le prix le plus bas sur 30 jours exigé par la règle Omnibus. PrestaShop standard ne conserve pas nativement la mémoire du « prix le plus bas des 30 derniers jours » ; un prix catalogue barré littéralement peut donc surestimer la remise et enfreindre la règle. Les approches conformes consistent soit à régler délibérément la référence du prix spécifique sur le véritable prix le plus bas des 30 jours, soit à utiliser un module qui enregistre l’historique des prix et affiche automatiquement la bonne référence. Dans tous les cas, considérez le prix barré par défaut comme quelque chose à vérifier, pas comme une valeur fiable.

Vente transfrontalière : quelles règles d’affichage des prix s’appliquent ?

Lorsque vous ciblez des consommateurs dans un autre pays de l’UE, les règles impératives de protection des consommateurs de ce pays peuvent s’appliquer à ces ventes, ce n’est pas une règle simple du type « toujours le pays du client », cela dépend du fait que vous dirigiez ou non votre activité vers ce marché. Une boutique allemande qui cible activement des consommateurs français peut devoir respecter les règles françaises de présentation pour ces ventes ; ciblez la Pologne, et l’application polonaise d’Omnibus (l’UOKiK surveille activement les boutiques en ligne) peut être le référentiel d’évaluation. Concevez donc votre affichage pour chaque marché que vous servez. La réponse pragmatique à laquelle la plupart des marchands aboutissent est celle déjà mentionnée : construisez selon le standard commun le plus strict, prix TTC avec mention explicite de la TVA, prix unitaires partout où ils s’appliquent, références conformes à Omnibus, et vous êtes couvert sur chaque marché sans devoir ramifier votre front-office par pays.

Le taux qui détermine le montant TTC change bien selon la destination, et PrestaShop gère cela via des règles de taxes liées au pays de livraison, configurez un groupe de règles de taxes par pays sous International → Règles de taxes et attribuez-le à vos produits, puis le prix TTC affiché est recalculé à partir de l’adresse de livraison. Le volet inscription et déclaration lorsque vous facturez la TVA d’un autre pays (seuils OSS, moment où vous devez vous enregistrer) est un sujet à part, traité dans le guide OSS/IOSS ; l’interaction des retours et remboursements avec les ventes transfrontalières est abordée dans les retours transfrontaliers.

Un mot sur les documents en aval du prix

Le prix que vous affichez et celui qui apparaît sur la facture doivent correspondre, et la facture a ses propres obligations de contenu. Si vous renforcez l’affichage des prix, cela vaut la peine de vérifier la facture au même moment, la présentation HT/TTC, le détail de la TVA et les champs obligatoires sont couverts dans la personnalisation des factures dans PrestaShop : templates PDF et exigences légales, et les obligations plus larges liées à la vente dans l’UE sont regroupées dans le guide des propriétaires de boutique sur le droit de l’e-commerce dans l’UE.

FAQ

Où, dans PrestaShop, passer les prix consommateurs en TTC ?

Il n’existe pas de bouton général « afficher les prix TTC ». Le choix TTC ou HT est géré par groupe client. Allez dans Clients → Groupes et réglez la Méthode d’affichage des prix sur Taxes incluses pour chaque groupe par défaut auquel vos consommateurs appartiennent (Visiteur, Invité, Client dans une installation standard). En laisser un sur « Taxes exclues », un état que certains thèmes importés conservent, rend chaque prix visible par ces consommateurs non conforme dans l’UE, même si la TVA est encore correctement calculée sur la ligne de commande. (Résumé en langage clair, pas un avis juridique.)

Pourquoi mon prix TTC n’affiche-t-il pas « TTC » / « inkl. MwSt. » ?

Parce que cette mention vient du thème, ce n’est pas un effet automatique de la méthode d’affichage du groupe. Le cœur affiche un générique {$product.labels.tax_short}, « (tax incl.) », sur la page produit, et l’interrupteur par pays Afficher le libellé de taxe (International → Localisation → Pays), avec le nom de la taxe elle-même, pilote le libellé localisé dans les contextes panier/commande. Pour afficher littéralement « inkl. MwSt. » à côté du prix, ce que la PAngV allemande exige, vous devez généralement modifier le template product-prices.tpl, car le cœur ne fournit par défaut que la chaîne générique.

Comment afficher des prix HT aux professionnels et TTC aux consommateurs dans la même boutique ?

Utilisez le même mécanisme de groupes dans l’autre sens. Créez un groupe « Grossiste » ou « B2B » sous Clients → Groupes et réglez sa Méthode d’affichage des prix sur Taxes exclues (stockée comme price_display_method du groupe ; PrestaShop détermine le montant visible par un visiteur via Product::getTaxCalculationMethod()). Les membres de ce groupe voient des prix HT dans toute la boutique, tandis que les clients particuliers continuent de voir des prix TTC. Les deux affichages sont conformes pour leur public, à condition que votre thème signale clairement l’affichage HT avec « HT » afin qu’un acheteur professionnel sache sans ambiguïté que la TVA sera ajoutée.

Quels produits ont besoin d’un prix unitaire (Grundpreis), et où le régler ?

Tout produit vendu au poids, au volume, à la longueur ou à la surface, cosmétiques, alimentation, produits d’entretien, tissu ou câble au mètre, doit afficher un prix unitaire dans toute l’UE au titre de la directive 98/6/CE. PrestaShop possède un champ natif pour cela : dans l’onglet Prix du produit, renseignez Prix par unité (les champs unit_price_ratio et unity), et le front-office rend automatiquement la ligne « €17,98 / 1 Liter » sans intervention dans le template. Pour un grand catalogue, mappez les colonnes d’unité dans l’import CSV (Paramètres avancés → Import) plutôt que de les saisir à la main.

PrestaShop affiche-t-il automatiquement le prix « avant » conforme à Omnibus ?

Non, et c’est précisément le point à vérifier, pas à croire sur parole. Les règles de prix catalogue et les prix spécifiques barrent par défaut votre prix de catalogue, mais les règles Omnibus exigent que la référence soit le prix le plus bas des 30 jours précédents (selon les détails locaux). PrestaShop standard ne conserve pas nativement la mémoire de ce plus bas sur 30 jours ; le prix barré par défaut peut donc surestimer la remise et enfreindre la règle. Définissez délibérément la référence du prix spécifique sur le véritable prix le plus bas des 30 jours, ou utilisez un module qui enregistre l’historique des prix et affiche la bonne référence. (Résumé uniquement, confirmez les détails pour vos marchés.)

La checklist d’affichage des prix pour une boutique PrestaShop

  • Groupes par défaut réglés en TTC, Clients → Groupes → Visiteur / Invité / Client → Méthode d’affichage des prix = Taxes incluses pour toute boutique B2C (il n’existe pas de bouton global unique « afficher les prix TTC »).
  • Mention de TVA visible, nom de taxe correct sous International → Taxes, réglage Afficher le libellé de taxe par pays, et généralement une petite modification du template du thème pour que le bloc de prix affiche « TTC » / « inkl. MwSt. », pas seulement le montant TTC.
  • Groupes B2B réglés en HT, Clients → Groupes → Méthode d’affichage des prix = Taxes exclues, avec un libellé « HT » clair pour ces acheteurs uniquement.
  • Référence aux frais de livraison près du prix, une ligne « plus frais de livraison » pointant vers votre page CMS de livraison, exigée en Allemagne.
  • Prix unitaires renseignés, le champ Prix par unité de l’onglet Prix (unit_price_ratio / unity) pour chaque produit vendu au poids, au volume, à la longueur ou à la surface ; à définir en masse via l’import CSV.
  • Référence Omnibus vérifiée, prix de référence barré réglé sur le véritable plus bas des 30 jours, et non sur le prix catalogue ; ne faites pas confiance au réglage par défaut.
  • Règles de taxe par pays, groupes de règles de taxes attribués afin que le montant TTC soit recalculé selon le pays de livraison pour les ventes OSS.

Les règles d’affichage des prix existent pour empêcher les prix trompeurs, et les boutiques qui les respectent gagnent plus qu’une simple absence d’amende : un acheteur qui voit un total honnête, un vrai prix au litre et une remise qui n’est pas un tour de passe-passe est un acheteur qui fait aussi confiance au reste de votre boutique. Dans PrestaShop, l’ensemble de l’affichage conforme est accessible à partir de réglages que vous avez déjà, le travail consiste à savoir quel interrupteur répond à quelle règle, et à ne pas laisser le champ de prix unitaire, le libellé de taxe ou la référence sur 30 jours sur leurs valeurs par défaut peu utiles.

Partager cet article:
David Miller

David Miller

Fondateur, mypresta.rocks

David Miller est un spécialiste PrestaShop fort de plus de dix ans d'expérience concrète et le fondateur de mypresta.rocks, un studio de développement situé à Tychy, en Pologne. Il conçoit et maintient un catalogue de 152 modules PrestaShop, dont 21 suites « Revolution » couvrant le SEO, le checkout, la sécurité, la performance, le marketing, la recherche, le support et la gestion d'entrepôt, qui améliorent chaque jour de vraies boutiques, testés sur PrestaShop 1.7.8, 8.x et 9.x. Il assure également la maintenance de boutiques en production réalisant plusieurs millions de chiffre d'affaires annuel : son travail se juge donc sur des ventes réelles, pas sur des démos. Son expérience couvre l'ensemble du e-commerce. Performance, sécurité, SEO et marketing, et va au-delà de PrestaShop, jusqu'à WooCommerce, Shopify et les systèmes sur mesure. Sur le blog, il écrit sur la face technique de PrestaShop : ce que la plateforme fait vraiment, ce qui casse en production et quelles solutions tiennent dans la durée.

Commentaires

Aucun commentaire pour le moment. Soyez le premier !
Cet article vous a plu ?

Recevez nos derniers conseils, guides et mises à jour de modules dans votre boîte mail.

Vous pouvez vous désinscrire à tout moment. Vous trouverez pour cela nos informations de contact dans les conditions d'utilisation du site.

Chargement...
Retour en haut