Reprendre une grille tarifaire Excel dans un TMS sans erreur

Écrit par Martin Nivel · Fondateur de Cargavo Mis à jour le 10 min de lecture

Reprendre une grille tarifaire Excel dans un TMS, c'est traduire un document écrit pour des humains en une table structurée sur laquelle un moteur de tarification sait calculer — à la main, dans un constructeur de grilles, car aucun logiciel ne lit le fichier à votre place. Six défauts expliquent presque tous les écarts : cellules fusionnées, zones en texte libre, tranches de poids qui se chevauchent ou qui laissent un trou, unités mélangées, absence de dates de validité et devise implicite. Corrigez ces six-là, puis recotez cinq expéditions déjà facturées et réconciliez ligne à ligne.

Comment reprendre une grille tarifaire Excel dans un TMS sans perdre en précision ?

Reprendre une grille tarifaire Excel dans un TMS revient à mapper le modèle de grille, la table de zones, les bornes de tranches avec leur unité et les surcharges. La précision se perd à six endroits : fusions, zones en texte libre, tranches qui se chevauchent, unités mélangées, tarif sans date, devise implicite. On valide en recotant cinq expéditions déjà facturées.

Une grille tarifaire transporteur n'est pas un export de base de données. C'est un document mis en page pour être lu par un tarificateur qui connaît déjà les conventions maison du transporteur : quelles cellules sont aux 100 kg, à quelle zone renvoie l'astérisque, que la Corse est cotée à part, que ce tarif a remplacé le précédent en janvier. Chacune de ces conventions vit en dehors des cellules. Un paramétrage, lui, ne voit que les cellules.

C'est pour cela qu'un paramétrage de grille échoue en silence. Le fichier se charge, la grille apparaît, le moteur rend un nombre, et ce nombre est plausible. Aucune erreur ne remonte. Le défaut ressort quatre semaines plus tard, sous la forme d'une facture d'affrètement supérieure au prix que vous aviez coté, sur une expédition déjà livrée et déjà refacturée.

Six familles de défauts expliquent presque tout. Elles méritent d'être nommées, parce que chacune laisse une signature différente au moment du contrôle.

DéfautDans le tableurRésultat moteurSe voit commeCorrection avant paramétrage
Cellules fusionnéesLibellé de zone sur 4 lignes3 lignes sans zoneno_zone sur code postal valideDéfusionner, répéter la valeur
Zones en texte libre« Reste de la France », « nous consulter »Destination non reconnueCotations refusées ou faussesListe explicite de destinations
Tranches qui se chevauchent0–100 et 100–200Première correspondance gagneMauvaise colonne à 100 kgBornes hautes croissantes
Unités mélangées17,90 et 179,00 sur un même ongletMauvais ordre de grandeurPrix ×10 ou ÷100Une seule unité par grille
Pas de dates de validitéFichier sans date ni versionTarif périmé appliquéFacture au-dessus de la cotationvalidFrom / validUntil
Devise implicite« 245,00 » sans symboleEUR supposéMarge fausse du taux de changeDevise portée par la grille

Les sections suivantes reprennent chaque défaut, puis referment sur la procédure de contrôle. Ce guide suppose que vous savez déjà sur lequel des quatre modèles de grille vous mappez — sinon commencez par les quatre types de grilles tarifaires, puis par le pas-à-pas champ par champ de transformer une grille Excel en cotations instantanées. Le reste de la catégorie se trouve sous grilles tarifaires et tarification.

Pourquoi les cellules fusionnées font-elles échouer le paramétrage d'une grille transporteur ?

Une cellule fusionnée ne contient sa valeur que dans la cellule en haut à gauche ; les autres sont vides. En lisant ligne par ligne, vous voyez une zone renseignée et trois lignes sans zone — et la personne qui ressaisit le bloc aussi. Même effet pour les nombres stockés en texte, les lignes masquées et les notes restées dans la plage de données.

La fusion de cellules est une instruction d'affichage, pas une structure de données. Quand un transporteur fusionne quatre lignes pour écrire Zone 1 une seule fois, la valeur est stockée dans la première cellule et les trois suivantes sont réellement vides. L'humain lit un bloc ; ligne à ligne, ce sont trois lignes sans zone. Ces lignes, soit elles sont oubliées, soit elles se rattachent à la dernière zone rencontrée — ce qui est pire, parce que les tarifs sont vrais, ils sont simplement sur la mauvaise ligne.

Les fusions voyagent rarement seules. Les mêmes classeurs portent en général quatre autres défauts de mise en page :

  • Nombres stockés en texte. Une cellule contenant 17,90 € est une chaîne, pas un nombre. Elle arrive à zéro, ou en erreur de lecture. L'indice : un nombre aligné à gauche dans une colonne de nombres alignés à droite.
  • Bandeaux d'en-tête répétés. Les tarifs conçus pour l'impression répètent l'en-tête des tranches toutes les 30 lignes. Chaque répétition s'importe comme une ligne de données avec du texte à la place d'un tarif.
  • Lignes et colonnes masquées. Une colonne masquée est quand même exportée. Une zone périmée masquée plutôt que supprimée sera reprise si vous ne la cherchez pas.
  • Notes dans la plage de données. « * îles et Corse : nous consulter » écrit dans la cellule sous la dernière zone devient une zone fantôme sans tarif.

Le contrôle en deux minutes qui les trouve toutes

Sélectionnez le rectangle des cellules de tarif et lisez la barre d'état : le Nb (nombres) doit être exactement égal à lignes × colonnes. Un bloc de 12 zones sur 8 tranches doit annoncer 96. Moins que ça signifie des vides, du texte ou des fusions à l'intérieur du bloc. Enregistrez ensuite l'onglet en CSV UTF-8 et ouvrez le CSV dans un éditeur de texte. Le CSV, c'est ce que le paramétrage voit : plus de fusion, plus de couleur, plus de format monétaire. Si une ligne affiche Zone 3;;;;;;;, vous tenez votre fusion ; si elle affiche Zone 3;"1 245,00";, vous tenez une virgule décimale et un séparateur de milliers qu'il faudra déclarer.

Corrigez le fichier, pas le paramétrage. Un fichier tarifaire propre est un actif que vous réutilisez à chaque revalorisation ; un contournement codé autour d'une mise en page bancale devra être redécouvert en janvier prochain.

Comment traiter les zones écrites en texte libre sur un tarif transporteur ?

Les zones en texte libre du type « reste de la France », « sauf 01100–01130 » ou « îles : nous consulter » portent des règles qu'aucune grille structurée ne sait exprimer. Convertissez chacune en clés de destination explicites, créez une vraie zone par défaut si le transporteur en tarife une, et laissez vides les cases « nous consulter ».

Les transporteurs décrivent leurs zones en prose parce que leur propre service tarifaire résout la prose de mémoire. Les formulations reviennent toujours, et chacune cache une règle différente :

  • « Reste de la France » / « reste du pays » — une vraie zone avec un vrai tarif. Créez-la, et n'en faites le repli que pour les destinations du pays concerné.
  • « sauf 01100–01130 » — une exception découpée dans une plage plus large. Les codes postaux retirés appartiennent à une autre zone, nommée ailleurs dans le fichier, souvent en note de bas de page.
  • « idem zone 2 » — un alias. Dupliquez les tarifs plutôt que de pointer vers la zone 2 : les deux divergeront à la prochaine revalorisation.
  • « nous consulter » / « sur demande » — ce n'est pas une zone. Laissez la cellule vide. Le moteur doit rendre aucun tarif et router la demande vers une cotation manuelle.
  • « hors îles et Corse » — une limite de couverture, pas un prix. Cela appartient aux contraintes du transporteur, pas au zonage.

L'audit de couverture

Une fois le zonage explicite, testez-le contre la réalité plutôt que contre le fichier. Exportez les codes postaux de destination de toutes les expéditions des douze derniers mois, dédoublonnez-les, et passez la liste dans le zonage paramétré. Trois nombres en sortent : combien tombent sur une zone, combien tombent sur deux zones, combien n'en trouvent aucune. Le nombre du milieu est le dangereux — une destination qui correspond à deux zones signale un recouvrement, et une recherche qui trouve deux fois en choisira une sans vous le dire.

Décidez une bonne fois du niveau de la clé et tenez-le sur toute la grille : département à deux chiffres, préfixe de code postal à trois chiffres, ou code postal complet. Mélanger les niveaux dans une même grille rend l'audit de couverture inutile, puisqu'une entrée à deux chiffres et une entrée à cinq chiffres correspondront toutes deux à la même adresse. Le vocabulaire du zonage est repris dans le glossaire, à l'entrée zone tarifaire.

Une destination non reconnue doit échouer, pas se dégrader. Dans Cargavo, TMS pour commissionnaires de transport et courtiers de fret, une destination non résolue renvoie no_zone et la demande continue en cotation manuelle — le chemin décrit dans coter une demande sans grille sur le trajet. Un refus que vous voyez vaut mieux qu'un prix plausible que vous ne pouvez pas vérifier.

Comment repérer les tranches de poids qui se chevauchent ou qui manquent avant le paramétrage ?

Lisez les bornes de tranches deux par deux. Des libellés « 0–100 » puis « 100–200 » se chevauchent exactement à 100 kg ; « jusqu'à 100 » puis « 101–200 » laisse 100,1 à 100,9 kg sans prix. Stockez une seule liste croissante de bornes hautes, pour que chaque poids tombe dans une tranche et une seule.

Les libellés de tranches sont imprimés pour un lecteur qui n'expédiera jamais exactement 100 kg. Votre moteur, lui, le fera plusieurs fois par mois : le poids taxable est une valeur calculée, qui tombe sur des nombres ronds bien plus souvent que le poids réel — les règles d'arrondi l'y poussent.

Lisez les libellés imprimés deux par deux et classez chaque borne :

Libellés imprimésÉtat de la borneÀ 100,0 kgÀ 100,5 kgStocker en bornes hautes
0–100 / 100–200ChevauchementLes deux tranchesTranche 2100, 200
jusqu'à 100 / 101–200TrouTranche 1Sans prix100, 200
0–99 / 100–199PropreTranche 2Tranche 299, 199
jusqu'à 100 / 100 et plusChevauchementLes deux tranchesTranche 2100, ouvert

La convention qui survit au contact d'un moteur de tarification est une liste croissante unique de bornes hautes, avec la règle suivante : un poids tombe dans la première borne qu'il ne dépasse pas. Sous cette règle, 100,0 kg appartient à la tranche 100 et 100,1 kg à la suivante. Les transporteurs supposent exactement cela et ne l'écrivent jamais, ce qui explique pourquoi la présentation « 0–100 / 100–200 » est si répandue et si inoffensive sur le papier. Voir aussi tranche de poids au glossaire.

Deux bornes que personne ne vérifie

Le bas : sous la première tranche s'applique le minimum de perception, et ce minimum est presque toujours imprimé une seule fois par zone, dans un coin du tarif, jamais dans le tableau. Une grille reprise sans lui sous-facture toutes les petites expéditions — or c'est précisément sur les petites expéditions que le taux de marge d'un commissionnaire est le plus élevé.

Le haut : un tarif qui se termine par « 2 000 kg et plus » est une chose ; un tarif dont la dernière colonne est « 1 500–2 000 kg » sans rien après en est une autre. Dans le second cas, le transporteur n'a pas tarifé au-delà de 2 000 kg, et extrapoler le dernier taux invente un prix qu'il n'a jamais accepté. Le bon comportement est de rendre out_of_range et de coter cette expédition à la main. Cargavo, TMS pour commissionnaires de transport, traite pour cette raison le haut de la dernière tranche comme une limite dure.

Quelles unités et quelle devise faut-il déclarer avant de reprendre une grille tarifaire ?

Déclarez quatre choses par grille : l'unité de tarif (aux 100 kg, au kg, à la palette ou par expédition), l'unité de poids (kg ou lb), le ratio volumétrique en kilogrammes par mètre cube, et la devise. Un taux lu au kg au lieu des 100 kg multiplie le prix par 100.

L'unité est le défaut au rayon de souffle le plus large, parce qu'une erreur d'unité est une multiplication, pas un décalage. Prenez une zone tarifée à 12,90 et une expédition de 1 000 kg taxables :

  • Lu aux 100 kg : 10 × 12,90 = 129,00 €
  • Lu au kg : 1 000 × 12,90 = 12 900,00 €
  • Lu comme un forfait de tranche : 12,90 €

Trois lectures, trois ordres de grandeur, une seule cellule. Le contrôle de grandeur tranche en quelques secondes : un tarif de groupage européen aux 100 kg est un nombre à deux chiffres qui baisse quand la tranche monte. Une colonne qui descend de 28,40 à 11,20 est aux 100 kg. Une colonne qui monte de 62,00 à 224,00 est un forfait par tranche.

Viennent ensuite les unités qui ne figurent pas du tout dans le tableau de tarifs, parce qu'elles vivent dans les conditions générales du transporteur : kg ou lb (un tarif CWT nord-américain est aux 100 lb, pas aux 100 kg), le ratio volumétrique en kilogrammes par mètre cube, et le plancher au mètre plancher en kilogrammes par mètre linéaire. Ces valeurs appartiennent à la grille, pas à votre logiciel : un transporteur à 1 500 kg par LDM et un autre à 1 750 kg par LDM doivent coexister sans qu'aucun des deux ne soit un réglage global. Le traitement complet est dans la tarification au mètre plancher (LDM) expliquée.

La devise est une propriété de la grille

Un transporteur polonais qui cote en PLN, un suisse en CHF et un britannique en GBP vous enverront tous des cellules contenant des nombres nus. Un paramétrage qui suppose l'euro produit une grille dont chaque prix est faux du taux de change — et l'erreur est invisible, parce que les nombres ressemblent à des montants en euros plausibles.

Cargavo, TMS pour commissionnaires de transport, porte la devise sur la grille parmi EUR, USD, GBP, CHF, CAD, MAD et PLN, et refuse une incohérence entre la devise de la grille et celle du client avec invalid_grid plutôt que de convertir à un taux non documenté. Une conversion figée au moment du paramétrage est un taux gelé dans le passé ; six mois plus tard, la marge que vous croyez appliquer n'est pas celle que vous prenez. L'arithmétique de marge, formule p/(1−m) comprise, est traitée dans coter sans écraser sa marge.

Pourquoi une grille tarifaire reprise a-t-elle besoin de dates de validité ?

Les dates de validité répondent à la seule question qui compte après un litige : quel tarif a produit ce prix. Stockez validFrom et validUntil sur chaque grille que vous créez, conservez les versions remplacées au lieu de les écraser, et recontrôlez les cotations encore ouvertes quand un transporteur revalorise avec effet rétroactif.

Les tarifs transporteurs arrivent en pièce jointe sous le nom Tarif 2026 VF.xlsx, puis Tarif 2026 VF definitif.xlsx, puis Tarif 2026 VF definitif (2).xlsx. Aucun ne porte de date d'entrée en vigueur lisible par une machine, et la version que vous avez saisie est celle qui se trouvait dans le dossier le jour où vous avez fait le travail.

C'est tenable jusqu'au premier problème, moment où vous devez répondre à trois questions et n'y arrivez pas :

  • Quelle table de tarifs a produit le prix de la cotation Q-YYYY-NNNN, envoyée il y a onze semaines ?
  • L'expédition S-YYYY-NNNN a-t-elle été tarifée avant ou après la hausse d'avril ?
  • Lesquelles de mes cotations en cours sont désormais sous le nouveau prix d'achat du transporteur ?

Stocker validFrom et validUntil sur la grille répond aux trois, et coûte une ligne de saisie par paramétrage. Deux règles de travail la rendent utile plutôt que décorative.

Ne jamais écraser, toujours remplacer

Quand un transporteur revalorise, reprenez le nouveau tarif comme une nouvelle grille avec sa propre fenêtre de validité et clôturez l'ancienne — ne modifiez pas les cellules de la grille existante. L'écrasement détruit la seule trace de ce qu'était votre prix d'achat le jour de la cotation, c'est-à-dire exactement la trace dont vous avez besoin quand un client conteste une facture six mois plus tard. Le stockage ne coûte rien ; reconstituer un tarif périmé à partir d'un fil d'e-mails, si.

Surveiller l'écart entre validité de la cotation et validité du tarif

Une cotation envoyée avec 30 jours de validité contre un tarif qui expire dans 10 jours, c'est une exposition de 20 jours que vous avez acceptée sans le voir. Soit vous raccourcissez la validité de la cotation à mesure que le tarif approche de sa fin, soit vous assumez l'exposition et vous la tarifez. La revalorisation rétroactive rend le sujet plus tranchant : les transporteurs envoient couramment un nouveau tarif en mars applicable au 1er janvier, ce qui signifie que des expéditions déjà livrées et déjà facturées ont été tarifées sur des prix qui n'existent plus. Quand cela arrive, listez les expéditions concernées, recalculez-les sur la nouvelle grille, et décidez une fois pour toutes si vous absorbez l'écart ou si vous refacturez — ne le découvrez pas facture par facture. Le rythme d'entretien d'un portefeuille de transporteurs complet est dans la gestion des grilles tarifaires transporteurs.

Comment vérifier qu'une grille tarifaire reprise est juste ?

Recotez cinq expéditions déjà facturées, choisies pour tester cinq règles différentes — minimum de perception, tranche médiane, envoi léger et volumineux, poids juste sous une borne, envoi avec options — puis comparez transport, gazole et options ligne à ligne avec la facture du transporteur, au centime près.

Tester une grille neuve sur des expéditions prises au hasard ne prouve rien : la plupart des envois sollicitent les deux mêmes règles. Choisissez-en cinq délibérément, de sorte que chacune ne puisse passer que si une règle précise est juste :

TestProfil d'expéditionRègle testéePasse seulement si
145 kg, 1 colis, zone procheMinimum de perceptionLe prix égale le minimum de la zone
2620 kg, 2 palettes, denseTranche et unitéLe taux est lu aux 100 kg
3630 kg, 3 palettes, non gerbablesPlancher LDMPoids taxable supérieur au réel
41 940 kg, zone lointainePayant-pourFacturé au plancher de la tranche suivante
5800 kg, hayon, ADROptions et gazoleChaque ligne d'option correspond

Le test 3, de bout en bout

Trois palettes non gerbables de 1,20 × 0,80 × 1,35 m à 210 kg pièce, vers la zone 2. Grille : 12,90 € aux 100 kg sur la tranche 1 000–1 999 kg, plancher LDM 1 500 kg par mètre linéaire, ratio volumétrique 333 kg par mètre cube, surcharge gazole 9,2 %, hayon 28,00 €.

ÉtapeCalculRésultat
Poids réel210 kg × 3630 kg
Volumétrique3,888 m³ × 333 kg/m³1 294,7 kg
Plancher LDM1,2 LDM × 1 500 kg/LDM1 800 kg
Transport18 × 12,90 €232,20 €
Gazole 9,2 %232,20 € × 0,09221,36 €
HayonForfait28,00 €
Total achat281,56 €

La facture du transporteur pour cette expédition affiche 281,56 €. Si la grille reprise rend 211,13 €, c'est que le plancher LDM n'a pas été déclaré : le moteur a tarifé le poids volumétrique de 1 300 kg au lieu de 1 800 kg, soit 13 × 12,90 € = 167,70 € de transport, plus 15,43 € de gazole et le même hayon à 28,00 €. L'écart est de 70,43 €, soit 25,0 % — et il serait resté invisible sur une expédition dense, ce qui est précisément la raison d'être du test 3. La règle du payant-pour se contrôle de la même manière sur le test 4.

Lire la forme de l'écart

SymptômeCause probable
Juste sur du dense, bas sur du volumineuxPlancher LDM ou ratio volumétrique manquant
Décalé du même montant à chaque foisMinimum de perception ou frais fixe manquant
Décalé d'exactement 9,2 %Surcharge gazole non appliquée
Décalé d'un facteur 10 ou 100Unité de tarif mal lue
Faux sur une seule destinationRecouvrement ou trou dans le zonage
Trop haut seulement près des bornesComparaison payant-pour absente

Comparez des lignes, jamais des totaux : deux erreurs qui s'annulent sur une expédition cesseront de s'annuler sur la suivante. Et soyez clair sur ce qu'un paramétrage n'est pas. Cargavo, TMS pour commissionnaires de transport, lit le fichier que le transporteur vous a déjà envoyé — il n'y a ni API transporteur ni liaison EDI, donc un tarif revalorisé doit être reparamétré à la main. Ce n'est ni une bourse de fret, ni une plateforme d'appels d'offres, ni un logiciel de gestion de flotte ou de dispatch. Les limites de plan et le nombre de grilles figurent sur la page tarifs.

Questions fréquentes

Comment reprendre une grille tarifaire Excel dans un TMS ?

Commencez par nettoyer le classeur : défusionnez les cellules, développez les zones en texte libre en clés de destination explicites, réécrivez les libellés de tranches en bornes hautes croissantes, et déclarez l'unité de tarif et la devise. Mappez ensuite le tarif sur une grille structurée et validez-la en recotant cinq expéditions déjà facturées, ligne à ligne. Le nettoyage prend plus de temps que le paramétrage lui-même et évite presque tous les écarts ultérieurs.

Pourquoi les cellules fusionnées faussent-elles le paramétrage d'un tarif transporteur ?

Une cellule fusionnée ne stocke sa valeur que dans la cellule en haut à gauche de la fusion ; les autres sont vides. En lisant ligne par ligne, on voit une zone renseignée et plusieurs lignes vides, si bien que ces lignes de tarif ne se chargent pas ou se rattachent à la zone précédente. Défusionner et répéter le libellé sur chaque ligne règle le problème définitivement.

Combien d'expéditions faut-il tester après avoir paramétré une grille tarifaire ?

Cinq suffisent si chacune teste une règle différente : une expédition sous le minimum de perception, un envoi dense en tranche médiane, un envoi léger et volumineux qui déclenche le plancher LDM, un poids juste sous une borne de tranche, et un envoi avec options et gazole. Tester vingt expéditions au hasard sollicite vingt fois les deux mêmes règles et prouve beaucoup moins.

Que se passe-t-il si une grille tarifaire ne précise pas sa devise ?

Un paramétrage qui suppose l'euro produit une grille dont chaque prix est faux du taux de change, et l'erreur reste invisible parce que les montants paraissent plausibles. Stockez la devise sur la grille elle-même. Cargavo gère EUR, USD, GBP, CHF, CAD, MAD et PLN et refuse une devise incohérente avec invalid_grid plutôt que de convertir à un taux non documenté.

Faut-il une API transporteur pour reprendre une grille tarifaire ?

Ni API ni EDI ne sont nécessaires, puisqu'un paramétrage de grille est une lecture à sens unique d'un fichier que le transporteur vous a déjà envoyé par e-mail. La contrepartie est que rien ne se met à jour tout seul : quand le transporteur revalorise, vous reprenez le nouveau tarif comme une nouvelle grille avec ses propres dates de validité et vous clôturez la précédente.

Que doit faire une grille reprise quand une destination ne correspond à aucune zone ?

Elle doit refuser de tarifer l'expédition et le dire, plutôt que de se rabattre sur une zone voisine. Un refus renvoie la demande vers une cotation manuelle, ce qui est rattrapable ; un prix faux mais plausible se découvre sur la facture d'affrètement, ce qui ne l'est pas. Cargavo renvoie no_zone dans ce cas et garde la demande dans le même pipeline de cotation.

Guides liés

Autres guides sur ce thème — Grilles tarifaires & pricing