Microsoft Forms : convertir chaque réponse en PDF et l’envoyer par e‑mail dynamique avec Power Automate

Automatisez l’envoi d’un PDF pour chaque réponse Microsoft Forms, adressé dynamiquement selon les données saisies ou l’e‑mail du répondant — sans connecteurs premium, en s’appuyant uniquement sur Power Automate, Word, OneDrive/SharePoint et Outlook.

Sommaire

Convertir automatiquement une réponse Microsoft Forms en PDF et l’envoyer à une adresse e‑mail variable

Vue d’ensemble de la question

Peut‑on prendre chaque réponse soumise à un Microsoft Form, la transformer automatiquement en PDF, puis l’envoyer par e‑mail à une adresse qui dépend des données de la réponse (adresse saisie dans le formulaire ou e‑mail du répondant) ?

Réponse & Solution

Oui, c’est possible avec Power Automate. La solution la plus robuste consiste à remplir un modèle Word avec les réponses, à le convertir en PDF, puis à l’envoyer par Outlook vers une adresse déterminée dynamiquement. Microsoft Forms ne génère pas de PDF par réponse en natif ; Power Automate joue donc le rôle d’orchestrateur entre Forms, Word/OneDrive (ou SharePoint) et Outlook.


Architecture de la solution

À chaque soumission :

  1. Forms déclenche le flux et expose les réponses.
  2. Word Online (Business) remplit un modèle .docx à partir des données.
  3. Word Online (Business) ou OneDrive for Business convertit le .docx en PDF.
  4. Outlook envoie l’e‑mail à l’adresse ciblée (variable).
  5. (Optionnel) SharePoint/OneDrive archive le PDF et journalise la traçabilité.
ÉtapeConnecteurActionSortie clé
DéclenchementMicrosoft FormsWhen a new response is submittedID de réponse, ID du formulaire
LectureMicrosoft FormsGet response detailsValeurs des questions, e‑mail du répondant (interne)
FusionWord Online (Business)Populate a Microsoft Word templateDocument .docx rempli
ConversionWord Online / OneDriveConvert Word Document to PDF / Convert fileContenu PDF (base64)
EnvoiOutlookSend an email (V2)Message avec PDF en pièce jointe
Archive (optionnel)SharePoint / OneDriveCreate file / Update fileFichier PDF stocké + lien

Procédure pas‑à‑pas (Power Automate)

Préparer le formulaire

  • Répondants internes (comptes Microsoft 365 de votre tenant) : activez “Enregistrer le nom” afin que Power Automate récupère automatiquement l’e‑mail du répondant (jeton dynamique généralement nommé Responder’s email).
  • Répondants externes : ajoutez une question “Adresse e‑mail du destinataire” (type Texte ou E‑mail). Cette valeur alimentera le champ À lors de l’envoi.
  • Bonnes pratiques : nommez explicitement vos questions (ex. Nom, Service, Site, CourrielDestinataire, Date de visite) pour les retrouver aisément dans Power Automate.

Créer un modèle Word (.docx)

  1. Stockez le modèle dans OneDrive Entreprise ou SharePoint.
  2. Dans Word, activez l’onglet Développeur puis insérez des contrôles de contenu (texte brut, texte enrichi, date, photo, éventuellement section répétée pour des listes).
  3. Donnez un Titre/Tag unique à chaque contrôle (ex. Nom, Q1, Q2, Score, DateSoumission). Ces libellés apparaîtront comme champs à renseigner dans l’action Populate a Microsoft Word template.
  4. Soignez la mise en page (logos, en‑têtes/pieds, styles, paragraphes, tableaux) exactement comme vous souhaitez que le PDF final apparaisse.

Exemple de correspondance (mapping)

Contrôle Word (Tag)Question Forms / SourceTypeRemarques
NomNom et prénomTexteAfficher dans l’en‑tête du PDF
CourrielResponder’s email ou CourrielDestinataireE‑mailUtilisé pour routage et contact
Q1Question 1Texte/QCMPour QCM multi‑sélection, formatez avec join()
DateSoumissionutcNow() (Power Automate)Date/heureFormatée côté flux (ex. formatDateTime(...))

Construire le flux Power Automate

  1. Déclencheur : Microsoft Forms – When a new response is submitted → sélectionnez le formulaire cible.
  2. Obtenir les détails : Microsoft Forms – Get response details → récupère toutes les réponses + l’e‑mail (si interne).
  3. Préparer des variables (optionnel mais recommandé) :
    • Initialize variable emailCible (String).
    • Set variable emailCible avec une expression fallback qui priorise l’adresse saisie dans le formulaire, puis l’e‑mail du répondant : coalesce( outputs('Get_response_details')?['body/AdresseEmailDuDestinataire'], outputs('Get_response_details')?['body/responderEmail'] ) Remplacez AdresseEmailDuDestinataire par l’ID/nom réel de la question.
    • (Optionnel) Compose nomFichierPdf pour construire un nom lisible : concat( 'Reponse-', outputs('Get_response_details')?['body/responseId'], '-', formatDateTime(utcNow(), 'yyyyMMdd-HHmmss'), '.pdf' )
  4. Fusion Word : Word Online (Business) – Populate a Microsoft Word template → pointez sur le modèle .docx et mappez chaque contrôle de contenu aux données dynamiques de Get response details.
    • QCM multi‑sélection : si la réponse arrive sous forme de tableau, utilisez join() pour l’afficher lisiblement : join(outputs('Get_response_details')?['body/Q2'], ', ')
    • Dates : si vous souhaitez un format localisé (ex. dd/MM/yyyy) : formatDateTime(utcNow(), 'dd/MM/yyyy')
  5. Conversion PDF (deux options équivalentes) :
    • Word Online (Business) – Convert Word Document to PDF (entrée : le contenu .docx généré)
    • ou OneDrive for Business – Convert file (entrée : le fichier .docx préalablement créé sur OneDrive/SharePoint)
  6. Envoi d’e‑mail : Outlook – Send an email (V2)
    • À : variables('emailCible')
    • Objet (ex.) : concat( 'Votre attestation – Réponse #', outputs('Get_response_details')?['body/responseId'] )
    • Corps : corps HTML personnalisé (signature, consignes, lien d’archive si vous stockez le PDF).
    • Pièce jointe : contenu du PDF (base64) + nom : outputs('Compose_nomFichierPdf') ou le nom défini directement.
    • (Optionnel) CC/CCI : responsables, boîte fonctionnelle, etc.
  7. Archive (optionnel) : SharePoint/OneDrive – Create file dans un chemin structuré : /Forms/@{triggerBody()?['formId']}/@{formatDateTime(utcNow(), 'yyyy')}/@{formatDateTime(utcNow(), 'MM')}/@{outputs('Compose_nomFichierPdf')} Vous pouvez ensuite inclure le lien du fichier dans le corps d’e‑mail.
  8. Tests : soumettez une réponse de test et vérifiez le rendu du PDF, la bonne adresse destinataire et l’archive.

Gestion des cas spécifiques

QCM multi‑sélection et rendu lisible

Les QCM multi‑sélection renvoient souvent un tableau. Pour l’afficher correctement dans Word, utilisez join() pour séparer par virgule ou puce, par exemple :

join(outputs('Get_response_details')?['body/ProduitsChoisis'], ', ')

Vous pouvez aussi appliquer une mise en forme à puces directement dans Word : mappez la valeur join(..., ' ') pour forcer un retour à la ligne entre les choix.

Sections répétées / tableaux

Si votre modèle doit lister n éléments (ex. plusieurs items), utilisez un contrôle de contenu de section répétée dans Word et alimentez‑le avec une source structurée. À défaut, formatez une chaîne via join() et insérez‑la dans un paragraphe pré‑stylé.

Images et logos

Pour les logos, utilisez un contrôle de contenu image dans le modèle, mappé à un contenu binaire si nécessaire, ou intégrez le logo fixe dans le modèle (solution la plus simple). Pour des photos soumises via Forms (upload de fichiers), récupérez d’abord le fichier (SharePoint/OneDrive), puis mappez le contenu binaire dans l’action Word (si applicable).


Routage dynamique de l’e‑mail

Plusieurs stratégies sont possibles :

  • Adresse saisie dans le formulaire (CourrielDestinataire) : simple et direct.
  • Adresse du répondant (Responder’s email) : valable pour des répondants internes.
  • Table de routage : utilisez une liste SharePoint“RoutagePDF” (Clé : Site, Valeur : Email), puis :
    1. Get items filtré sur la clé (ex. Site eq '@{outputs('Get_response_details')?['body/Site']}').
    2. Compose/Set variable pour récupérer l’adresse correspondant au site.
SourceAvantageInconvénient
Courriel saisi (Forms)Souplesse, externe OKRisque de faute de frappe
Responder’s emailFiable pour l’interneIndisponible pour l’externe
Liste de routageGouvernable, évolutifMaintenance de la liste

Nom de fichier, formats et culture

  • Nom de fichier : préférez un nom unique, lisible et triable : concat( 'Form-', triggerBody()?['formId'], '-Resp-', outputs('Get_response_details')?['body/responseId'], '-', formatDateTime(utcNow(), 'yyyyMMdd-HHmmss'), '.pdf' )
  • Formats de date/heure : utilisez formatDateTime() pour forcer dd/MM/yyyy ou un autre format souhaité.
  • Langue : pour des mois en français, générez le libellé dans Power Automate (ex. table de correspondance) plutôt que de compter sur le client.

Archivage & traçabilité

Conservez une copie des PDF pour audit et réémission :

  • Bibliothèque SharePoint organisée par année/mois : /Formulaires/<NomForm>/@{yyyy}/@{MM}/
  • Colonne RéponseID, EnvoyéÀ, DateEnvoi pour faciliter les recherches.
  • Incluez dans le mail un lien vers le PDF archivé si besoin (chemin interne).

Gouvernance, sécurité, conformité

  • DLP : respectez vos politiques de prévention de fuite de données (DLP). Évitez d’envoyer des informations sensibles à l’extérieur.
  • Limite de taille : gardez les PDF sous ~20–25 Mo pour un envoi fiable.
  • Accès : stockez le modèle et l’archive dans des emplacements partagés avec des droits restreints.
  • Logs & surveillance : activez l’Owner et des destinataires de notification en cas d’échec.

Fiabilité & performances

  • Concurrence : dans les paramètres du déclencheur, limitez la concurrency à 1 si vous générez des fichiers portant le même nom ou écrivez dans un même dossier pour éviter les collisions.
  • Réessais : laissez les retry policies par défaut (ou personnalisées) sur les actions réseau (SharePoint/OneDrive/Outlook).
  • Temps d’exécution : la génération PDF se fait généralement en quelques secondes ; prévoyez une marge pour des modèles lourds.

Dépannage (troubleshooting)

SymptômeCause probableCorrectif
Champs Word non remplisTags non uniques ou différents du mappingRéouvrir le modèle, vérifier Titre/Tag des contrôles
QCM affiche [object Object]Valeur tableau non convertieUtiliser join(..., ', ') avant l’injection
PDF illisible (polices)Police non standardUtiliser des polices système ou intégrer la police dans le modèle
E‑mail non reçuAdresse invalide, blocage DLP, pièce jointe trop lourdeValider adresse, alléger le PDF, vérifier règles DLP
Échec conversionFichier verrouillé ou chemin invalideCréer un nouveau fichier temporaire, chemins sans caractères spéciaux

Expressions prêtes à l’emploi

// Adresse cible priorisant le champ saisi, puis l’e‑mail interne
coalesce(
  outputs('Get_response_details')?['body/AdresseEmailDuDestinataire'],
  outputs('Get_response_details')?['body/responderEmail']
)

// Chaîne QCM multi-sélection
join(outputs('Get\_response\_details')?\['body/ProduitsChoisis'], ', ')

// Date à la française
formatDateTime(utcNow(), 'dd/MM/yyyy')

// Nom de fichier unique
concat('Reponse-', outputs('Get\_response\_details')?\['body/responseId'], '-', formatDateTime(utcNow(), 'yyyyMMdd-HHmmss'), '.pdf') 

Variantes utiles

  • Envoi à plusieurs destinataires : renseignez À, CC et CCI selon une logique conditionnelle (Switch en fonction d’un site, d’un score, d’une région…).
  • Routage via SharePoint : maintenez une liste Site → Email pour un pilotage no‑code.
  • Archivage renforcé : ajoutez des colonnes de métadonnées (ID de réponse, status d’envoi, lien du fichier).
  • Mise en page sans Word : vous pouvez générer de l’HTML puis convertir en PDF via un connecteur tiers (premium). La voie Word → PDF reste 100 % Microsoft 365 et sans connecteur premium.

Points d’attention

  • Licences & connecteurs : les connecteurs Word Online (Business), OneDrive/SharePoint et Outlook sont inclus dans Microsoft 365 Entreprise.
  • Sensibilité des données : appliquez vos étiquettes de confidentialité et chiffrement si nécessaire.
  • Validation d’adresse : ajoutez une étape de contrôle (condition sur contains(emailCible, '@')) avant l’envoi.
  • Horodatage : stockez la date d’envoi dans une colonne SharePoint pour traçabilité.

Exemple de scénario complet (recette)

  1. L’utilisateur soumet le formulaire (avec CourrielDestinataire ou non).
  2. Le flux récupère les détails et calcule emailCible via coalesce().
  3. Le flux remplit le modèle Word : Nom, Site, Q1/Q2, DateSoumission.
  4. Le flux convertit en PDF et génère un nom unique.
  5. Le flux envoie l’e‑mail avec le PDF en pièce jointe + message personnalisé.
  6. (Optionnel) Le flux archive le PDF et ajoute un enregistrement dans une liste de journal (succès/échec, destinataire, horodatage).

FAQ

Peut‑on personnaliser l’objet et le corps de l’e‑mail ?
Oui, utilisez concat(), des valeurs du formulaire (ex. Nom, Site) et formatDateTime() pour générer un objet contextuel.

Peut‑on envoyer le PDF à une adresse externe ?
Oui, si vos politiques DLP et vos transport rules le permettent. Prévoyez une validation d’adresse.

Peut‑on joindre plusieurs PDF ?
Oui : répétez l’étape de conversion pour chaque modèle ou assemblez plusieurs sections dans un seul modèle Word.

Quel est le meilleur endroit pour stocker le modèle ?
SharePoint (espace d’équipe) pour la gouvernance et le versioning. OneDrive convient pour un POC individuel.


Checklist de mise en production

  • ✅ Modèle Word finalisé (tags uniques, styles propres, logos).
  • ✅ Mapping vérifié pour chaque contrôle de contenu.
  • ✅ Flux testé avec réponses internes et externes.
  • ✅ Concurrence configurée (si nécessaire).
  • ✅ Archivage activé (dossier, nommage, métadonnées).
  • ✅ Notifications d’échec et plan de reprise.
  • ✅ Conformité : DLP, limites de taille, confidentialité.

Résumé opérationnel

  • C’est faisable et courant via Power Automate.
  • Meilleure pratique : Modèle Word (rempli) → Conversion PDFE‑mail envoyé à une adresse dynamique issue de la réponse Forms.
  • Sans service externe si vous suivez la chaîne Forms → Word → PDF → Outlook.

Modèle de corps d’e‑mail (copier‑coller)

<p>Bonjour @{outputs('Get_response_details')?['body/Nom']},</p>
<p>Veuillez trouver en pièce jointe le PDF récapitulant votre soumission au formulaire <strong>@{triggerBody()?['formId']}</strong>. </p>
<p>Date d’émission : @{formatDateTime(utcNow(), 'dd/MM/yyyy HH:mm')}</p>
<p>Cordialement,<br/>L’équipe automatisation</p>

Exemple d’email dynamique & routage par site

  1. Question Forms “Site” avec choix : Paris, Lyon, Lille.
  2. Liste SharePoint RoutagePDF : Site Email Parisparis@exemple.com Lyonlyon@exemple.com Lillelille@exemple.com
  3. Dans le flux :
    • Get items sur RoutagePDF filtré par Site.
    • Récupérez Email et alimentez emailCible.
  4. Envoyez le PDF à emailCible + CC à une boîte fonctionnelle.

Éviter les erreurs courantes

  • Contrôles Word non nommés : sans Titre/Tag unique, l’action ne proposera pas le champ à remplir.
  • Noms de fichiers instables : ajoutez l’ID de réponse et un horodatage pour éviter l’écrasement.
  • QCM non “joinés” : convertissez toujours les tableaux en texte.
  • Images externes : préférez des logos intégrés au modèle pour un rendu PDF fiable.

Aller plus loin

Besoin d’un rendu très riche (graphes, tableaux complexes) ? Conservez la voie standard Word → PDF pour la majorité des cas. Si vous devez générer un document à partir d’HTML, visitez la piste des connecteurs tiers (catégorie premium) tout en pesant les coûts et la gouvernance.


Avec cette méthode, vous obtenez un flux durable, gouvernable et 100 % Microsoft 365 : un formulaire génère automatiquement un PDF mis en page et l’expédie à la bonne adresse, calculée dynamiquement à partir des réponses.

Sommaire