Skip to main content

Bon de commande d'entretien

Ce flux Power Automate automatise la gestion des demandes d'entretien de véhicules du Groupe Niort. Il couvre l'ensemble du processus, du déclenchement via un formulaire Microsoft Forms jusqu'à la génération et l'envoi du bon de commande PDF.

Vue d'ensemble du flux

flowchart TD
A[Déclencheur : Microsoft Forms] --> B[Obtenir les détails de la réponse]
B --> C[Obtenir le profil utilisateur V2]
C --> D[Initialisation des variables]
D --> E[Envoi de la demande d'approbation]
E --> F{Décision}
F -- Refus --> G[Envoi email de refus au demandeur]
F -- Acceptation --> H[Sélection de la template Word selon société]
H --> I[Remplissage du document Word]
I --> J[Conversion DOCX → PDF via Plumsail]
J --> K[Envoi email de validation avec PDF joint]
K --> L[Enregistrement dans Excel SharePoint]

1. Déclencheur

Type : Microsoft Forms — Quand une réponse est soumise

Le flux se déclenche à chaque nouvelle soumission du formulaire de demande d'entretien. Le formulaire collecte les informations suivantes :

Champ du formulaireIdentifiant interneDescription
Immatriculationr4fdfbd72880d47d28b2143fd478b41f3Plaque d'immatriculation du véhicule
Kilométragere160aaa8238d4f72a47e572724c4bf7eKilométrage actuel du véhicule
Type d'entretienre496ced402d641f497be99fec53dee17Entretien(s) souhaité(s) (choix multiple)
Nom du prestatairer108283b2f1954e969cca9ea62006b967Garage / prestataire choisi
Adresse du prestatairer28f16ab5cc144d8b926f67382baf39bcAdresse du garage
Email du répondantresponderEmail automatique de l'auteur du formulaire

2. Actions de récupération de données

Après déclenchement, le flux effectue deux appels :

  1. Obtenir les détails de la réponse — récupère les champs du formulaire.
  2. Obtenir le profil de l'utilisateur (V2) — interroge Microsoft Graph pour obtenir le profil Azure AD du répondant (displayName, companyName, department).

3. Variables initialisées

varAnnee

formatDateTime(utcNow(), 'yyyy')

Année en cours, utilisée pour l'archivage et horodatage des documents.


varDateDemande

formatDateTime(utcNow(), 'dd/MM/yyyy')

Date du jour au format français, insérée dans les documents générés.


varNumero

string(rand(10000, 99999))

Numéro aléatoire à 5 chiffres, base de la référence unique de la demande.


varSocieteBis

Détermine le nom normalisé de la société du demandeur, avec des corrections pour certains utilisateurs spécifiques :

ConditionValeur résultante
Jérémy ROCHE, Jean-François NIORT, Nicolas LE HER, Eliott TAILLEPIEDFINANCIERE NIORT
Charles-Henry CACHIATURBOS MOTEURS MIGNE
Sylvain SERENATURBOS MOTEURS MIGNE
companyName = NIORT FRERESNIORT FRERES DISTRIBUTION
companyName = Turbos MigneTURBOS MOTEURS MIGNE
AutresValeur brute de companyName

varServiceBis

Détermine le service normalisé du demandeur :

ConditionValeur résultante
Jérémy ROCHE, Jean-François NIORT, Nicolas LE HER, Eliott TAILLEPIEDFinancier
Charles-Henry CACHIADirection
Sylvain SERENADirection
AutresValeur brute de department

varReference

Référence unique générée par concaténation du numéro aléatoire et d'un code société :

concat(varNumero, <code société>)

Table des codes société :

SociétéCode
Financière Niort (utilisateurs spécifiques)FINA
Charles-Henry CACHIA / Sylvain SERENATMM
4BUS / AD FORTIAADF
DPANDPAN
NIORT FRERES DISTRIBUTIONNFD
MecatransMCT
NIORT FRERES POIDS LOURDSNFPL
NIORT FRERES SERVICESNFS
NDIGITALNDI
NTECHNTE
AutresNom de société brut

Exemple de référence générée : 47832NFD


varSiret

SIRET attribué en fonction de varSocieteBis :

SociétéSIRET
DPAN511 015 620 00012
NIORT FRERES DISTRIBUTION434 074 878 00159
AD FORTIA441 717 345 00017
Mecatrans514 270 875 00016
NDIGITAL892 351 065 00016
NIORT FRERES POIDS LOURDS979 825 924 00017
NIORT FRERES SERVICES880 035 712 00012
NTECH921 417 093 00017
FINANCIERE NIORT394 197 487 00017
TURBOS MOTEURS MIGNE308 530 492 00039

adresseSocieteNiort

Adresse du siège social de la société du demandeur :

SociétéAdresse
DPAN154 Avenue du Mont Riboudet
NIORT FRERES DISTRIBUTION154 Avenue du Mont Riboudet
AD FORTIA7 Rue de l'Ouest
Mecatrans11-13 Rue Coignebert
NDIGITAL158 Avenue du Mont Riboudet
NIORT FRERES POIDS LOURDSBoulevard Lénine
NIORT FRERES SERVICES154 Avenue du Mont Riboudet
NTECH8 Rue Pierre-Gilles de Gennes
FINANCIERE NIORT154 Avenue du Mont Riboudet
TURBOS MOTEURS MIGNE20 Av. des Frères Montgolfier

codePostalEntreprise

SociétéCode postal
DPAN76000
NIORT FRERES DISTRIBUTION76000
AD FORTIA78711
Mecatrans76000
NDIGITAL76000
NIORT FRERES POIDS LOURDS76800
NIORT FRERES SERVICES76000
NTECH76150
TURBOS MOTEURS MIGNE64140
FINANCIERE NIORT76000

villeEntreprise

SociétéVille
DPANRouen
NIORT FRERES DISTRIBUTIONRouen
AD FORTIAMantes-la-Ville
MecatransRouen
NDIGITALRouen
NIORT FRERES POIDS LOURDSSaint-Étienne-du-Rouvray
NIORT FRERES SERVICESRouen
NTECHSaint-Jean-du-Cardonnay
TURBOS MOTEURS MIGNELons
FINANCIERE NIORTRouen

varNomEntretien

Nettoie la valeur brute du champ "Type d'entretien" (issu d'une question à choix multiple dans Forms, qui renvoie un tableau JSON) :

replace(replace(replace(replace(
outputs('Obtenir_les_détails_de_la_réponse')?['body/re496ced402d641f497be99fec53dee17'],
'[', ''), ']', ''), '"', ''), ',', ', ')

Transforme par exemple ["Vidange","Freins"] en Vidange, Freins.


4. Approbation

Une demande d'approbation est envoyée aux approbateurs suivants :

ApprobateurEmail
Responsable flotte 1j-vanderhoeven@groupeniort.fr
Gestionnaire flottegestionnaire-flotte@niortfreres.fr
Responsable 2j-soudais@groupeniort.fr
Responsable 3e-taillepied@groupeniort.fr

La demande contient les informations clés : référence, immatriculation, kilométrage, type d'entretien, prestataire et demandeur.


5. Traitement selon la décision

5.1 En cas de refus

Un email HTML est envoyé au demandeur avec :

  • La référence de la demande
  • L'immatriculation et le kilométrage du véhicule
  • Le motif du refus (items('For_each_2')?['comments'] — issu du champ commentaire de l'approbateur)
  • Le rappel de la possibilité de déposer une nouvelle demande

Expéditeur apparent : Service Gestion de Flotte — gestionnaire-flotte@niortfreres.fr

Aperçu du template email de refus

En-tête rouge #c0392b · Contenu structuré en tableaux · Motif de refus mis en évidence · Signature Groupe Niort

Objet : Demande refusée — Bon de commande d'entretien

Le corps du message contient :

BlocContenu
Référence@{variables('varReference')}
Société@{outputs('Obtenir_le_profil_de_l''utilisateur_(V2)')?['body/companyName']}
Immatriculation@{body/r4fdfbd72880d47d28b2143fd478b41f3}
Kilométrage@{body/re160aaa8238d4f72a47e572724c4bf7e} km
Motif du refus@{items('For_each_2')?['comments']}
Voir le code HTML complet du template de refus
<div style="font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; max-width: 650px; margin: 0 auto; background-color: #ffffff; border: 2px solid #c0392b;">

<!-- En-tête -->
<div style="background-color: #c0392b; color: #ffffff; padding: 25px; text-align: center;">
<h1 style="margin: 0; font-size: 24px; font-weight: 600;">Demande refusée</h1>
<p style="margin: 8px 0 0 0; font-size: 16px;">Bon de commande d'entretien</p>
</div>

<!-- Contenu -->
<div style="padding: 30px; color: #2c3e50;">

<!-- Référence -->
<div style="background-color: #fdecea; border-left: 5px solid #c0392b; padding: 20px; margin-bottom: 25px;">
<h2 style="margin: 0 0 10px 0; color: #c0392b; font-size: 18px; font-weight: 600;">
Référence : @{variables('varReference')}
</h2>
<p style="margin: 0; font-size: 14px;">
Société : @{outputs('Obtenir_le_profil_de_l''utilisateur_(V2)')?['body/companyName']}
</p>
</div>

<!-- Véhicule -->
<h3 style="border-bottom: 2px solid #ecf0f1; padding-bottom: 10px; margin-bottom: 15px; font-size: 16px; font-weight: 600;">Véhicule</h3>

<table style="width: 100%; border-collapse: collapse; margin-bottom: 25px;">
<tbody>
<tr>
<td style="padding: 10px; font-weight: bold; width: 180px; background-color: #f8f9fa;">Immatriculation</td>
<td style="padding: 10px; background-color: #fff3cd; font-weight: bold;">
@{outputs('Obtenir_les_détails_de_la_réponse')?['body/r4fdfbd72880d47d28b2143fd478b41f3']}
</td>
</tr>
<tr>
<td style="padding: 10px; font-weight: bold; background-color: #f8f9fa;">Kilométrage</td>
<td style="padding: 10px;">
@{outputs('Obtenir_les_détails_de_la_réponse')?['body/re160aaa8238d4f72a47e572724c4bf7e']} km
</td>
</tr>
</tbody>
</table>

<!-- Motif du refus -->
<div style="background-color: #fff3f3; border: 1px solid #f5c6cb; padding: 20px; margin-bottom: 30px; border-radius: 6px;">
<h4 style="margin: 0 0 10px 0; color: #721c24; font-size: 16px; font-weight: 600;">
Motif du refus : @{items('For_each_2')?['comments']}
</h4>
</div>

<!-- Suite -->
<div style="background-color: #f8f9fa; border: 1px solid #dee2e6; border-radius: 6px; padding: 20px; margin-bottom: 30px;">
<h4 style="margin: 0 0 10px 0; color: #495057; font-size: 16px; font-weight: 600;">Suite de la demande</h4>
<p style="margin: 0; font-size: 14px; line-height: 1.6;">
Vous pouvez, si nécessaire, effectuer une nouvelle demande en tenant compte du motif indiqué ci-dessus.
Pour toute question, merci de contacter le service concerné.
</p>
</div>

<!-- Signature -->
<div style="margin: 30px 0 0 0; padding-top: 25px; border-top: 2px solid #e0e0e0;">
<table style="width: 100%; border-collapse: collapse;">
<tbody>
<tr>
<td style="vertical-align: top; padding-right: 20px; width: 60px;">
<img src="https://i.imgur.com/TSCMnwg.png" alt="Logo Groupe Niort" style="width: 50px; height: auto; display: block;">
</td>
<td style="vertical-align: middle; border-left: 3px solid #c0392b; padding-left: 20px;">
<p style="margin: 0 0 8px 0; font-size: 14px; color: #2c3e50; font-weight: 600;">Service Gestion de Flotte</p>
<p style="margin: 0 0 5px 0; font-size: 13px; color: #c0392b; font-weight: 500;">Groupe Niort</p>
<p style="margin: 0; font-size: 12px; color: #7f8c8d; line-height: 1.4;">gestionnaire-flotte@niortfreres.fr</p>
</td>
</tr>
</tbody>
</table>
<p style="margin: 20px 0 0 0; font-size: 13px; color: #555; font-style: italic;">Cordialement,</p>
</div>
</div>

<!-- Pied de page -->
<div style="background-color: #f8f9fa; padding: 15px 30px; border-top: 1px solid #e0e0e0; text-align: center;">
<p style="margin: 0; font-size: 12px; color: #95a5a6;">Message généré automatiquement - Ne pas répondre à cet email</p>
</div>
</div>

5.2 En cas d'acceptation

Le flux enchaîne les étapes suivantes :

  1. Sélection de la template Word adaptée à la société (une template par entité du groupe), disponibles dans SharePoint :
    https://niortfreresdistribution.sharepoint.com/sites/Traitementdesfactures
    Microsoft Word Desktop

Les templates sont au format .docx et doivent être éditées depuis Microsoft Word Desktop uniquement (la version en ligne ne supporte pas les fonctionnalités avancées utilisées). :::

  1. Remplissage du document avec les variables du flux (référence, société, SIRET, adresse, véhicule, prestataire, type d'entretien, date...).

  2. Conversion DOCX → PDF via l'API Plumsail Documents.

  3. Envoi d'un email de confirmation au demandeur avec le résumé complet + PDF en pièce jointe.

  4. Enregistrement dans le fichier Excel de suivi partagé sur SharePoint (Traitementdesfactures).

Aperçu du template email d'acceptation

En-tête sombre #2c3e50 · Résumé demandeur / véhicule / prestataire · PDF joint · Instructions prochaines étapes

Objet : Demande d'entretien validée — Bon de commande joint
BlocDonnées affichées
Référence@{variables('varReference')}
Date de demande@{variables('varDateDemande')}
Demandeur@{body/displayName}
Société@{variables('varsocietebis')}
Service@{variables('varservicebis')}
Email demandeur@{body/responder}
Immatriculation@{body/r4fdfbd72880d47d28b2143fd478b41f3}
Kilométrage@{body/re160aaa8238d4f72a47e572724c4bf7e} km
Prestataire@{body/r108283b2f1954e969cca9ea62006b967}
Adresse prestataire@{body/r28f16ab5cc144d8b926f67382baf39bc}
Type d'entretien@{variables('varnomentretien')}

Les prochaines étapes indiquées au demandeur :

  1. Prendre rendez-vous avec le prestataire
  2. Présenter le bon de commande PDF lors du passage
  3. Envoyer la facture à gestionnaire-flotte@niortfreres.fr
Voir le code HTML complet du template d'acceptation
<div style="font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; max-width: 650px; margin: 0 auto; background-color: #ffffff; border: 1px solid #e0e0e0;">

<!-- En-tête -->
<div style="background-color: #2c3e50; color: #ffffff; padding: 20px 30px;">
<h1 style="margin: 0; font-size: 20px; font-weight: 600;">Demande d'entretien validée</h1>
<p style="margin: 5px 0 0 0; font-size: 13px; color: #bdc3c7;">Bon de commande joint à ce message</p>
</div>

<!-- Contenu principal -->
<div style="padding: 30px; color: #333333; line-height: 1.6;">

<p style="margin: 0 0 10px 0; font-size: 15px; color: #2c3e50;"><strong>Bonjour,</strong></p>
<p style="margin: 0 0 25px 0; font-size: 14px; color: #333;">Votre demande d'entretien a été validée.</p>

<!-- Référence -->
<table style="width: 100%; border-collapse: collapse; margin-bottom: 25px; background-color: #f8f9fa; border: 1px solid #e0e0e0;">
<tbody>
<tr>
<td style="padding: 15px; border-right: 1px solid #e0e0e0; width: 140px; font-weight: 600; font-size: 13px; color: #555;">Référence</td>
<td style="padding: 15px; font-size: 15px; font-weight: 600; color: #2c3e50;">@{variables('varReference')}</td>
</tr>
<tr>
<td style="padding: 15px; border-right: 1px solid #e0e0e0; border-top: 1px solid #e0e0e0; font-weight: 600; font-size: 13px; color: #555;">Date de demande</td>
<td style="padding: 15px; border-top: 1px solid #e0e0e0; font-size: 14px; color: #333;">@{variables('varDateDemande')}</td>
</tr>
</tbody>
</table>

<!-- Demandeur -->
<h3 style="font-size: 15px; font-weight: 600; color: #2c3e50; margin: 0 0 12px 0; padding-bottom: 8px; border-bottom: 2px solid #ecf0f1;">Demandeur</h3>
<table style="width: 100%; border-collapse: collapse; margin-bottom: 25px;">
<tbody>
<tr>
<td style="padding: 10px 0; width: 140px; font-size: 13px; color: #666;">Nom / Prénom</td>
<td style="padding: 10px 0; font-size: 14px; color: #333;">@{outputs('Obtenir_le_profil_de_l''utilisateur_(V2)')?['body/displayName']}</td>
</tr>
<tr>
<td style="padding: 10px 0; font-size: 13px; color: #666;">Société</td>
<td style="padding: 10px 0; font-size: 14px; color: #333;">@{variables('varsocietebis')}</td>
</tr>
<tr>
<td style="padding: 10px 0; font-size: 13px; color: #666;">Service</td>
<td style="padding: 10px 0; font-size: 14px; color: #333;">@{variables('varservicebis')}</td>
</tr>
<tr>
<td style="padding: 10px 0; font-size: 13px; color: #666;">Email</td>
<td style="padding: 10px 0; font-size: 14px; color: #333;">@{outputs('Obtenir_les_détails_de_la_réponse')?['body/responder']}</td>
</tr>
</tbody>
</table>

<!-- Véhicule -->
<h3 style="font-size: 15px; font-weight: 600; color: #2c3e50; margin: 0 0 12px 0; padding-bottom: 8px; border-bottom: 2px solid #ecf0f1;">Véhicule</h3>
<table style="width: 100%; border-collapse: collapse; margin-bottom: 25px;">
<tbody>
<tr>
<td style="padding: 10px 0; width: 140px; font-size: 13px; color: #666;">Immatriculation</td>
<td style="padding: 10px 0; font-size: 14px; font-weight: 600; color: #2c3e50;">
@{outputs('Obtenir_les_détails_de_la_réponse')?['body/r4fdfbd72880d47d28b2143fd478b41f3']}
</td>
</tr>
<tr>
<td style="padding: 10px 0; font-size: 13px; color: #666;">Kilométrage</td>
<td style="padding: 10px 0; font-size: 14px; color: #333;">
@{outputs('Obtenir_les_détails_de_la_réponse')?['body/re160aaa8238d4f72a47e572724c4bf7e']} km
</td>
</tr>
</tbody>
</table>

<!-- Prestataire -->
<h3 style="font-size: 15px; font-weight: 600; color: #2c3e50; margin: 0 0 12px 0; padding-bottom: 8px; border-bottom: 2px solid #ecf0f1;">Prestataire</h3>
<table style="width: 100%; border-collapse: collapse; margin-bottom: 25px;">
<tbody>
<tr>
<td style="padding: 10px 0; width: 140px; font-size: 13px; color: #666;">Nom</td>
<td style="padding: 10px 0; font-size: 14px; color: #333;">
@{outputs('Obtenir_les_détails_de_la_réponse')?['body/r108283b2f1954e969cca9ea62006b967']}
</td>
</tr>
<tr>
<td style="padding: 10px 0; font-size: 13px; color: #666;">Adresse</td>
<td style="padding: 10px 0; font-size: 14px; color: #333;">
@{outputs('Obtenir_les_détails_de_la_réponse')?['body/r28f16ab5cc144d8b926f67382baf39bc']}
</td>
</tr>
</tbody>
</table>

<!-- Type d'entretien -->
<h3 style="font-size: 15px; font-weight: 600; color: #2c3e50; margin: 0 0 12px 0; padding-bottom: 8px; border-bottom: 2px solid #ecf0f1;">
Type d'entretien : @{variables('varnomentretien')}
</h3>

<!-- Document joint -->
<div style="background-color: #f8f9fa; border-left: 3px solid #3498db; padding: 15px; margin-bottom: 25px;">
<p style="margin: 0; font-size: 14px; color: #2c3e50;">
<strong>Document joint :</strong> Le bon de commande d'entretien est joint à ce message en format PDF.
Merci de le conserver et de le présenter lors de votre rendez-vous.
</p>
</div>

<!-- Instructions -->
<div style="background-color: #ffffff; border: 1px solid #e0e0e0; padding: 20px; margin-bottom: 25px;">
<p style="margin: 0 0 12px 0; font-size: 14px; font-weight: 600; color: #2c3e50;">Prochaines étapes :</p>
<ol style="margin: 0; padding-left: 20px; font-size: 14px; color: #555; line-height: 1.8;">
<li>Prenez rendez-vous avec le prestataire mentionné ci-dessus</li>
<li>Présentez le bon de commande joint lors de votre passage</li>
<li>Envoyez la facture à : <strong style="color: #2c3e50;">gestionnaire-flotte@niortfreres.fr</strong></li>
</ol>
</div>

<!-- Signature -->
<div style="margin: 30px 0 0 0; padding-top: 25px; border-top: 2px solid #e0e0e0;">
<table style="width: 100%; border-collapse: collapse;">
<tbody>
<tr>
<td style="vertical-align: top; padding-right: 20px; width: 60px;">
<img src="https://i.imgur.com/TSCMnwg.png" alt="Logo Groupe Niort" style="width: 50px; height: auto; display: block;">
</td>
<td style="vertical-align: middle; border-left: 3px solid #2c3e50; padding-left: 20px;">
<p style="margin: 0 0 8px 0; font-size: 14px; color: #2c3e50; font-weight: 600;">Service Gestion de Flotte</p>
<p style="margin: 0 0 5px 0; font-size: 13px; color: #3498db; font-weight: 500;">Groupe Niort</p>
<p style="margin: 0; font-size: 12px; color: #7f8c8d; line-height: 1.4;">gestionnaire-flotte@niortfreres.fr</p>
</td>
</tr>
</tbody>
</table>
<p style="margin: 20px 0 0 0; font-size: 13px; color: #555; font-style: italic;">Cordialement,</p>
</div>
</div>

<!-- Pied de page -->
<div style="background-color: #f8f9fa; padding: 15px 30px; border-top: 1px solid #e0e0e0; text-align: center;">
<p style="margin: 0; font-size: 12px; color: #95a5a6;">Message généré automatiquement - Ne pas répondre à cet email</p>
</div>
</div>

6. Templates Word et génération du PDF

Principe

Chaque entité du Groupe Niort dispose de sa propre template Word (.docx) pour le bon de commande d'entretien. Ces templates :

  • Sont stockées dans SharePoint : https://niortfreresdistribution.sharepoint.com/sites/Traitementdesfactures
  • Doivent être éditées depuis Microsoft Word Desktop uniquement (la version en ligne ne supporte pas les fonctionnalités avancées utilisées)
  • Contiennent des marqueurs de remplacement que Power Automate remplace par les valeurs des variables

Variables injectées dans la template

Marqueur dans le .docxVariable Power Automate
RéférencevarReference
DatevarDateDemande
SociétévarSocieteBis
SIRETvarSiret
AdresseadresseSocieteNiort
Code postalcodePostalEntreprise
VillevilleEntreprise
DemandeurdisplayName (profil Azure AD)
ServicevarServiceBis
Immatriculationchamp Forms
Kilométragechamp Forms
Prestatairechamp Forms
Adresse prestatairechamp Forms
Type d'entretienvarNomEntretien

Conversion DOCX → PDF

Le document Word rempli est converti en PDF via l'API Plumsail Documents.
Le connecteur Power Automate Plumsail reçoit le fichier .docx en binaire et retourne le PDF converti, qui est ensuite joint à l'email d'acceptation.


7. Ressources et dépendances

RessourceDescription
Microsoft FormsFormulaire de déclenchement des demandes
Microsoft Graph (Profil V2)Récupération du profil Azure AD du demandeur
SharePoint (Traitementdesfactures)Stockage Excel de suivi + templates Word .docx
Plumsail DocumentsAPI de conversion DOCX → PDF
Microsoft 365 MailEnvoi des emails de refus et d'acceptation
Power Automate ApprovalsCircuit d'approbation multi-approbateurs