VIES est la passerelle européenne de validation de TVA en temps réel ; le champ TVA natif de PrestaShop est enregistré, mais jamais vérifié auprès de ce service. Les règles d’autoliquidation ci-dessous reflètent la TVA de l’UE telle qu’elle s’applique en 2026. Votre administration fiscale et votre expert-comptable restent responsables de déterminer si une vente donnée peut être exonérée. Les chemins couvrent PrestaShop 1.6, 1.7, 8 et 9.

Voici ce qu’attend un client B2B assujetti à la TVA dans un autre pays de l’UE lorsqu’il arrive sur votre boutique PrestaShop : il saisit son numéro de TVA, le prix passe en hors taxe, et la facture qu’il télécharge mentionne "autoliquidation" au lieu de lui facturer une taxe qu’il devrait ensuite récupérer. Si c’est bien configuré, la vente B2B transfrontalière se fait sans friction. Si c’est mal configuré, vous facturez de la TVA alors que vous ne devriez pas, ou vous exonérez un numéro qui s’avère invalide, vous perdez le client ou vous portez vous-même le risque fiscal. Ce guide porte précisément sur l’automatisation de la vérification : comment PrestaShop contrôle un numéro de TVA auprès du système VIES de l’UE, où ce contrôle s’effectue réellement dans le code, et comment transformer un numéro valide en commande exonérée sans intervention manuelle.

C’est une partie d’une configuration B2B plus large. Décider quels clients voient les prix hors taxe, comment l’affichage de la taxe bascule, et comment vous validez une demande de compte professionnel au départ sont des sujets à part entière, traités dans les articles complémentaires liés tout au long de ce guide. Ici, nous nous concentrons sur une seule question : déclencher automatiquement et correctement l’exonération de TVA.

La règle que vous automatisez : l’autoliquidation intracommunautaire

La logique fiscale est précise, et il vaut mieux l’énoncer clairement, car l’automatisation ne vaut que par les conditions qu’elle vérifie. Lorsqu’une entreprise assujettie à la TVA vend des biens ou des services à une entreprise assujettie à la TVA dans un État membre de l’UE différent, le vendeur ne facture pas la TVA. L’acheteur l’autoliquide dans sa propre déclaration, c’est le mécanisme de "reverse charge", ou autoliquidation, ce qui lui évite de demander le remboursement d’une TVA étrangère. Pour que l’exonération soit légitime, toutes les conditions suivantes doivent être réunies :

  • Les deux parties sont des entreprises assujetties à la TVA.
  • Elles se trouvent dans des États membres de l’UE différents (un vendeur allemand et un acheteur B2B allemand paient toujours la TVA allemande).
  • Le numéro de TVA de l’acheteur est valide, confirmé auprès de VIES, et pas seulement correctement formaté.
  • La livraison ou prestation traverse réellement une frontière.

Si une seule de ces conditions manque, la TVA normale s’applique. C’est exactement pourquoi un contrôle de format ("est-ce que cela ressemble à un numéro français ?") ne suffit pas à lui seul, et pourquoi l’automatisation doit interroger VIES.

VIES : le seul contrôle faisant autorité

VIES (VAT Information Exchange System) est le service officiel de la Commission européenne qui confirme qu’un numéro de TVA existe et est actif. Vous lui envoyez un code pays et un numéro ; il répond valide ou invalide, et, selon l’État membre, renvoie le nom et l’adresse de l’entreprise enregistrée. Il n’y a pas d’équivalent. Une regex qui confirme que le numéro a la bonne longueur et le bon préfixe pays ne vous dit rien sur le fait que ce numéro soit réellement enregistré, ce qui est pourtant le seul point qui compte pour une exonération que vous devrez peut-être justifier lors d’un contrôle.

La difficulté pratique, c’est la fiabilité. VIES est une passerelle en temps réel vers les bases fiscales nationales de chaque pays : elle peut être arrêtée pour maintenance, certains États membres peuvent être temporairement hors ligne, et les réponses peuvent prendre du retard. Qu’est-ce que cela implique pour votre tunnel de commande ? Votre automatisation ne doit jamais laisser un délai d’attente VIES bloquer une vente. Le bon comportement lorsque VIES est inaccessible consiste à accepter la commande, facturer la TVA normalement (le choix sûr par défaut), puis signaler la commande pour vérification manuelle ou nouveau contrôle, pas à laisser le client devant un validateur qui tourne indéfiniment. Une exonération que vous pourrez appliquer rétroactivement après un contrôle réussi se rattrape ; un panier abandonné, non.

VIES expose un service web SOAP, qui est le point de terminaison appelé en coulisse par tout module PrestaShop de validation de TVA. Un appel PHP minimal ressemble à ceci. Utile pour comprendre exactement ce qu’un module fait pour vous, et ce que signifie réellement un délai d’attente :

// VIES SOAP check – country code + number, returned valid/invalid (+name/address where the state shares it).
// Wrap in try/catch: a SoapFault here = VIES unreachable, NOT an invalid number.
try {
    $client = new SoapClient(
        'https://ec.europa.eu/taxation_customs/vies/services/checkVatService.wsdl',
        array('connection_timeout' => 10)   // never hang the checkout on a slow gateway
    );
    $res = $client->checkVat(array(
        'countryCode' => 'FR',              // ISO country code (use XI for Northern Ireland)
        'vatNumber'   => '12345678901',     // digits only, no country prefix
    ));
    // $res->valid === true|false; $res->name / $res->address where the member state returns them.
} catch (SoapFault $e) {
    // VIES down or timed out -> take the order WITH VAT, flag for manual re-check. Do not block.
}

Notez les deux modes d’échec distincts : $res->valid === false signifie que VIES a répondu et que le numéro n’est pas enregistré (il faut refuser l’exonération) ; un SoapFault signifie que VIES n’a pas répondu du tout (facturez la TVA, signalez la commande, puis revérifiez plus tard). Les confondre est le bug classique. Une panne côté administration ne doit jamais faire passer un client pour invalide.

Ce que PrestaShop fait nativement, et là où il s’arrête

PrestaShop fournit plus d’éléments que ne le pensent beaucoup de marchands, mais il ne va pas jusqu’à l’automatisation complète. Les éléments natifs :

  • Un champ de numéro de TVA sur les adresses. Le champ vat_number se trouve sur l’objet Address (stocké dans la table ps_address ; vous le voyez dans le formulaire d’adresse au moment de la commande et lorsque vous modifiez une adresse dans Clients → Adresses). Son affichage est piloté pays par pays via International → Zones géographiques → Pays → [pays] → "Avez-vous besoin d’un numéro d’identification fiscale ?", et les champs société/TVA apparaissent lorsque le mode B2B est activé (ci-dessous), il n’existe pas d’interrupteur global séparé "afficher le champ TVA".
  • Un interrupteur "mode B2B". Paramètres de la boutique → Paramètres client → Activer le mode B2B (la valeur de configuration PS_B2B_ENABLE) expose les champs société/TVA et les données client orientées B2B.
  • La taxe vient des règles de taxes et des adresses, pas d’un contrôle VIES. C’est la limite cruciale. PrestaShop facture la taxe à partir des règles de taxes associées aux produits et de l’adresse du client (pays/État/zone), pas à partir d’un contrôle VIES en direct, ni de l’appartenance à un groupe. Un groupe client contrôle la méthode d’affichage des prix (affichage TTC ou HT) et les réductions, mais il ne remet pas nativement la TVA facturée à zéro. Le champ natif vat_number est enregistré et imprimé sur la facture, et le cœur peut appliquer une validation de champ basique, mais il ne doit pas être considéré comme une validation TVA faisant autorité : le cœur de PrestaShop n’appelle pas VIES et ne remet pas automatiquement la taxe à zéro parce qu’un numéro a été saisi.

Autrement dit, par défaut vous pouvez collecter un numéro de TVA et vous pouvez créer un groupe client qui affiche les prix hors taxe, mais il n’existe pas de groupe "exonéré de taxe" natif qui supprime la TVA. Les groupes sont utiles pour l’affichage HT/TTC et la visibilité des prix ; l’exonération de TVA réelle nécessite des règles de taxes et une logique d’adresse correctes, ou un module/gestionnaire de taxes personnalisé. Le pont entre "ce numéro est valide dans VIES" et "ce client est donc exonéré" est la partie que vous devez ajouter. La création d’un groupe à prix HT et le basculement des prix vers le hors taxe relèvent d’un article complémentaire : consultez prix HT ou TTC : basculer l’affichage des taxes pour la mécanique d’affichage et les groupes client dans PrestaShop pour la configuration du groupe lui-même.

Où l’exonération se déclenche réellement dans PrestaShop

Paramètres d'administration du vérificateur de TVA UE avec validation VIES et affectation à un groupe de clients exonéré de taxe
Le vérificateur de TVA UE valide le numéro via VIES et affecte les acheteurs B2B valides à un groupe de clients exonéré de taxe.

Pour automatiser cela proprement, il est utile de savoir quel levier modifie la taxe. Il existe deux approches honnêtes, qui ne se comportent pas de la même manière :

MécanismeComment la taxe est suppriméeQuand cela s’appliqueCompromis
Groupe client avec prix HTLe price_display_method du groupe contrôle uniquement l’affichage TTC ou HT, réglez-le sur l’affichage hors taxe pour que le client voie des prix HT. Le taux de taxe réellement facturé vient toujours de la règle de taxe de chaque produit plus les règles liées à l’adresse (pays/État/zone), pas du groupeLe client voit les prix HT dans toute la boutique dès qu’il est dans le groupeL’affichage HT est lié à l’appartenance au groupe, mais l’affichage n’est pas l’exonération : le groupe ne remet pas la TVA facturée à zéro, donc le 0 % légal doit toujours venir de la logique taxe/adresse
Exonération fiscale au niveau de l’adresseLa couche Tax / TaxManager résout le taux selon le pays de l’adresse de livraison et le groupe de règles de taxes. PrestaShop natif ne considère pas automatiquement un numéro de TVA intracommunautaire valide comme un déclencheur d’autoliquidation ; une logique de module/personnalisée doit valider le numéro de TVA et soit modifier le calcul de taxe, soit sélectionner un chemin de règles de taxes approprié qui aboutit à 0 %Par commande, selon l’adresse utilisée au moment du paiementPlus proche de la règle juridique réelle (c’est la livraison transfrontalière qui compte), mais nécessite une logique personnalisée pour lire VIES et ajuster la taxe du panier

En coulisse, la taxe est calculée via TaxManagerFactory / TaxCalculator lorsque le total du panier est construit, à partir du groupe de règles de taxes de chaque produit et de la zone de l’adresse du client. Une automatisation soit (a) place un client vérifié par VIES dans un groupe à prix HT et applique un chemin fiscal conforme à 0 % pour cette commande, soit (b) intervient directement dans la résolution des taxes du panier/de la commande. Le point essentiel à garder en tête est que le groupe ne change que l’affichage HT/TTC, s’appuyer sur le moteur de prix de PrestaShop pour l’affichage est robuste (pas de calcul fiscal dupliqué, pas de surprise au moment de la facture, meilleure résistance aux mises à jour), mais le 0 % de TVA légal doit toujours être appliqué via une logique fiscale fondée sur l’adresse de livraison/facturation, le pays du vendeur, la validation TVA et les règles de livraison ou prestation. L’étape de vérification doit donc encoder "numéro VIES valide ET État membre différent" avant de promouvoir le client pour l’affichage HT et de déclencher l’exonération.

Le flux automatisé, de bout en bout

Un flux d’exonération fiscale correctement automatisé dans PrestaShop ressemble à ceci :

  • Collecter le numéro tôt. Récupérez le numéro de TVA dès l’inscription, plutôt que de l’enfouir à la fin du tunnel de commande, afin que le client voie les bons prix (HT) dès son premier chargement de page connecté, au lieu de découvrir une taxe qui disparaît seulement à la dernière étape.
  • Valider auprès de VIES en temps réel. À l’envoi du formulaire, appelez VIES (code pays + numéro) et donnez au client un retour visuel immédiat, une confirmation verte avec le nom d’entreprise renvoyé, ou un refus clair. Contrôlez d’abord le format pour éviter de gaspiller un aller-retour VIES sur une saisie manifestement mal formée, puis effectuez l’appel qui fait autorité.
  • Vérifier la condition de pays. Confirmez que le pays du client est différent du pays de votre boutique. Un acheteur B2B du même pays est vérifié, mais pas exonéré, une étape qu’une automatisation naïve saute, contrairement à un contrôleur fiscal.
  • Promouvoir en cas de succès. Affectez le client vérifié au groupe à prix HT afin que le moteur de prix de PrestaShop affiche les prix hors taxe, cela gère l’affichage. Séparément, appliquez le 0 % de TVA via une logique fiscale conforme, fondée sur l’adresse de livraison/facturation, le pays du vendeur, la validation TVA et les règles de livraison ou prestation, afin que la commande elle-même porte l’exonération au lieu de simplement afficher des montants HT.
  • Annoter la facture. La facture générée doit afficher la mention d’autoliquidation (ci-dessous). Automatiquement, dès que la TVA est exonérée.
  • Dégrader sans risque. En cas de délai d’attente VIES, ne bloquez pas : acceptez la commande avec TVA facturée et signalez-la pour une revérification manuelle.

Vérifier qu’un numéro est valide n’est pas la même chose que décider que le demandeur est un vrai client professionnel auquel vous voulez accorder des prix HT et des conditions de compte, cette validation commerciale (preuves d’entreprise, approbation manuelle, filtrage de la fraude) est un travail distinct, traité dans demandes de compte professionnel : vérifier les clients professionnels avant de leur donner accès.

Exigences de facturation lorsque vous exonérez

Une facture exonérée n’est pas simplement "la même facture avec 0 € de taxe". En vertu de la directive TVA de l’UE, elle doit contenir des informations précises, faute de quoi l’exonération n’est pas correctement documentée :

  • Votre propre numéro de TVA.
  • Le numéro de TVA du client (celui que vous avez vérifié).
  • Une mention explicite d’autoliquidation, par exemple "Autoliquidation, TVA due par le preneur, article 196 de la directive 2006/112/CE du Conseil" (utilisez l’équivalent dans la langue locale lorsque c’est requis).
  • Le total indiqué hors TVA.

Dans PrestaShop, la facture est générée par l’objet OrderInvoice et rendue via la classe HTMLTemplateInvoice ; la manière la plus propre d’ajouter une ligne conditionnelle d’autoliquidation consiste à passer par le modèle de facture / un hook, plutôt que de modifier les PDF à la main après coup. L’annotation manuelle de dizaines de commandes est précisément l’endroit où les erreurs de conformité s’installent.

Les cas limites qui cassent les automatisations naïves

Ventes dans le même pays. Un numéro de TVA valide fourni par un client de votre propre pays reste une vente nationale, facturez la TVA normale. L’autoliquidation est strictement intracommunautaire et transfrontalière. Toute automatisation qui exonère sur le seul critère "numéro valide" est fausse ici.

Irlande du Nord (numéros XI). Depuis le Brexit, l’Irlande du Nord reste dans le système TVA de l’UE pour les biens et utilise des numéros de TVA préfixés par XI, que VIES valide. Le reste de la Grande-Bretagne (GB) est un pays tiers et se situe entièrement en dehors de ce mécanisme. Votre validation doit traiter XI comme dans le périmètre et GB comme hors périmètre.

Nouveaux États membres et évolution des formats. Lorsqu’un pays rejoint l’UE, son format de TVA doit être reconnu par votre validation. Appuyez-vous sur VIES comme source de vérité plutôt que sur une table de regex codée en dur que vous oublierez de mettre à jour.

Usurpation d’identité. Un fraudeur déterminé saisit un numéro de TVA authentique appartenant à une autre entreprise pour éviter la TVA. VIES répond "valide", mais le nom et l’adresse renvoyés ne correspondent pas à la commande. Lorsque VIES renvoie les coordonnées enregistrées de l’entreprise, comparez-les avec la société et l’adresse de la commande avant d’exonérer. Une discordance doit déclencher une revue, pas une exonération automatique.

Déclaration européenne de services ou d’échanges intracommunautaires. Les ventes en autoliquidation doivent être déclarées à votre administration fiscale dans un état récapitulatif européen (généralement trimestriel). Cela suppose de suivre quelles commandes ont été exonérées et pour qui, une bonne raison de conserver la décision d’exonération comme donnée structurée de commande, et non comme simple note libre.

Tenue des registres : prouvez que vous avez vérifié

L’exonération n’est défendable que si vous pouvez montrer que vous avez vérifié le numéro au moment de la vente. Pour chaque commande exonérée, stockez : le numéro de TVA, l’horodatage de validation, la réponse VIES brute (valide/invalide plus tout nom/adresse renvoyé) et la commande concernée. Les durées de conservation varient selon les États membres, souvent plusieurs années, parfois jusqu’à dix, donc vérifiez votre règle locale et gardez le journal aussi longtemps que nécessaire. Si une automatisation exonère la taxe mais ne journalise rien, vous avez automatisé un problème d’audit.

Questions fréquentes

PrestaShop valide-t-il les numéros de TVA auprès de VIES par défaut ?

Non. Le cœur stocke le vat_number sur l’adresse et peut appliquer des contrôles de format légers, mais il n’appelle jamais VIES et ne remet jamais la TVA à zéro parce qu’un numéro a été saisi. Ce pont, validation VIES en direct plus exonération déclenchée par cette validation, est précisément le vide qu’un module comme Automatic EU VAT Checker vient combler. Sans cela, un numéro saisi n’est qu’un texte imprimé sur la facture.

VIES était indisponible lorsque mon client a passé commande. Que doit-il se passer ?

La commande doit être acceptée avec TVA facturée, signalée pour une revérification manuelle, et jamais bloquée. Une panne VIES (un SoapFault dans le code ci-dessus) est une défaillance côté administration, pas un client invalide ; la traiter comme un "rejet" vous fait perdre une vente légitime. Une fois VIES rétabli, vous revérifiez et, si le numéro est confirmé, vous appliquez l’exonération rétroactivement. La règle pratique : une exonération récupérable vaut toujours mieux qu’un panier abandonné.

Un client de mon propre pays a saisi un numéro de TVA valide, dois-je l’exonérer ?

Non. L’autoliquidation est strictement intracommunautaire et transfrontalière. Une entreprise allemande qui achète auprès d’une boutique allemande paie la TVA allemande complète, même avec un numéro parfaitement valide. Toute automatisation qui exonère sur le seul critère "valide" est fausse ici. Le contrôle de différence de pays est une deuxième condition obligatoire, et c’est celle que les configurations naïves oublient.

Qu’en est-il des numéros de TVA britanniques et nord-irlandais ?

L’Irlande du Nord (numéros préfixés par XI) reste dans le système TVA de l’UE pour les biens et se valide via VIES, traitez XI comme dans le périmètre. Le reste de la Grande-Bretagne (numéros GB) est un pays tiers et sort entièrement du mécanisme d’autoliquidation ; VIES ne validera pas un numéro GB à cette fin. Votre validation doit distinguer les deux, ce qu’une table de regex codée en dur finit généralement par mal faire avec le temps.

Puis-je simplement placer les clients exonérés de TVA dans un groupe à prix HT et considérer que c’est terminé ?

Cela gère l’affichage, le client voit des prix HT, mais un groupe ne remet pas à zéro la TVA réellement facturée. PrestaShop calcule la taxe à partir de la règle de taxe du produit et de l’adresse de livraison, pas de l’appartenance à un groupe. Il vous faut donc les deux : le groupe pour l’affichage HT, et un chemin fiscal conforme à 0 % fondé sur l’adresse et le numéro vérifié pour l’exonération légale. Confondre "affiche du HT" avec "est exonéré" est l’erreur de configuration la plus courante sur tout ce sujet.

Comment mypresta.rocks s’intègre dans ce flux

Le vide laissé par PrestaShop, un champ TVA enregistré, mais que personne ne vérifie auprès de VIES, est exactement le type de problème qu’un module ciblé peut résoudre sans forker votre moteur fiscal ni votre thème. Le module Automatic EU VAT Checker valide les numéros à l’inscription et au paiement, encode la condition transfrontalière (il n’exonère donc jamais un acheteur du même pays), se dégrade proprement lorsque VIES est indisponible, et conserve le journal de validation demandé lors d’un contrôle. Le bénéfice est double : le client ressent un feu vert instantané lorsque son numéro est confirmé et voit des prix HT apparaître immédiatement plutôt que de s’inverser à la dernière étape ; vous obtenez des exonérations qui se déclenchent automatiquement sur l’enregistrement VIES en direct, une ligne d’autoliquidation qui arrive sur la facture sans modification manuelle, et un journal de validation stocké si votre administration fiscale le demande un jour. Comme la bonne implémentation place les clients vérifiés dans un groupe B2B/TVA vérifiée dédié pour l’affichage HT et l’accès, tout en ajoutant la logique de module nécessaire à l’exonération légale, plutôt que de réécrire les calculs de taxe, elle s’appuie sur le moteur de prix de la plateforme pour l’affichage et résiste aux mises à jour. Si vous mettez en place le B2B depuis zéro, commencez par l’aperçu vendre en B2B sur PrestaShop, puis ajoutez les prix HT, l’affectation aux groupes et, si vous proposez des comptes, les conditions de paiement différé sur la base de clients vérifiés fournie par cette automatisation.

Le principe sous-jacent est simple : un numéro de TVA n’est pas une case à cocher, c’est une déclaration sur laquelle vous choisissez légalement d’agir. Automatiser l’exonération vaut justement la peine parce que la version manuelle, vérifier les numéros à l’œil, retoucher les factures, se souvenir de la règle du même pays à 18 h un vendredi, est l’endroit où naissent les erreurs coûteuses. Laissez VIES faire autorité, laissez le moteur de groupes de PrestaShop gérer les prix, et conservez le journal qui prouve que vous avez fait les choses correctement.

David Miller

David Miller

Fondateur, mypresta.rocks
À propos de l’auteur

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 159 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 : 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.

Partager cet article:

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