ITSkillsCenter
Business Digital

Power Automate : flux d’approbation des congés

13 min de lecture

L’approbation des congés est l’exemple type du flux qui fait gagner trois heures par semaine à un service RH dès la première semaine. Ce tutoriel construit un flux complet de bout en bout : un collaborateur remplit un formulaire Microsoft Forms, le manager reçoit une demande d’approbation directement dans Microsoft Teams, la décision est enregistrée dans une liste SharePoint, le demandeur reçoit un courriel de confirmation, et les RH ont une vue consolidée avec calcul automatique du solde de jours.

Article principal : Microsoft 365 pour PME — architecture et gouvernance.

Prérequis

  • Une licence Microsoft 365 Business Standard ou Premium pour chaque utilisateur du flux. Aucune licence Power Automate dédiée n’est requise pour ce scénario qui n’utilise que des connecteurs standards (Forms, Teams, SharePoint, Outlook, Approbations).
  • Un site SharePoint accessible — typiquement le site RH créé dans la mise en place SharePoint.
  • Microsoft Forms accessible (inclus dans toutes les licences Microsoft 365).
  • Niveau attendu : utilisateur métier avec une expérience Excel et une logique de processus claire.
  • Temps : 90 minutes pour la première construction, 20 minutes pour les flux suivants.

Étape 1 — Préparer la liste SharePoint qui stocke les demandes

Le flux d’approbation a besoin d’un endroit central où enregistrer chaque demande : c’est la liste SharePoint. On la crée avant le flux pour pouvoir y connecter les actions Power Automate au moment de la construction. La liste vit dans le site RH du tutoriel SharePoint.

On définit huit colonnes. Demandeur (Personne ou Groupe), Date de demande (Date), Date de début (Date), Date de fin (Date), Nombre de jours (Nombre), Type (Choix : Congés payés, RTT, Sans solde, Maladie), Motif (Texte multiligne), Statut (Choix : En attente, Approuvée, Refusée).

# Création de la liste via PnP PowerShell
Connect-PnPOnline -Url "https://exemple.sharepoint.com/sites/rh" -Interactive
New-PnPList -Title "Demandes de congés" -Template GenericList
Add-PnPField -List "Demandes de congés" -DisplayName "Date de début" -InternalName "DateDebut" -Type DateTime -AddToDefaultView
Add-PnPField -List "Demandes de congés" -DisplayName "Date de fin"   -InternalName "DateFin"   -Type DateTime -AddToDefaultView
Add-PnPField -List "Demandes de congés" -DisplayName "Nombre de jours" -InternalName "NbJours" -Type Number -AddToDefaultView
Add-PnPField -List "Demandes de congés" -DisplayName "Type" -InternalName "TypeConge" -Type Choice -Choices "Congés payés","RTT","Sans solde","Maladie" -AddToDefaultView
Add-PnPField -List "Demandes de congés" -DisplayName "Motif" -InternalName "Motif" -Type Note
Add-PnPField -List "Demandes de congés" -DisplayName "Statut" -InternalName "Statut" -Type Choice -Choices "En attente","Approuvée","Refusée" -AddToDefaultView

Le bloc crée la liste puis ajoute les colonnes typées. Les InternalName sont volontairement courts et sans accent — ils servent ensuite dans les expressions Power Automate, où chaque caractère spécial complique la syntaxe. La colonne Statut a une valeur par défaut En attente, qu’on configure dans l’interface graphique de SharePoint après création (Paramètres de la colonne → Valeur par défaut). Pour vérifier, on visite la liste dans le navigateur — les colonnes apparaissent dans la vue par défaut, et un nouveau brouillon d’élément doit afficher En attente dans la colonne Statut.

Étape 2 — Construire le formulaire Microsoft Forms

Microsoft Forms héberge le formulaire visible des collaborateurs. On le crée en partant de forms.office.com et on choisit Nouveau formulaire de groupe dans le contexte du groupe Microsoft 365 RH — un formulaire de groupe est partagé entre les co-administrateurs RH, ce qui évite qu’il soit lié à une personne qui pourrait quitter l’entreprise.

On y ajoute six questions. Date de début du congé (date), Date de fin du congé (date), Type de congé (choix unique avec les mêmes valeurs que la colonne SharePoint), Motif (texte long), Joindre un justificatif (téléchargement de fichier, optionnel — utile pour les arrêts maladie), Adresse mail du manager (texte, validé par expression régulière de format mail).

L’identifiant du formulaire (visible dans l’URL après id=) sera repris dans le flux. On note aussi l’identifiant unique de chaque question, accessible dans les options avancées de chaque champ ; Power Automate les retournera comme des variables exploitables.

Étape 3 — Créer le flux Power Automate (déclencheur Forms)

Depuis make.powerautomate.com, on crée un nouveau flux automatisé. Le déclencheur est Lorsqu’une nouvelle réponse est envoyée du connecteur Microsoft Forms, configuré sur le formulaire créé à l’étape 2. La première action après le déclencheur est Obtenir les détails de la réponse, qui charge le contenu de la réponse dans une variable utilisable par les actions suivantes.

Le déclencheur Forms ne fournit que l’identifiant de la réponse, pas son contenu ; c’est Obtenir les détails de la réponse qui matérialise les valeurs des champs en variables nommées. Cette mécanique en deux temps est un pattern récurrent dans Power Automate, à intégrer une fois pour toutes.

Étape 4 — Calculer le nombre de jours ouvrés demandés

Le formulaire collecte une date de début et une date de fin ; le flux doit calculer le nombre de jours ouvrés (hors samedi et dimanche). On ajoute une action Composer avec une expression qui boucle entre les deux dates et compte les jours non-week-end. La syntaxe utilise les fonctions de Power Automate.

// Expression à coller dans une action "Composer" nommée "JoursOuvres"
// dateDebut et dateFin sont les sorties de "Obtenir les détails de la réponse"
length(
  filter(
    range(0, add(div(sub(ticks(outputs('Get_response_details')?['body/r1']),
                        ticks(outputs('Get_response_details')?['body/r2'])),
                    864000000000), 1)),
    not(or(equals(dayOfWeek(addDays(outputs('Get_response_details')?['body/r2'], item())), 0),
           equals(dayOfWeek(addDays(outputs('Get_response_details')?['body/r2'], item())), 6)))
  )
)

L’expression construit la plage de jours entre la date de début et la date de fin, filtre ceux qui ne sont ni dimanche (0) ni samedi (6), et retourne la longueur de la liste filtrée — c’est le nombre de jours ouvrés. La sortie est un entier qu’on utilise dans la suite du flux pour vérifier le solde et l’écrire dans la liste SharePoint. Si la date de fin est antérieure à la date de début, l’expression retourne 0 ; on peut ajouter une action Condition avant pour valider la cohérence et arrêter le flux avec un message d’erreur si nécessaire.

Étape 5 — Créer la demande dans SharePoint en statut « En attente »

On ajoute une action Créer un élément du connecteur SharePoint, ciblant le site RH et la liste Demandes de congés. On mappe chaque colonne : Title = « Demande de [nom du demandeur] », Demandeur = email de la réponse, DateDebut, DateFin, NbJours = sortie de l’action JoursOuvres, TypeConge, Motif. La colonne Statut reste à sa valeur par défaut « En attente ».

L’action retourne l’ID de l’élément créé ; on conserve cette sortie pour la mise à jour qui suivra l’approbation. Cette dissociation entre la création et la mise à jour est délibérée : si l’approbation prend trois jours, la demande reste visible dans la liste avec le statut « En attente » pendant tout ce temps, ce qui permet aux RH de voir l’en-cours sans dépendre du flux.

Étape 6 — Lancer l’approbation Teams

On ajoute une action Démarrer et attendre une approbation du connecteur Approbations. On configure : Type d’approbation = « Approuver/Refuser — premier à répondre », Affecté à = adresse mail du manager (issue du formulaire), Titre = « Demande de congés de [nom] », Détails = un bloc Markdown qui résume la demande.

// Détails de l'approbation (champ Markdown)
**Demandeur :** @{outputs('Get_response_details')?['body/r0']}
**Type :** @{outputs('Get_response_details')?['body/r4']}
**Du :** @{formatDateTime(outputs('Get_response_details')?['body/r2'], 'dd/MM/yyyy')}
**Au :** @{formatDateTime(outputs('Get_response_details')?['body/r1'], 'dd/MM/yyyy')}
**Jours ouvrés :** @{outputs('JoursOuvres')}
**Motif :** @{outputs('Get_response_details')?['body/r5']}

Ce bloc Markdown se rend automatiquement dans la carte d’approbation que le manager reçoit dans Teams (onglet Approbations) et dans le courriel parallèle. Le manager clique sur « Approuver » ou « Refuser », ajoute un commentaire optionnel, valide. Le flux reprend où il s’était arrêté avec deux variables exploitables : outcome (Approve ou Reject) et responses (commentaire du manager). L’attente est non bloquante côté Power Automate : le flux peut rester en pause des heures ou des jours sans pénalité.

Étape 7 — Mettre à jour la liste et notifier le demandeur

Selon la décision, on met à jour le statut de l’élément SharePoint et on envoie un courriel au demandeur. On utilise une action Condition qui teste la valeur de l’outcome.

// Condition principale
@{body('Demarrer_et_attendre_une_approbation')?['outcome']}
== Approve

// Branche "Si oui"
Action: Mettre à jour l'élément (SharePoint)
  Site, Liste, ID = sortie de "Créer un élément"
  Statut = "Approuvée"
Action: Envoyer un courriel (V2)
  À = email du demandeur
  Objet = "Vos congés sont approuvés"
  Corps HTML = message + plage de dates

// Branche "Si non"
Action: Mettre à jour l'élément (SharePoint)
  Statut = "Refusée"
Action: Envoyer un courriel
  Objet = "Votre demande n'a pas été approuvée"
  Corps = motif du refus inclus

Le bloc montre la structure logique sans dupliquer le code des deux branches. Côté résultat, le statut de l’élément SharePoint passe à « Approuvée » ou « Refusée » dans la seconde qui suit la décision du manager, et le demandeur reçoit un courriel personnalisé. La traçabilité dans la liste SharePoint permet aux RH de produire à tout moment l’état des demandes en cours et le bilan des congés pris par collaborateur, sans extraction supplémentaire.

Étape 8 — Tester puis activer

Avant de mettre le flux en production, on lance trois tests. Une demande de deux jours en semaine : la sortie attendue est NbJours = 2, l’approbation arrive au manager, on clique Approuver, le statut passe à Approuvée et le mail de confirmation arrive. Une demande qui chevauche un week-end : l’expression doit ignorer le samedi et le dimanche et ne compter que les jours ouvrés. Un refus : on clique Refuser avec un commentaire, le statut passe à Refusée et le mail au demandeur cite le motif.

Les erreurs apparaissent dans l’historique des exécutions du flux côté Power Automate : chaque exécution est journalisée, on peut cliquer dessus pour voir l’entrée et la sortie de chaque action. C’est l’outil de débogage à utiliser systématiquement avant d’activer un flux pour une équipe entière ; il évite les bonnes vieilles erreurs « ça marche chez moi » qui font perdre une demi-journée à corriger.

Étape 9 — Vérification et industrialisation

Le flux validé, on l’enrichit avec deux gestes de robustesse. Premier : on configure une notification d’erreur en cas d’échec de flux, dans Paramètres → Envoyer des notifications par email aux propriétaires en cas d’échec. Cette option envoie un courriel automatique à tout propriétaire si une exécution échoue, avant qu’un utilisateur appelle le support pour signaler que « sa demande n’est pas passée ».

Second : on transfère la propriété du flux à un groupe Microsoft 365 RH plutôt qu’à une personne. Un flux possédé par un individu meurt avec son compte ; un flux possédé par un groupe survit aux mouvements RH. Le transfert se fait dans Détails du flux → Propriétaires → Ajouter en sélectionnant le groupe — on peut ensuite retirer le propriétaire individuel et ne laisser que le groupe.

Erreurs fréquentes

Erreur Cause Solution
L’approbation n’arrive jamais Adresse mail du manager mal saisie ou domaine externe Validation regex côté Forms, restriction aux adresses du domaine
Calcul de jours incorrect Inversion des paramètres dans la fonction sub() Ordre : sub(ticks(fin), ticks(début))
Mises à jour SharePoint en échec silencieux InternalName de colonne incorrect dans l’action Toujours utiliser l’InternalName, pas le nom d’affichage
Flux possédé par un seul individu Création directe sans transfert Transférer la propriété à un groupe RH dès la mise en production
Pas d’historique des refus Suppression de l’élément au lieu de mise à jour de statut Toujours conserver la trace, jamais supprimer pour cause de refus
Solde des congés non mis à jour Le flux ne déduit pas du solde global Ajouter une action Mettre à jour sur une liste « Soldes » indexée par utilisateur

FAQ

Quelle licence Power Automate faut-il ?

Pour ce flux qui n’utilise que des connecteurs standards (Forms, Teams, SharePoint, Outlook, Approbations), aucune licence supplémentaire : les droits inclus dans Microsoft 365 Business Standard ou Premium suffisent. Une licence Power Automate Premium (anciennement Per-User Plan) est requise pour les connecteurs premium (SQL Server, HTTP générique, certains SaaS tiers) ou pour les flux qui dépassent les quotas standards.

Peut-on intégrer une signature électronique des demandes ?

Pour des congés ordinaires, ce n’est pas nécessaire : la traçabilité de l’approbation dans Power Automate (avec horodatage et identifiant utilisateur) constitue déjà une preuve juridique solide. Pour des cas qui exigent une signature légale formelle (rupture conventionnelle, contrat), on déclenche depuis le flux une action vers Adobe Sign, DocuSign ou la signature Microsoft Word native qui n’est pas un connecteur standard.

Que se passe-t-il si le manager est absent ?

L’approbation reste en attente jusqu’au retour du manager. Pour gérer ce cas, on configure une approbation parallèle avec un manager de repli : Type d’approbation = « Premier à répondre » avec deux destinataires. Alternative : ajouter une logique d’escalade qui réaffecte la demande à un manager N+1 si l’approbation reste en attente plus de 5 jours.

Comment exporter un bilan annuel des congés ?

La liste SharePoint est interrogeable depuis Excel via Données → Obtenir les données → SharePoint. On y construit un tableau croisé dynamique par collaborateur, par type, par mois. Pour automatiser, on peut aussi connecter Power BI à la liste SharePoint et publier un tableau de bord interne sur le site RH.

Le flux est-il facturé à l’exécution ?

Non, pas pour les connecteurs standards inclus. Power Automate facture par utilisateur ou par flux uniquement quand on utilise des connecteurs premium ou quand on dépasse les quotas standards (par défaut 6 000 actions par licence et par 24 heures, ce qu’aucun flux RH ne franchit).

Tutoriels associés

Ressources officielles

Sponsoriser ce contenu

Cet emplacement est à vous

Position premium en fin d'article — c'est l'instant où les lecteurs sont le plus engagés. Réservez cet espace pour votre marque, votre formation ou votre offre.

Recevoir nos tarifs
Publicité