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.
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 :
- Forms déclenche le flux et expose les réponses.
- Word Online (Business) remplit un modèle
.docx
à partir des données. - Word Online (Business) ou OneDrive for Business convertit le
.docx
en PDF. - Outlook envoie l’e‑mail à l’adresse ciblée (variable).
- (Optionnel) SharePoint/OneDrive archive le PDF et journalise la traçabilité.
Étape | Connecteur | Action | Sortie clé |
---|---|---|---|
Déclenchement | Microsoft Forms | When a new response is submitted | ID de réponse, ID du formulaire |
Lecture | Microsoft Forms | Get response details | Valeurs des questions, e‑mail du répondant (interne) |
Fusion | Word Online (Business) | Populate a Microsoft Word template | Document .docx rempli |
Conversion | Word Online / OneDrive | Convert Word Document to PDF / Convert file | Contenu PDF (base64) |
Envoi | Outlook | Send an email (V2) | Message avec PDF en pièce jointe |
Archive (optionnel) | SharePoint / OneDrive | Create file / Update file | Fichier 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)
- Stockez le modèle dans OneDrive Entreprise ou SharePoint.
- 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).
- 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. - 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 / Source | Type | Remarques |
---|---|---|---|
Nom | Nom et prénom | Texte | Afficher dans l’en‑tête du PDF |
Courriel | Responder’s email ou CourrielDestinataire | E‑mail | Utilisé pour routage et contact |
Q1 | Question 1 | Texte/QCM | Pour QCM multi‑sélection, formatez avec join() |
DateSoumission | utcNow() (Power Automate) | Date/heure | Formatée côté flux (ex. formatDateTime(...) ) |
Construire le flux Power Automate
- Déclencheur : Microsoft Forms – When a new response is submitted → sélectionnez le formulaire cible.
- Obtenir les détails : Microsoft Forms – Get response details → récupère toutes les réponses + l’e‑mail (si interne).
- 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'] )
RemplacezAdresseEmailDuDestinataire
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' )
- Initialize variable
- 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')
- QCM multi‑sélection : si la réponse arrive sous forme de tableau, utilisez
- 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)
- Word Online (Business) – Convert Word Document to PDF (entrée : le contenu
- 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.
- À :
- 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. - 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 :
- Get items filtré sur la clé (ex.
Site eq '@{outputs('Get_response_details')?['body/Site']}'
). - Compose/Set variable pour récupérer l’adresse correspondant au site.
- Get items filtré sur la clé (ex.
Source | Avantage | Inconvénient |
---|---|---|
Courriel saisi (Forms) | Souplesse, externe OK | Risque de faute de frappe |
Responder’s email | Fiable pour l’interne | Indisponible pour l’externe |
Liste de routage | Gouvernable, évolutif | Maintenance 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 forcerdd/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ôme | Cause probable | Correctif |
---|---|---|
Champs Word non remplis | Tags non uniques ou différents du mapping | Réouvrir le modèle, vérifier Titre/Tag des contrôles |
QCM affiche [object Object] | Valeur tableau non convertie | Utiliser join(..., ', ') avant l’injection |
PDF illisible (polices) | Police non standard | Utiliser des polices système ou intégrer la police dans le modèle |
E‑mail non reçu | Adresse invalide, blocage DLP, pièce jointe trop lourde | Valider adresse, alléger le PDF, vérifier règles DLP |
Échec conversion | Fichier verrouillé ou chemin invalide | Cré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)
- L’utilisateur soumet le formulaire (avec CourrielDestinataire ou non).
- Le flux récupère les détails et calcule
emailCible
viacoalesce()
. - Le flux remplit le modèle Word :
Nom
,Site
,Q1
/Q2
,DateSoumission
. - Le flux convertit en PDF et génère un nom unique.
- Le flux envoie l’e‑mail avec le PDF en pièce jointe + message personnalisé.
- (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 PDF → E‑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
- Question Forms “Site” avec choix : Paris, Lyon, Lille.
- Liste SharePoint RoutagePDF : Site Email Parisparis@exemple.com Lyonlyon@exemple.com Lillelille@exemple.com
- Dans le flux :
- Get items sur RoutagePDF filtré par Site.
- Récupérez Email et alimentez
emailCible
.
- 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.