En bref
- Odoo applique la première règle qui correspond, en commençant par la plus précise : variante, puis article, puis catégorie, puis toute la liste.
- Changer la liste de prix d’un devis ne recalcule pas les lignes existantes : il faut mettre les prix à jour.
- Taxes comprises, arrondis, marges et devise expliquent la plupart des écarts restants.
- Dans le shell Odoo, une ligne suffit pour savoir quelle règle a produit un prix.
Le réflexe : lire la règle, pas le prix
Quand un commercial signale un prix incorrect, la tentation est d’ouvrir le code. C’est rarement le bon point de départ. Une liste de prix Odoo est un petit moteur de règles : il suffit qu’une règle plus précise, une quantité minimale ou une date de validité entre en jeu pour que le prix change, sans aucun bug.
La bonne question n’est donc pas « pourquoi ce prix est faux ? » mais « quelle règle a produit ce prix ? ». Les six vérifications qui suivent y répondent dans l’ordre où les causes apparaissent le plus souvent.
1. Quelle liste de prix est vraiment sur la commande ?
La liste affichée sur la fiche client n’est pas forcément celle de la commande. Elle est proposée à la création du devis, puis peut être modifiée à la main, imposée par le site web ou héritée d’un abonnement.
- Ouvrez la commande et lisez le champ Liste de prix de la commande elle-même.
- Comparez avec la liste de prix du client (onglet Ventes et achats de la fiche contact).
- Pour une commande e-commerce, vérifiez aussi les listes de prix sélectionnables sur le site.
2. Quelle règle gagne ?
Odoo trie les règles de la liste de la plus précise à la plus générale, puis retient la première qui s’applique à l’article et à la quantité commandée. À précision égale, la règle dont la quantité minimale est la plus élevée passe d’abord.
- Une règle « article » créée pour une promotion masque la règle de catégorie, même si cette dernière est plus avantageuse.
- Une règle avec une quantité minimale de 10 ne s’applique pas à une ligne de 9 : Odoo passe à la règle suivante, sans message.
Astuce
Activez le mode développeur (?debug=1 dans l’URL) : au survol, chaque champ affiche son nom technique. Pratique pour retrouver dans une règle la portée (applied_on) et la quantité minimale (min_quantity), les deux critères qui décident de l’ordre.
3. La ligne a-t-elle été recalculée ?
Le prix d’une ligne est calculé quand on choisit l’article ou qu’on change la quantité. Si l’on modifie ensuite la liste de prix du devis, les lignes existantes gardent leur ancien prix. Odoo propose alors de mettre les prix à jour : tant que ce n’est pas fait, le devis mélange deux logiques.
4. Taxes comprises ou non ?
Une règle en prix fixe à 120 € ne donne pas le même total selon que la taxe de l’article est configurée prix TTC (taxe comprise) ou non. Vérifiez la taxe de l’article et la position fiscale du client : une position fiscale peut remplacer la taxe, et donc changer le prix affiché.
5. Arrondis, supplément et marges
Les règles de type formule enchaînent plusieurs opérations : remise en pourcentage, arrondi, supplément, puis marges minimale et maximale. Un arrondi à 10 € ou une marge minimale peut suffire à rendre un prix « bizarre » alors que chaque étape est correcte.
| Symptôme | Cause probable | Où vérifier |
|---|---|---|
| Prix de base au lieu du prix remisé | Quantité minimale non atteinte | Règle : quantité minimale |
| Promotion ignorée | Règle plus précise prioritaire, ou période échue | Portée et dates des règles |
| Ancien prix après changement de liste | Lignes non recalculées | Devis : mise à jour des prix |
| Écart de quelques euros | Arrondi ou supplément de la formule | Règle : arrondi, supplément |
| Écart de 20 % | Taxe comprise d’un côté, pas de l’autre | Taxe de l’article, position fiscale |
6. Devise et unité de mesure
Une liste en dollars sur un client facturé en euros, ou un article vendu au carton alors que la règle vise l’unité : dans les deux cas, Odoo convertit, et le résultat peut surprendre. Vérifiez la devise de la liste et l’unité de mesure de la ligne.
Vérifier en deux minutes dans le shell Odoo
Quand l’interface ne suffit pas, le shell Odoo donne directement le prix et la règle retenue. La méthode utilisée est interne à Odoo : sa signature peut changer d’une version à l’autre, vérifiez-la sur la vôtre.
# odoo-bin shell -d ma_base
pricelist = env['product.pricelist'].browse(3)
product = env['product.product'].search(
[('default_code', '=', 'ABO-DIGI')], limit=1)
price, rule_id = pricelist._compute_price_rule(product, 1.0)[product.id]
rule = env['product.pricelist.item'].browse(rule_id)
print(price, rule.display_name or 'aucune règle : prix de vente')
Changez la quantité (1.0) pour voir à partir de quand une règle à quantité minimale prend le relais.
Questions fréquentes
Pourquoi le prix change-t-il quand je modifie la quantité ?
Parce qu’une règle avec une quantité minimale devient applicable, ou cesse de l’être. Odoo recalcule le prix de la ligne à chaque changement de quantité.
Une règle de catégorie s’applique-t-elle aux sous-catégories ?
Oui : une règle qui vise une catégorie s’applique aussi aux articles de ses catégories enfants, sauf si une règle plus précise correspond avant elle.
Quand faut-il vraiment un module sur mesure ?
Quand la règle métier ne s’exprime pas avec les listes de prix standard : prix selon le moyen de paiement, tarif de renouvellement différent du premier achat, verrouillage d’un prix négocié. C’est là qu’un module dédié devient plus simple à maintenir qu’un empilement de règles.
Sources
- Odoo 18 — Listes de prix (Pricelists) règles, quantité minimale, période de validité, priorité
- Odoo 17 — Listes de prix
Documentation consultée le 25 septembre 2026.