Skip to Content
Accords-cadresImporter un BPU

Importer un BPU

Disponibilité — « Accords-cadres & BPU » est une brique activable de Stratt. Sa présence dans votre espace dépend de l'offre souscrite par votre organisation : l'entrée correspondante peut apparaître grisée et cadenassée dans le menu, ou ne pas y figurer.

Pour savoir ce dont vous disposez, ouvrez Paramètres → Modules : la liste des modules activés y figure. Les activations sont faites par l'équipe Stratt selon votre abonnement ; une demande d'extension passe par le support.

Un bordereau se saisit rarement ligne à ligne : il arrive en classeur, et il revient en classeur à chaque révision annuelle des prix. Deux chemins le font entrer dans Stratt, et ils ne servent pas le même cas.

CheminQuand
Importer le bordereaule bordereau est déjà négocié — reprise de l’existant
Reprendre les prixles prix reviennent d’un envoi fait depuis l’outil

Le premier est décrit ci-dessous ; le second, qui repart du modèle vierge, est traité en fin de page.

Le fichier attendu

Le classeur est lu au format .xlsx, et seule sa première feuille est analysée. La taille est bornée à 20 Mio : un BPU de fournitures atteint couramment quinze mille lignes, au-delà on est face à autre chose qu’un bordereau.

Aucune mise en forme n’est exigée. En particulier :

  • la ligne d’en-tête n’a pas à être la première. Les bordereaux commencent souvent par un cartouche de plusieurs lignes, et Stratt cherche parmi les premières rangées celle qui reconnaît le plus d’intitulés de colonnes ;
  • l’ordre des colonnes est libre, et les colonnes inutiles peuvent rester ;
  • les rangées entièrement vides sont ignorées — elles ne comptent ni comme importées ni comme rejetées.

Les trois étapes

Fichier

Le classeur est déposé, lu, et rien n’est écrit. Stratt rend le nombre de lignes détectées, la ligne d’en-tête retenue et une proposition d’association pour chaque colonne.

Colonnes

L’étape qui évite les accidents. Chaque champ de Stratt est mis en face d’une colonne du fichier, désignée par sa lettre de tableur et son intitulé — D · Désignation — pour qu’on puisse comparer avec le fichier ouvert à côté. Un aperçu des dix premières lignes montre ce que chaque association produit : c’est là qu’on voit qu’on a pris la colonne des prix TTC pour celle des prix HT.

La proposition automatique est un point de départ, jamais une décision. La détection sur intitulés ne peut pas être fiable sur des bordereaux dont chacun nomme ses colonnes à sa façon.

Rapport

Les lignes valides sont créées. Le rapport annonce « N ligne(s) importée(s) sur M » et liste les lignes rejetées, avec leur numéro dans le fichier et le motif du rejet.

Les colonnes

Deux colonnes seulement sont obligatoires. Le bouton d’import reste inactif tant qu’elles ne sont pas associées.

ChampObligatoireSi la colonne est absente
N° de lotle lot reste vide
Intitulé du lot
Référence de la ligne
Désignationoui
Unité
Prix unitaire HToui
Taux de TVA20 % si absent
Date de valeurdate de début du marché si absente
Code nomenclaturerelie la ligne à la famille d’achat

Ce que la détection reconnaît

Les intitulés sont comparés sans tenir compte de la casse, des accents ni de la ponctuation : « Prix unitaire H.T. », « PRIX UNITAIRE HT » et « prix_unitaire_ht » désignent la même colonne. Quelques formulations courantes sont rattachées d’office au bon champ — « PU HT », « Libellé », « Prestation », « N° lot », « Taux de TVA », « Code famille »…

La détection privilégie l’intitulé le plus précis : « Code nomenclature » n’est pas confondu avec un simple « Code ».

Elle peut néanmoins hésiter quand deux colonnes prétendent au même champ — un bordereau portant à la fois un prix HT et un prix TTC, par exemple. Elle tranche alors seule, et c’est précisément ce que l’étape Colonnes sert à démentir : relisez-y l’association proposée avant de confirmer, surtout sur les prix. Une colonne mal associée ne produit pas d’erreur, elle produit un bordereau faux.

Les montants et les dates

La lecture d’un prix accepte les conventions française et anglo-saxonne, mélangées au besoin dans un même fichier :

CelluleValeur lue
12,5012,50
12.5012,50
1 234,561 234,56
1,234.561 234,56
85 €85

Une date est acceptée en AAAA-MM-JJ, JJ/MM/AAAA, JJ-MM-AAAA, et sous la forme du numéro de série des tableurs — ce nombre à cinq chiffres qu’on obtient en recopiant une cellule de date dans une colonne au format texte.

Le code de nomenclature

C’est la colonne qui fait apparaître l’accord-cadre dans l’encart « Prix déjà négociés sur cette famille » d’une fiche de nomenclature, et qui rend utilisable la recherche par famille d’achat. Elle vaut le détour, même quand elle demande un travail de reprise.

Les codes sont comparés sur leur forme réduite aux lettres et aux chiffres : 60.12, 6012 et 60-12 sont le même code. Deux précisions :

  • un code inconnu ne rejette pas la ligne. Le prix compte davantage que le rattachement, qui se corrige après coup ;
  • un code porté par deux familles est ignoré plutôt qu’arbitré : rattacher à la mauvaise famille fausserait les montants agrégés qui servent au calcul des seuils de procédure.

Les lignes rejetées

Une ligne est refusée pour l’un de ces motifs, et pour aucun autre :

MotifCause
désignation videla cellule de désignation est vide
prix unitaire HT manquantla cellule de prix est vide
prix unitaire HT illisiblela cellule ne contient pas un nombre lisible
prix unitaire HT négatifle prix lu est inférieur à zéro

Tout le reste passe. Un taux de TVA illisible ne rejette pas la ligne : 20 % est appliqué, parce que perdre un bordereau entier pour une cellule de TVA mal saisie serait disproportionné. Une date de valeur illisible ne le rejette pas non plus : la date de début du marché est appliquée.

Le succès partiel est voulu. Contrairement à la saisie par lot, qui est atomique, l’import accepte d’écrire les lignes valides et de rendre la liste des autres. Sur un bordereau de cinq mille lignes, refuser l’ensemble parce que trois cellules de prix sont vides obligerait à corriger le classeur à l’aveugle. Les numéros du rapport renvoient au fichier d’origine : on corrige ces lignes, et on réimporte un classeur qui ne contient qu’elles.

Réimporter : ce qu’il faut savoir avant

L’import n’écrase rien et ne déduplique rien. Chaque passage ajoute ses lignes au bordereau. Importer deux fois le même classeur produit deux exemplaires de chaque prestation, et la Recherche BPU les montrera tous les deux, au même prix et à la même date. Rien ne le signale au moment de l’import.

La conséquence pratique est qu’une révision annuelle de prix ne se traite pas en réimportant par-dessus. Deux manières de faire :

  • désactiver les lignes de l’année précédente — elles sortent du catalogue tout en restant citées par les estimations et la consommation — puis importer le nouveau bordereau ;
  • ou n’importer que les lignes nouvelles, et corriger les prix existants à la main ou par l’export.

L’export du bordereau aide ici : son classeur porte exactement les colonnes que la détection d’import reconnaît, plus une colonne Consommation (HT) par ligne. Un export corrigé dans un tableur se mappe donc tout seul au réimport — en gardant en tête qu’il ajoutera les lignes plutôt que de remplacer celles d’origine.

Enregistrer le mappage

Un BPU se réimporte à chaque révision des prix, avec la même structure de colonnes. Refaire l’association de douze colonnes à chaque livraison du même fournisseur est le genre de corvée qui fait abandonner un outil.

À l’étape Colonnes, un champ permet donc de nommer le mappage et de l’enregistrer une fois l’association complète. Le mappage retient l’association colonne par colonne et la ligne d’en-tête retenue. Il est rattaché au titulaire de l’accord-cadre, ce qui permet de le proposer d’emblée au prochain import d’un marché ayant le même titulaire : l’étape Fichier annonce alors combien de mappages existent, et l’étape Colonnes les présente en boutons, à appliquer d’un clic.

Les mappages sont propres à l’organisation.

Reprendre les prix d’un envoi

Quand le bordereau vierge a été produit par Stratt, envoyé, puis déposé complété sur l’envoi, le bouton Reprendre les prix lit le classeur et crée les lignes chiffrées du bordereau à partir du modèle et des prix reçus. L’envoi passe alors à l’étape Prix saisis, et l’opération est consignée dans son historique.

Ce chemin ne demande aucun mappage, parce qu’il ne devine rien. Le bordereau vierge exporté porte trois colonnes techniques masquées, dont un identifiant de ligne, et c’est sur lui que le rapprochement se fait. Rapprocher sur la désignation reviendrait à rapprocher sur du texte qu’un tiers peut reformuler, réordonner ou traduire : un « m² » devenu « m2 » suffirait à perdre une ligne.

D’où le comportement en cas de problème :

  • si la colonne technique a disparu — une entreprise qui recompose le fichier au lieu de remplir celui qu’on lui a envoyé — la reprise est refusée, avec un message qui dit de renvoyer le bordereau vierge. Deviner à partir des désignations produirait des prix attribués aux mauvaises prestations, et un bordereau faux est pire que pas de bordereau ;
  • une ligne dont l’identifiant ne provient pas du modèle envoyé est rejetée, le motif évoquant une version différente ;
  • une prestation laissée sans prix n’est pas une erreur : une entreprise a le droit de ne pas répondre sur tout le bordereau. Elle est comptée comme ignorée, pour que le total reste rapprochable ;
  • un prix illisible ou négatif rejette la ligne, comme à l’import de classeur.

Si le bordereau porte déjà des lignes actives, la reprise est refusée et propose de remplacer : les lignes en place sont alors désactivées — jamais supprimées, puisque les estimations et les consommations les citent — avant que les nouvelles soient créées. Sans ce garde-fou, reprendre deux offres concurrentes empilerait deux prix pour la même prestation, et la Recherche BPU en montrerait un au hasard.

La date de valeur des prix repris est celle de la date limite de l’envoi, à défaut celle de sa création. Réimporter le même fichier six mois plus tard ne doit pas rajeunir le prix.

Permissions requises

procurement.write pour toutes les opérations de cette page — aperçu, confirmation, enregistrement d’un mappage, reprise des prix d’un envoi. La consultation d’un bordereau et son export relèvent de procurement.read.

Limites connues

  • Aucune déduplication. Voir l’encart ci-dessus : c’est la première cause d’un bordereau en double.
  • Pas d’aperçu comparatif. L’import de BPU montre le contenu du fichier, pas le différentiel avec le bordereau existant — contrairement à l’import de nomenclature, qui annonce ce qui serait créé, modifié ou supprimé.
  • Le sélecteur de fichier est plus permissif que le lecteur. Il laisse choisir d’autres extensions de tableur, mais seul le .xlsx est analysé : un .xls ancien, un .csv ou un .ods produit une erreur de lecture au dépôt. Un « Enregistrer sous… » au format .xlsx règle le cas.
  • Un seul onglet lu. Un bordereau réparti sur plusieurs feuilles doit être importé feuille par feuille, en déplaçant chaque fois celle qui compte en première position.
  • Le fichier n’est pas conservé entre l’aperçu et la confirmation : le classeur est renvoyé à la seconde étape. Quitter la fenêtre en cours de route oblige à redéposer le fichier.
  • Pas de registre des imports propre au module : le rapport s’affiche une fois, et n’est pas rejouable après fermeture de la fenêtre.