Exercice 03 — Forms + Power Automate

Votre Premier Flux Automatisé
Forms → Excel → Email

Créez un formulaire de demande de véhicule, connectez-le à Power Automate, et enregistrez automatiquement chaque réponse dans Excel avec un email de confirmation — tout ça gratuitement.

⏱ 1h30 estimé
🆕 Mis à jour 2026 — nouveau concepteur Power Automate
🎯 Niveau : Débutant
✓ Besoin : Compte Microsoft gratuit (outlook.com)
☁️ Tout se passe en ligne — aucun logiciel à installer
Ce que vous allez construire :
📋
Microsoft Forms
Formulaire demande
→
⚡
Power Automate
Déclencheur auto
→
📊
Excel Online
Ligne ajoutée
→
📧
Email auto
Confirmation
→
😊
Demandeur
Reçoit la confirmation
🔁

Et si le responsable devait aussi recevoir l'e-mail ? Ce pipeline de base n'écrit qu'au demandeur. L'Annexe D — Améliorer le flux explique comment le chef de service, la cellule parc auto et le chauffeur reçoivent aussi l'information (CC, annuaire par service, groupe de distribution), puis passe en revue 6 autres axes : formulaire enrichi, intégrité des données, engagements de délai, bon de sortie PDF, pilotage Power BI et gouvernance.

🔑 Étape 1 — Préparer votre compte Microsoft gratuit
1

Créer ou accéder à votre compte Microsoft gratuit

⏱ 5 min
1

Si vous n'avez pas de compte : ouvrez votre navigateur → allez sur outlook.com → cliquez Créer un compte gratuit → choisissez une adresse @outlook.com → remplissez le formulaire.

2

Si vous avez déjà un compte @outlook.com, @hotmail.com ou @live.com : connectez-vous directement sur outlook.com.

3

Après connexion, testez l'accès aux outils : ouvrez un nouvel onglet → tapez forms.office.com → vous devez voir "Mes formulaires". Puis make.powerautomate.com → vous devez voir la page "Créer".

✓

Avec un compte Microsoft gratuit, vous avez accès à Forms illimité + Power Automate 750 exécutions/mois + OneDrive 5 Go + Excel Online basique. Suffisant pour tous vos exercices.

⚠️

Compte professionnel vs personnel : Si vous avez un email de bureau (ex: votreprenom@ministere.ci), ce compte a peut-être déjà accès à Power Automate avec plus de fonctionnalités. Dans ce cas, utilisez votre email professionnel — les étapes sont identiques.

🛑

POINT CRITIQUE (à lire avant de créer le formulaire) : la documentation officielle Microsoft du connecteur Microsoft Forms indique : « The connector only works with organizational accounts » → le connecteur ne fonctionne qu'avec des comptes d'organisation (professionnel/scolaire). Avec un simple compte personnel @outlook.com, le déclencheur « Lorsqu'une nouvelle réponse est envoyée » peut ne jamais apparaître ou ne proposer aucun formulaire.

👉 Recommandation : construisez tout l'exercice avec un même compte professionnel/scolaire (toutes les ressources — formulaire + Excel + flux — doivent être dans ce compte). Si vous n'en avez pas : activez un essai Microsoft 365 Business de 30 jours pour obtenir un compte d'organisation, ou passez par le compte de votre structure. Un test de diagnostic de 60 secondes est fourni en sous-étape 4.0.

📋 Étape 2 — Créer le Formulaire de Demande Véhicule
2

Construire le formulaire dans Microsoft Forms

⏱ 15 min
1

Allez sur forms.office.com → cliquez + Nouveau formulaire (ou bouton +).

2

Titre du formulaire : cliquez "Titre sans titre" → tapez "Demande de Véhicule — Moyens Généraux". Description : "Remplissez ce formulaire pour demander un véhicule de service. Réponse sous 24h."

3

Ajoutez les questions en cliquant + Ajouter une nouvelle question :

📋 Demande de Véhicule — Moyens Généraux

Remplissez ce formulaire pour demander un véhicule de service.

→ Type : Texte | Obligatoire : Oui
→ Type : Choix (liste déroulante) | Options : DAF, DRH, DEEE, DGE, DTM, Direction
→ Type : Date
→ Type : Texte | Obligatoire : Oui
→ Type : Texte (ou Évaluation 1-10) | Obligatoire : Oui
→ Type : Choix | Options : Réunion institutionnelle, Terrain/Inspection, Formation, Collecte documents, Autre
Normal
Urgent (24h)
Critique
→ Type : Choix | Affichage : Boutons radio | Par défaut : Normal
→ Type : Texte | Obligatoire : Oui — ajout nécessaire : c'est l'adresse qui recevra l'e-mail de confirmation (Étape 4.6)
4

Rendre les questions obligatoires : Pour chaque question, cliquez les 3 points ··· en haut à droite → cochez Obligatoire. Toutes sauf "Niveau d'urgence" (qui a une valeur par défaut).

5

Récupérer le lien du formulaire : Cliquez Collecter les réponses (bouton bleu en haut à droite) → copiez le lien. Gardez ce lien — vous en aurez besoin dans Power Automate.

6

QR Code automatique : Dans la même fenêtre "Partager", cliquez Code QR → Télécharger. Vous obtenez immédiatement un QR code pour votre formulaire — imprimez-le !

💡

Chaque question du formulaire deviendra une colonne dans Excel. Le nom de la question = le nom de la colonne. Choisissez des noms clairs et sans accents si possible.

✉️

Question 8 obligatoire — « Votre adresse e-mail » : le formulaire d'origine n'en contenait pas, donc le flux ne pouvait écrire à personne. Ajoutez-la (type Texte, obligatoire) et vérifiez qu'elle s'affiche bien dans le plan « Aperçu du formulaire ». Le mapping des colonnes de l'Étape 4.5 s'appuie sur cette question (Q8).

📊 Étape 3 — Préparer le fichier Excel sur OneDrive
3

Créer le fichier Excel sur OneDrive (gratuit)

⏱ 10 min
1

Allez sur onedrive.live.com → connectez-vous → cliquez + Nouveau → Classeur Excel. Un Excel Online s'ouvre dans votre navigateur.

2

Renommez le fichier : cliquez "Classeur" en haut → tapez REGISTRE_VEHICULES_AUTO → Entrée. Le fichier est automatiquement sauvegardé sur OneDrive.

3

Créez les en-têtes en ligne 1. Tapez dans chaque cellule les noms de colonnes :

📊 Colonnes à créer dans Excel (ligne 1)

A — ID_Demande
Auto-généré par PA
B — Date_Soumission
Timestamp auto PA
C — Nom_Demandeur
Depuis Forms Q1
D — Service
Depuis Forms Q2
E — Date_Mission
Depuis Forms Q3
F — Destination
Depuis Forms Q4
G — Nb_Passagers
Depuis Forms Q5
H — Motif
Depuis Forms Q6
I — Urgence
Depuis Forms Q7
J — Statut
Valeur par défaut "En attente"
K — Vehicule_Assigné
Rempli manuellement
4

Convertir en tableau (CRUCIAL) : Sélectionnez toute la ligne 1 (A1 à K1) + une ligne vide en dessous (A1:K2) → Insertion → Tableau → cochez "Mon tableau a des en-têtes" → OK. Sans tableau structuré, Power Automate ne peut pas ajouter de lignes.

5

Nommez le tableau : cliquez dans le tableau → onglet Tableau → "Nom du tableau" → tapez DemandesVehicules → Entrée.

⚠️

Important : Le fichier Excel DOIT être sur OneDrive (pas sur votre PC local) pour que Power Automate puisse y accéder. C'est la raison pour laquelle on l'a créé directement dans OneDrive.

⚡ Étape 4 — Créer le Flux Power Automate (guide détaillé, pas à pas)
4

Construire le flux automatique — 9 sous-étapes (4.0 → 4.9)

⏱ 35 min

4.0 Avant de commencer — quel compte, quel outil ?

Power Automate a beaucoup changé (nouveau concepteur par défaut, assistant Copilot, renommage de certaines actions). Ce contrôle de 2 minutes élimine la cause n°1 de blocage à l'Étape 4 : le type de compte.

Votre compte MicrosoftConnecteur « Microsoft Forms »Que faire
Professionnel / scolaire
prenom@ministere.ci, prenom@entreprise.com…
✅ Disponible — chemin officiel Continuez normalement, c'est le cas recommandé.
Personnel gratuit
@outlook.com, @hotmail.com, @live.com
⚠️ Non garanti
Doc Microsoft : « the connector only works with organizational accounts »
Faites le test ci-dessous. S'il échoue : compte professionnel, ou essai Microsoft 365 Business (30 jours).
1

Test de 60 secondes : ouvrez make.powerautomate.com → + Créer → Flux cloud automatisé → dans la zone « Choisir le déclencheur de votre flux », tapez forms.

2

✅ Si le connecteur « Microsoft Forms » apparaît : c'est bon. Créez le flux (voir 4.1) puis vérifiez que votre formulaire est bien proposé dans le champ ID du formulaire (voir 4.2).

3

❌ S'il n'apparaît pas, ou si la liste des formulaires est vide : votre compte n'est pas « organisationnel ». Déconnectez-vous, reconnectez-vous avec un compte professionnel, puis refaites l'Étape 2 (formulaire) et l'Étape 3 (Excel) avec ce compte.
Astuce : ne mélangez jamais deux comptes — formulaire, classeur Excel et flux doivent appartenir au même compte.

4

Vérifiez enfin l'environnement affiché en haut à droite (ex. Contoso (default)). Un formulaire créé dans un environnement n'est pas visible depuis un autre.

💡

Côté Excel : l'action Excel Online (Business) (utilisée en 4.4) travaille avec les classeurs hébergés sur OneDrive for Business, SharePoint ou un groupe Microsoft 365. Si votre classeur est sur un OneDrive personnel, l'action ne le trouvera pas : c'est le second signal qu'il faut basculer sur un compte professionnel.

4.1 Créer le flux cloud automatisé (nouveau concepteur 2026)

1

Ouvrez make.powerautomate.com → connectez-vous avec le compte validé en 4.0 (vérifiez l'avatar en haut à droite).

2

Menu de gauche → + Créer. La page propose : Flux cloud automatisé, instantané, planifié, flux de bureau, Copilote…

3

Choisissez Flux cloud automatisé (Automated cloud flow) → un panneau s'ouvre avec 2 champs : Nom du flux et Choisir le déclencheur de votre flux.

4

Nom du flux : tapez Formulaire Véhicule → Excel (évitez les caractères spéciaux en début de nom).

5

Recherchez forms → connecteur Microsoft Forms → déclencheur « Lorsqu'une nouvelle réponse est envoyée » (When a new response is submitted) → Créer.

6

⚠️ Ne prenez pas la variante marquée [DÉPRÉCIÉ] / DEPRECATED si elle est proposée : elle ne sert qu'aux anciens flux et sera retirée.

7

Le nouveau concepteur s'ouvre : canevas au centre (les cartes du flux), volet de configuration à gauche, volet Copilot à droite, barre d'outils en haut (Enregistrer, Vérificateur de flux, Tester). Cliquez ≫ pour replier Copilot et gagner de la place.

4.2 Configurer le déclencheur Microsoft Forms

1

Sur le canevas, cliquez la carte du déclencheur : son volet de configuration s'ouvre à gauche.

2

Champ ID du formulaire → liste déroulante → choisissez « Demande de Véhicule — Moyens Généraux ».

3

À la première utilisation, une connexion est demandée : Se connecter → compte de 4.0 → Autoriser. Le bandeau de la carte devient vert « Connecté » : c'est cette autorisation qui permet au flux de lire vos formulaires.

4

Le formulaire est absent de la liste ? Copiez son ID à la main : ouvrez le formulaire, prenez la valeur après FormId= dans l'URL (elle s'arrête au prochain &).

5

Ne touchez pas au bloc « Contrôle d'accès concurrentiel » : le désactiver n'est pas réversible depuis l'interface (erreur CannotDisableTriggerConcurrency, voir 4.9).

4.3 Action 1 — « Obtenir les détails de la réponse » (indispensable)

Le déclencheur ne transmet que le numéro de la réponse, pas son contenu : cette action va chercher les réponses question par question.

1

Sous la carte du déclencheur, cliquez + Nouvelle étape.

2

Recherchez forms → Microsoft Forms → action Obtenir les détails de la réponse (Get response details).

3

ID du formulaire : le même formulaire qu'en 4.2 (la connexion est déjà en place).

4

ID de réponse : cliquez dans le champ → panneau Contenu dynamique (icône ⚡) → bloc du déclencheur → ID de réponse. Un « jeton » bleu apparaît : ne le saisissez jamais à la main.

5

Renommez l'action 1. Lire la réponse (cliquez son titre) : l'historique des exécutions devient lisible (voir 4.7).

✔

Point de contrôle : vous devez avoir 2 cartes sur le canevas. Cliquez Enregistrer : aucune erreur rouge dans le Vérificateur de flux, puis passez à 4.4.

🗺️ Récapitulatif visuel — structure du flux : 1 déclencheur + 3 actions
📋

DÉCLENCHEUR — Quand une réponse est soumise

Connecteur : Microsoft Forms
Formulaire ID : Demande de Véhicule — Moyens Généraux
Se déclenche : à chaque soumission du formulaire

🔍

ACTION 1 — Obtenir les détails de la réponse

Connecteur : Microsoft Forms
Formulaire ID : (même formulaire)
ID de réponse : ID de réponse (du déclencheur)
→ Ceci récupère les réponses de chaque question

📊

ACTION 2 — Ajouter une ligne dans le tableau Excel

Connecteur : Excel Online (Business) ← choisir BUSINESS pas Standard
Emplacement : OneDrive for Business (ou SharePoint)
Bibliothèque de documents : OneDrive
Fichier : REGISTRE_VEHICULES_AUTO.xlsx
Tableau : DemandesVehicules

Valeurs à mapper (tableau complet en 4.4) :
ID_Demande : concat('VEH-', formatDateTime(utcNow(),'yyyyMMdd-HHmmss'))
Date_Soumission : utcNow()
Nom_Demandeur : Réponse à Q1 — Votre nom complet
Service : Réponse à Q2 — Votre service
… de Q3 à Q7 : les 5 autres jetons dynamiques du formulaire
Statut : En attente (valeur fixe)

📧

ACTION 3 — Envoyer un email de confirmation

Connecteur : Office 365 Outlook (ou Gmail si compte Google)
À : Réponse à Q8 — Votre adresse e-mail (ou votre adresse pour tester)
Objet : Demande véhicule reçue — En attente de traitement
Corps : Votre demande pour [Destination] le [Date_Mission] a bien été enregistrée. Référence : [ID_Demande]. Réponse sous 24h.

4.4 Tableau de correspondance — les 11 colonnes à remplir

Le tableau ci-dessous est votre feuille de route : gardez-le sous les yeux pendant la sous-étape 4.5, où vous remplirez un par un les champs de l'action « 2. Écrire dans Excel ». Pour chaque champ : cliquez dedans → le panneau Contenu dynamique (icône ⚡) s'ouvre ; l'onglet Expression (icône fx) sert aux formules. Vous pouvez aussi taper / pour insérer du contenu dynamique au clavier.

Champ ExcelValeur à insérerComment
A — ID_Demandeconcat('VEH-', formatDateTime(utcNow(),'yyyyMMdd-HHmmss'))Onglet Expression
B — Date_SoumissionutcNow()Expression (Abidjan = UTC+0 : l'heure est juste)
C — Nom_Demandeur⚡ Réponse à Q1 — Votre nom completContenu dynamique
D — Service⚡ Réponse à Q2 — Votre serviceContenu dynamique
E — Date_Mission⚡ Réponse à Q3 — Date et heure souhaitéesContenu dynamique
F — Destination⚡ Réponse à Q4 — DestinationContenu dynamique
G — Nb_Passagers⚡ Réponse à Q5 — Nombre de passagersContenu dynamique
H — Motif⚡ Réponse à Q6 — Motif de la missionContenu dynamique
I — Urgence⚡ Réponse à Q7 — Niveau d'urgenceContenu dynamique
J — StatutEn attente — texte fixe, à saisir tel quelClavier
K — Vehicule_AssigneLaisser vide (sera rempli plus tard par le gestionnaire)—
✍️

Saisir une expression : cliquez dans le champ → onglet Expression (fx) → collez la formule sans les guillemets d'affichage → validez. Vérifiez chaque parenthèse : une seule manquante fait échouer l'action Excel (voir 4.9).
👉 Toutes les formules utiles — aide-mémoire des fonctions, 12 recettes classées par niveau, banc d'essai « Composer » et dépannage des messages d'erreur — sont dans l'Annexe A — Expressions (fx).

4.5 Action 2 — « Ajouter une ligne dans un tableau » (Excel Online (Business))

1

Cliquez + Nouvelle étape sous l'action « 1. Lire la réponse ».

2

Recherchez excel → choisissez Excel Online (Business) et surtout pas « Excel Online » seul (version limitée, qui souvent ne voit pas vos fichiers) → action Ajouter une ligne dans un tableau (Add a row into a table).

3

Connectez le connecteur si demandé : Se connecter → compte de 4.0 → Autoriser.

4

Emplacement : choisissez OneDrive for Business (ou SharePoint si votre registre y est hébergé). Bibliothèque de documents : laissez la valeur proposée (généralement OneDrive).

5

Fichier : cliquez l'icône dossier 📁 → naviguez jusqu'à REGISTRE_VEHICULES_AUTO.xlsx → sélectionnez-le. S'il est introuvable : mauvais compte, ou classeur resté en local (revoir l'Étape 3).

6

Tableau : la liste déroulante doit afficher DemandesVehicules. Si elle est vide, le classeur ne contient pas de tableau structuré nommé : retour à l'Étape 3 → sélectionnez A1:K1 (+ une ligne vide) → Insertion → Tableau → cochez « Mon tableau a des en-têtes » → onglet Conception de tableau → Nom du tableau = DemandesVehicules.

7

Bonne nouvelle visible immédiatement : les 11 colonnes du tableau apparaissent comme champs à remplir (A → K). C'est la preuve que Power Automate a bien reconnu votre tableau structuré. Renommez l'action 2. Écrire dans Excel.

🧩

Piège classique (documenté par Microsoft) : si vous ajoutez/modifiez une colonne dans Excel après avoir créé l'action, le nouveau champ n'apparaît pas tout seul dans le flux. Solution : supprimez l'action Excel et rajoutez-la (elle relit le tableau), ou remplissez le champ à la main si vous êtes sûr du nom exact de la colonne.

4.6 Action 3 — « Envoyer un e-mail (V2) » (confirmation au demandeur)

📧

Lacune corrigée : dans la version précédente de cet exercice, le formulaire ne demandait aucune adresse e-mail — il était donc impossible d'écrire au demandeur ! Deux solutions : (a) ajoutez la question « Votre adresse e-mail * » (type Texte) à l'Étape 2 — recommandé ; (b) envoyez l'e-mail à une adresse fixe (la vôtre, ou celle de la cellule Moyens Généraux).

1

+ Nouvelle étape → recherchez outlook → Office 365 Outlook → action Envoyer un e-mail (V2) (Send an email (V2)). Avec un compte Gmail, prenez le connecteur Gmail.

2

À : cliquez dans le champ → ⚡ Contenu dynamique → Réponse à Q8 — Votre adresse e-mail. (Solution b : saisissez votre adresse en dur.)

3

Objet : tapez Demande véhicule reçue — puis insérez le jeton ⚡ Réponse à Q1 — Votre nom complet.

4

Corps : recopiez le modèle ci-dessous en remplaçant chaque « … » par son jeton ⚡. Un jeton s'insère d'un clic : aucune faute de frappe, et la valeur s'adapte à chaque demandeur.

Bonjour « Réponse à Q1 — Votre nom complet »,

Votre demande de véhicule pour « Réponse à Q4 — Destination » le « Réponse à Q3 — Date et heure souhaitées » a bien été enregistrée.
Motif : « Réponse à Q6 — Motif de la mission » — Passagers : « Réponse à Q5 — Nombre de passagers »
Niveau d'urgence déclaré : « Réponse à Q7 — Niveau d'urgence »

Statut actuel : En attente — réponse du service Moyens Généraux sous 24h.

Cordialement,
Service Moyens Généraux
5

Ouvrez Options avancées : ajoutez une CC vers votre responsable (utile en cas d'urgence) et réglez l'importance. Puis renommez l'action 3. Confirmer au demandeur.

4.7 Enregistrer, vérifier, activer et tester

1

Nommez vos 4 cartes : le déclencheur, 1. Lire la réponse, 2. Écrire dans Excel, 3. Confirmer au demandeur.

2

Enregistrer → le flux est activé automatiquement : vérifiez l'interrupteur ON dans Mes flux.

3

Vérificateur de flux : corrigez toute erreur rouge AVANT de tester (parenthèse manquante, champ obligatoire vide, connexion absente).

4

Tester → Manuellement : avec un déclencheur Forms, le test reste « en cours » jusqu'à la prochaine soumission réelle — c'est normal, ne recommencez pas dix fois.

5

Le vrai test : ouvrez le formulaire dans un autre onglet, envoyez une réponse (détail en Étape 5), puis Mes flux → votre flux → « Exécutions sur les 28 derniers jours » → l'exécution doit être verte ✓. Cliquez-la : chaque carte affiche son entrée/sortie JSON — c'est là qu'on voit la valeur réellement écrite dans Excel.

4.8 Concepteur 2026 vs classique — 6 astuces qui font gagner du temps

AstucePourquoi c'est utile
Bascule « Nouveau concepteur » (en haut à droite)Si une action refuse de s'ouvrir dans le nouveau concepteur, basculez une minute en mode classique, configurez, puis revenez.
Épingler un volet (menu ⋯ → Épingler)Affiche 2 volets de configuration côte à côte : idéal pour recopier un jeton dynamique d'une carte à l'autre.
Ajouter une note (menu ⋯ de la carte)Le nouveau concepteur ne gère pas encore les commentaires : les notes les remplacent.
Copier / dupliquer une actionRéutilise la connexion et l'emplacement Excel : parfait pour écrire ensuite dans une 2ᵉ feuille ou un 2ᵉ registre.
Taper / dans un champInsère le contenu dynamique au clavier, sans ouvrir le panneau ⚡.
Peek code (menu ⋯ d'une action)Affiche le JSON réel de l'action : le meilleur moyen de comprendre une erreur d'expression ou de connecteur.
🤖

Copilot : le volet de droite accepte des phrases comme « ajoute une action pour écrire une ligne dans Excel » ou « pourquoi mon flux a échoué ? ». Pratique pour démarrer vite, mais vérifiez systématiquement le résultat : rien ne remplace le mapping manuel des colonnes (4.4).

4.9 Dépannage — les 8 erreurs les plus fréquentes de l'Étape 4

SymptômeCause probableCorrection
Le connecteur Microsoft Forms n'apparaît pas, ou aucun formulaire n'est proposéCompte personnel (@outlook.com) alors que la doc Microsoft réserve le connecteur aux comptes d'organisationReconnectez-vous avec un compte professionnel/scolaire (ou un essai Microsoft 365 Business 30 j) puis refaites les Étapes 2 et 3 avec ce compte
L'action Excel ne trouve pas REGISTRE_VEHICULES_AUTO.xlsxClasseur sur un OneDrive personnel, ou connexion du connecteur associée à un autre compteMenu ⋯ de la carte → Se reconnecter avec le bon compte ; hébergez le classeur sur OneDrive for Business ou SharePoint
La liste déroulante Tableau est videAucun tableau structuré dans le classeur, ou tableau mal nomméÉtape 3 : sélectionnez A1:K1 → Insertion → Tableau → cochez « Mon tableau a des en-têtes » → Conception de tableau → Nom = DemandesVehicules
Erreur InvalidTemplate / unable to parse expressionExpression recopiée avec une parenthèse ou un guillemet manquantRouvrez le champ → onglet Expression → recollez concat('VEH-', formatDateTime(utcNow(),'yyyyMMdd-HHmmss')) sans rien modifier
Une colonne ajoutée dans Excel n'apparaît pas dans le fluxComportement normal et documenté : le concepteur ne relit pas les colonnes à chaudSupprimez l'action Excel et rajoutez-la (le tableau est relu), puis remappez les champs
Le flux ne se déclenche pas du toutFlux désactivé, mauvais formulaire sélectionné, ou déclencheur [DÉPRÉCIÉ] utiliséMes flux → interrupteur ON ; contrôlez l'ID du formulaire ; recréez le déclencheur avec la version non dépréciée
Erreur CannotDisableTriggerConcurrencyLe contrôle d'accès concurrentiel du déclencheur Forms a été désactivéIrreversible dans l'interface : exportez le flux, retirez la section runtimeConfiguration / concurrency du JSON, puis réimportez-le
Exécution verte mais aucun e-mail reçuChamp « À » vide (question e-mail absente du formulaire) ou message classé indésirableAjoutez la question Q8 (Étape 2), vérifiez le dossier Courrier indésirable, renseignez l'adresse d'expéditeur
✅

Fin de l'Étape 4 — vous devez pouvoir cocher : le flux contient 4 cartes (1 déclencheur + 3 actions) · les connexions sont vertes « Connecté » · le Vérificateur de flux ne remonte aucune erreur rouge · le flux est activé. Sinon, reprenez la ligne correspondante du tableau ci-dessus avant de passer à l'Étape 5.

🧪 Étape 5 — Tester votre flux en conditions réelles
5

Test complet du pipeline Forms → Excel → Email

⏱ 10 min
1

Ouvrez votre formulaire : allez sur forms.office.com → cliquez votre formulaire → bouton Aperçu (œil en haut à droite) pour l'ouvrir comme un utilisateur le verrait.

2

Remplissez le formulaire avec des données fictives :
Nom : Test Automatisation
Service : DAF
Date : demain
Destination : Abidjan Plateau — Test
Passagers : 2
Motif : Réunion institutionnelle
E-mail : votre propre adresse (pour recevoir la confirmation)
Urgence : Normal
→ Cliquez Envoyer.

3

Vérifier Power Automate : Allez sur make.powerautomate.com → Mes flux → cliquez votre flux → dans "Exécutions de flux sur les 28 derniers jours", vous devez voir une exécution verte ✓ Réussie. Si rouge, cliquez pour voir l'erreur.

4

Vérifier Excel : Ouvrez onedrive.live.com → ouvrez REGISTRE_VEHICULES_AUTO.xlsx → la ligne de test doit être présente avec toutes les colonnes remplies et le statut "En attente".

5

Vérifier l'email : Ouvrez outlook.com → vous devez avoir reçu l'email de confirmation automatique.

6

Test QR Code : Sur votre téléphone, scannez le QR code téléchargé depuis Forms → le formulaire doit s'ouvrir → soumettez une 2ème ligne → vérifiez que la 2ème ligne apparaît dans Excel.

🎉

Si les 3 vérifications passent (exécution verte, ligne Excel, email reçu) : votre pipeline automatique est opérationnel ! Vous pouvez maintenant partager le lien du formulaire ou le QR code à vos collègues.

🧮 Annexe A — Les expressions Power Automate (fx) expliquées + 12 recettes prêtes à copier
fx

Maîtriser les expressions : du simple collage au calcul conditionnel

📚 Référence permanente

A.1 Où et comment écrire une expression

1

Cliquez dans n'importe quel champ d'une carte (ID_Demande, Objet de l'e-mail, valeur d'une condition…). Un panneau s'ouvre sous le champ avec 2 onglets : Contenu dynamique (⚡) et Expression (fx).

2

Onglet Expression → tapez ou collez la formule → Mettre à jour / Ajouter. Le champ affiche alors la formule, jamais son résultat.

3

Pour mélanger texte + valeur (le cas le plus fréquent), l'expression est inutile : tapez le texte, puis cliquez le jeton ⚡ au milieu du champ. Power Automate fabrique un concat tout seul en arrière-plan.

4

Pour envelopper un jeton dans une fonction (toUpper, trim…) : dans le panneau Expression, tapez toUpper(), placez le curseur entre les parenthèses, puis revenez sur l'onglet Contenu dynamique et cliquez le jeton. Vous obtenez toUpper(«jeton»).

5

Jamais de = au début (contrairement à Excel) et jamais de guillemets doubles : on écrit concat('VEH-', …) avec des apostrophes simples.

6

Le résultat n'est pas prévisualisé : il faut exécuter le flux pour connaître la valeur. D'où le banc d'essai (A.6) et l'usage de Peek code (A.7).

A.2 Les 12 règles du langage d'expression

Power Automate n'invente rien : il utilise le Workflow Definition Language (le même qu'Azure Logic Apps). Cela n'a donc rien à voir avec Excel, DAX ou Python — c'est la première source de confusion.

RègleBon / Mauvais
1. Pas de = au début✅ concat('A','B') — ❌ =concat('A','B')
2. Apostrophes simples uniquement✅ 'En attente' — ❌ "En attente"
3. Nom des fonctions sensible à la casse✅ utcNow() — ❌ utcnow()
4. Arguments séparés par des virgules, tout entre parenthèses✅ formatDateTime(utcNow(),'dd/MM/yyyy')
5. Pas de @ dans l'éditeur fx (le @ n'apparaît que dans le code JSON sous la forme @{…})L'éditeur l'ajoute pour vous
6. Apostrophe dans un texte → doublée✅ 'Demande d''achat'
7. Texte et nombre : conversion explicitestring(int('2') + 3) → « 5 »
8. Les dates se manipulent avec des fonctions dédiées✅ addDays(utcNow(),2) — ❌ utcNow()+2
9. Un jeton de formulaire ne se tape jamais à la mainSon vrai nom est technique : outputs('…')?['body/rxxxxxxxx']
10. Une expression renvoie une seule valeur (texte, nombre, tableau ou objet)Pour repasser en texte : string(…)
11. Booléens en minuscules✅ if(true, …) — ❌ if(True, …)
12. Pas d'enchaînement pointé : on imbrique✅ toUpper(trim(x)) — ❌ x.trim().toUpper()
📌

À retenir : si votre formule ressemble à du DAX ou à une formule Excel, elle ne fonctionnera pas. Une expression Power Automate est un appel de fonction, pas un calcul de cellule.

A.3 Aide-mémoire : les fonctions les plus utiles

FonctionExempleRésultat
concatconcat('VEH-','2026',42)VEH-202642
utcNowutcNow()2026-09-12T08:46:12.3456789Z
utcNow + formatutcNow('yyyyMMdd')20260912
addDays / addHours / addMinutesaddDays(utcNow(),2)même heure, + 2 jours
addToTimeaddToTime(utcNow(),3,'hour')+ 3 heures
formatDateTimeformatDateTime(utcNow(),'dd/MM/yyyy HH:mm')12/09/2026 08:46
convertFromUtcconvertFromUtc(utcNow(),'Africa/Abidjan')heure d'Abidjan (UTC+0, pas de décalage)
ticksticks('2026-09-14T00:00:00Z')nombre de « ticks » (1 tick = 100 ns)
dayOfWeek / dayOfMonth / dayOfYeardayOfWeek('2026-09-14')1 → dimanche = 0, lundi = 1, … samedi = 6
toUpper / toLower / trimtoUpper(trim(' ama '))AMA
replacereplace('A/B','/','-')A-B
substringsubstring('VEH-20260912',0,8)VEH-2026
split · first · last · lengthlast(split('ama@ministere.ci','@'))ministere.ci
joinjoin(createArray('A','B'),' / ')A / B
startsWith / endsWith / containsstartsWith('VEH-12','VEH')true
indexOfindexOf('Terrain/Inspection','/')7
empty / coalescecoalesce(«jeton», '—')« — » si la question est vide
if / equalsif(equals(«jeton»,'Critique'),'🔴','🔵')🔴 ou 🔵
and / or / notand(equals(x,'Oui'),greater(n,2))true / false
greater / less / greaterOrEquals / lessOrEqualsgreater(int(n),5)true si n > 5
add · sub · mul · div · moddiv(mul(2,3),4)1 (division entière)
int / float / stringstring(int('07'))7
guid (ou newGuid)substring(guid(),0,6)a3f91c (code court unique)
base64ToStringbase64ToString('QWJpZGphbg==')Abidjan
uriComponenturiComponent('Abidjan Plateau')Abidjan%20Plateau
item / itemsitems('Appliquer_à_chacun')?['Destination']valeur de la ligne en cours de boucle
📖

Liste volontairement partielle : la référence complète (~140 fonctions) est la page Microsoft « Reference guide to workflow expression functions ». Tout ce qui fonctionne dans Azure Logic Apps fonctionne ici, à l'identique.

A.4 12 recettes prêtes à copier pour CE projet

Remplacez les «jeton» par les jetons ⚡ obtenus via l'onglet Contenu dynamique du panneau Expression (méthode A.1, étape 4). Les recettes marquées Expert ajoutent des colonnes hors registre de base : vous pouvez les tester sans toucher à vos 11 colonnes.

À produireNiveauExpression
ID unique lisible (colonne A)Simpleconcat('VEH-', formatDateTime(utcNow(),'yyyyMMdd-HHmmss'))
ID court anti-doublonProtoUpper(concat('VEH-', formatDateTime(utcNow(),'yyMMdd'), '-', substring(guid(),0,4)))
Horodatage lisible (colonne B)ProformatDateTime(convertFromUtc(utcNow(),'Africa/Abidjan'),'dd/MM/yyyy HH:mm')
Jour en françaisProformatDateTime(utcNow(),'dddd','fr-FR') — si votre version refuse le 3ᵉ argument, faites un if sur dayOfWeek
Nom normaliséSimpletoUpper(trim(«jeton nom»))
Statut enrichi (colonne J)Proif(equals(«jeton urgence»,'Critique'),'URGENT — à traiter','En attente')
Priorité numérique (nouvelle colonne L)Expertif(equals(«jeton urgence»,'Critique'),1,if(equals(«jeton urgence»,'Urgent (24h)'),2,3))
Échéance de traitement (colonne M)ExpertaddHours(utcNow(), if(equals(«jeton urgence»,'Critique'),4,24))
Domaine de l'adresse e-mail (colonne N)Prolast(split(«jeton e-mail»,'@'))
Jours restants avant la missionExpertdiv(sub(ticks(«jeton date»), ticks(utcNow())), 864000000000)
Formule de politesse selon le serviceSimpleif(equals(«jeton service»,'DAF'),'Madame, Monsieur le Directeur','Bonjour')
Objet d'e-mail dynamiqueProconcat('Demande véhicule — ', «jeton destination», ' — ', if(equals(«jeton urgence»,'Critique'),'🔴 CRITIQUE','normale'))
🧪

Trois précautions : (1) la fonction ticks attend un horodatage ISO complet — si le format renvoyé par Forms la fait échouer, intercalez un formatDateTime ; (2) une recette qui renvoie null n'empêche pas les autres colonnes de s'écrire : elle vide seulement la sienne ; (3) attention à l'unicité de l'ID — la recette « simple » n'a que la précision de la seconde : deux demandes envoyées dans la même seconde produisent le même identifiant, et tout mécanisme d'anti-doublon (B.4) ou de mise à jour par clé (B.3) en perdra une silencieusement. Ajoutez un suffixe aléatoire, comme dans la recette « ID court anti-doublon » ci-dessus, ou utilisez triggerOutputs()?['body/responseId'] qui est unique par construction.

A.5 Jeton ⚡ ou expression fx : que choisir ?

SituationÀ utiliserPourquoi
Écrire une réponse telle quelleJeton ⚡ seulZéro faute possible, valeur brute fiable
Ajouter du texte autour d'une réponseJeton + texte tapé dans le même champLe concepteur génère le concat automatiquement
Transformer une réponse (majuscules, nettoyage, découpage, calcul)Fonction fx + jeton entre parenthèsesSeule façon d'appliquer un traitement
Réutiliser la même valeur calculée dans 3 champsAction Composer (A.6) + jeton « Sorties »Calculée une fois, réutilisée partout, lisible dans l'historique
Prendre une décision (si / sinon)Action Condition (Annexe B.1)Bien plus clair que des if imbriqués
🔍

Voir la vraie syntaxe : menu ⋯ d'une carte → Peek code. Vous y lisez le JSON réel, par exemple "Statut": "@{if(equals(triggerOutputs()?['body/r1a2b'],'Critique'),'URGENT','En attente')}". C'est le meilleur outil de diagnostic et de copie d'expression.

A.6 Banc d'essai : tester une expression avec l'action « Composer »

Le concepteur n'affiche jamais le résultat d'une expression : il faut exécuter le flux. Voici la méthode rapide, sans polluer votre flux final.

1

Dans votre flux (ou un flux de test), + Nouvelle étape → recherchez composer → connecteur Données → action Composer.

2

Cliquez le champ Entrées → onglet Expression (fx) → collez la formule à tester, par exemple div(sub(ticks('2026-09-20T00:00:00Z'),ticks(utcNow())),864000000000) → Mettre à jour.

3

Renommez le Composer TEST — jours restants. Vous pouvez le déplacer librement sur le canevas (clic-glisser) : il ne perturbe pas le reste du flux.

4

Déclenchez le flux (une soumission de test) → ouvrez l'exécution → cliquez la carte du Composer → le bloc Sorties affiche le corps : c'est la valeur calculée, exactement ce qui partira dans Excel.

5

Recette validée ? Deux options : (a) garder le Composer et réutiliser son jeton Sorties partout où la valeur est nécessaire ; (b) copier la formule validée directement dans le champ de destination puis supprimer le Composer.

✔

Trois usages supplémentaires du Composer : documenter un calcul au milieu du flux ; sécuriser les champs vides avec coalesce(«jeton», '') ; et fabriquer une clé unique réutilisée ensuite par l'action « Mettre à jour une ligne » (Annexe B.3).

A.7 Dépanner une expression : les 9 messages d'erreur et leur cause

Message affichéCause réelleCorrection
Unable to parse expression / InvalidTemplateParenthèse, apostrophe ou virgule manquante ; guillemets doubles employésRecopiez la formule depuis cette annexe, comptez les ( et ), remplacez " par '
The function 'utcnow' is not definedCasse incorrecte dans le nom de la fonctionÉcrivez exactement utcNow, concat, formatDateTime
… expects its parameter X to be of type 'Int'Du texte est passé là où un nombre est attenduEnveloppez la source : int(«jeton passagers») avant l'opération
La colonne Excel est vide / contient nullQuestion facultative non remplie, ou jeton provenant d'un autre formulairecoalesce(«jeton»,'—') et vérifiez l'ID du formulaire dans le déclencheur
The template language expression … cannot be evaluatedUn jeton a été tapé à la main au lieu d'être inséré au clicVidez le champ, puis réinsérez le jeton depuis ⚡ (règle 9 de A.2)
La date s'affiche en anglais ou est décaléeAucun format spécifié, ou fuseau UTC affiché brutformatDateTime(…,'dd/MM/yyyy') et convertFromUtc(…,'Africa/Abidjan')
Le nombre de passagers devient « 2,0 » ou « 02 »Type flottant conservé, ou zéro de têtestring(int(«jeton passagers»))
Une condition renvoie true au mauvais momentComparaison de types différents ou espaces/accents parasitesNormalisez les deux côtés : toLower(trim(x))
Tout fonctionne mais une carte rouge « Composer » apparaîtLe Composer de test contient une formule erronéeCorrigez-le ou supprimez-le avant de remettre le flux en production
🩺

Ordre de diagnostic recommandé : 1) Vérificateur de flux (erreurs de structure) → 2) exécuter et lire la carte rouge (message + entrées/sorties) → 3) Peek code pour comparer la formule écrite et la formule exécutée → 4) Réexécuter l'action seule après correction (les jetons sont rejoués à l'identique, ce qui accélère énormément les essais).

🚀 Aller plus loin — aperçu (le mode d'emploi complet est en Annexe B)
🔔

Alerte urgence → B.1

Ajoutez une condition dans le flux : si Urgence = "Critique" → envoyer aussi un SMS ou email à votre responsable.

📊

Connecter à Power BI → B.7

Dans Power BI Desktop → Obtenir des données → Excel → sélectionnez REGISTRE_VEHICULES_AUTO.xlsx → votre dashboard se met à jour à chaque nouvelle demande.

📋

2ème formulaire Fournitures

Répétez exactement le même processus pour un formulaire "Demande Fournitures" → Excel REGISTRE_FOURNITURES. Vous maîtrisez maintenant la méthode.

📅

Relance auto J+2 → B.5

Créez un 2ème flux planifié (chaque matin à 9h) qui vérifie Excel → lignes "En attente" depuis plus de 2 jours → envoie une relance automatique.

🚀 Annexe B — Aller au-delà : 9 automatisations avancées, mode d'emploi
B

De l'exercice à une vraie application métier

📚 À faire dans l'ordre de votre choix

B.1 Escalade automatique : si Urgence = « Critique »

1

Entre l'action Excel (4.5) et l'e-mail (4.6), cliquez + Nouvelle étape → recherchez condition → action Condition (catégorie Contrôle).

2

Choisir une valeur : cliquez le champ → ⚡ → jeton Réponse à Q7 — Niveau d'urgence. Opérateur : est égal à. Valeur : tapez Critique (respectez la casse du formulaire).

3

Branche Si oui → Ajouter une action → Envoyer un e-mail (V2) au responsable, avec un objet construit par expression : concat('🔴 URGENT — ', «jeton destination»).

4

Branche Si non : laissez-la vide — l'e-mail standard de 4.6 part de toute façon. Une branche vide est un choix valide et lisible.

5

Variante 3 niveaux : remplacez la Condition par l'action Basculer (Switch) sur le même jeton, avec 2 cas (Critique, Urgent (24h)) et le Cas par défaut pour Normal.

✉️

Pourquoi une Condition plutôt qu'une expression if : la Condition crée un bloc visible dans l'historique (la branche empruntée s'affiche en vert), accepte plusieurs actions, et reste lisible par un collègue. Règle d'or : les expressions pour les valeurs, les conditions pour les décisions.

B.2 Notifier l'équipe dans Microsoft Teams

1

Placez-vous dans la branche « Si oui » (B.1) ou juste après l'action Excel : + Nouvelle étape → Microsoft Teams → action Publier un message dans une conversation ou un canal (anciennement « Publier un message (V3) »). Vous devez être membre de l'équipe/canal visé.

2

Choisissez Équipe et Canal dans les listes, puis composez le Message en mélangeant texte et jetons ⚡ :

🚗 Nouvelle demande de véhicule Demandeur : «jeton Q1» — Service : «jeton Q2» Destination : «jeton Q4» — Passagers : «jeton Q5» Motif : «jeton Q6» — Urgence : «jeton Q7» Statut : En attente de validation
3

Variante moderne : action Publier une carte adaptative (Adaptive Card) — rendu cliquable dans Teams (boutons Approuver / Voir le registre) au lieu d'un simple texte.

4

Anti-bruit : n'envoyez dans Teams que l'essentiel — enveloppez la publication dans une Condition « Urgence = Critique » (B.1) et laissez l'e-mail gérer le reste.

🧩

Si l'action Teams n'apparaît pas : Teams doit être autorisé pour votre compte (même logique qu'en 4.0). Le connecteur « Teams » a plusieurs actions similaires selon les versions — cherchez simplement teams puis message et choisissez celle qui demande Équipe + Canal.

B.3 Circuit d'approbation : valider, puis mettre à jour la ligne Excel

C'est LE scénario qui transforme l'exercice en véritable application métier : le gestionnaire reçoit la demande, clique Approuver, et Excel se met à jour tout seul.

1

Pré-requis Excel : la colonne A — ID_Demande doit contenir des valeurs uniques. L'action Mettre à jour une ligne exige une colonne clé et le nom de champ est sensible à la casse.

2

Dans le flux : + Nouvelle étape → connecteur Approbations → action Démarrer et attendre une approbation.

3

Type : Approuver/Refuser. Titre : concat('Véhicule — ', «jeton destination»). Affecté à : l'e-mail du responsable. Détails : collez les jetons Q1 → Q8 + l'ID de demande créé en 4.5.

4

Ajoutez ensuite Excel Online (Business) → Mettre à jour une ligne : même fichier, même tableau, Colonne clé = ID_Demande, Valeur de clé = le jeton du Composer (A.6) qui porte l'ID. Pour le champ Statut :

if(equals(«jeton décision»,'Approuver'),'Approuvé','Refusé')
5

Terminez par un e-mail de décision au demandeur, objet concat('Votre demande est ', «jeton décision»). Le flux reste « en cours » plusieurs jours : c'est normal, l'approbation arrive par Teams / e-mail / application mobile.

🔑

Piège fréquent : si la colonne clé contient deux fois la même valeur, seule la première ligne est modifiée — sans message d'erreur. D'où l'intérêt de la recette « ID court anti-doublon » (A.4) et de son unicité garantie.

B.4 Refuser les doublons (contrôle avant écriture)

1

Placez-vous avant l'action « Ajouter une ligne » : + Nouvelle étape → Excel Online (Business) → Répertorier les lignes présentes dans un tableau.

2

Sélectionnez le fichier et le tableau, puis ouvrez Options avancées → Filtrer la requête :

Destination eq '@{«jeton destination»}'
3

(Filtre OData : un seul opérateur par colonne — eq, ne, contains, startswith, endswith — et le nom de colonne doit être exact.) Ajoutez ensuite une Condition sur la longueur du résultat : Longueur de valeur est égal à 0, ou l'expression empty(«Sorties du Répertorier»?['value']).

4

Branche Si oui (aucune ligne trouvée) : l'écriture normale dans Excel. Branche Si non : e-mail « doublon détecté » et arrêt du flux — ou poursuite, à vous de décider selon le métier.

⚠️

Limites à connaître : « Répertorier les lignes présentes dans un tableau » renvoie 256 lignes par défaut (activez la pagination dans les paramètres de l'action pour tout obtenir), et le filtrage peut être légèrement différé par rapport à l'affichage Excel. Au-delà de quelques milliers de lignes, migrez vers SharePoint ou Dataverse.

B.5 Relance automatique J+2 (deuxième flux, planifié)

1

Créez un nouveau flux : + Créer → Flux cloud planifié → nom Relance véhicules en attente.

2

Déclencheur « Récurrence » : Intervalle = 1, Fréquence = Jour, Heure = 09:00, Fuseau = UTC (Abidjan = UTC+0, donc 09:00 = 09:00 locale). Pour ne tourner que du lundi au vendredi, ajoutez une Condition :

and(greater(dayOfWeek(utcNow()),0), less(dayOfWeek(utcNow()),6)) // dimanche = 0 … samedi = 6 → vrai du lundi (1) au vendredi (5)
3

Action Répertorier les lignes présentes dans un tableau avec le filtre Statut eq 'En attente'.

4

Appliquer à chacun sur la valeur retournée, puis une Condition « la demande date de plus de 2 jours ». Deux méthodes :

// a) comparaison directe de la date d'échéance calculée par le 1er flux less(«jeton Date_Relance de la ligne», utcNow()) // b) ou calcul à la volée sur la date de soumission de la ligne less(addDays(items('Appliquer_à_chacun')?['Date_Soumission'], 2), utcNow())
5

Si oui : Envoyer un e-mail (V2) de relance. Récupérez les valeurs de la ligne en cours de boucle : items('Appliquer_à_chacun')?['Nom_Demandeur'], items('Appliquer_à_chacun')?['Destination']… (Dans la boucle elle-même, item()?['Colonne'] suffit ; items('Nom de la boucle') fonctionne partout, même imbriqué.)

6

Évitez les relances en double : après l'envoi, faites une action Mettre à jour une ligne pour passer un champ Relance_Envoyee à Oui (clé = ID_Demande), et filtrez Relance_Envoyee ne 'Oui'.

💡

Variante « datée » plus simple : faites remplir par le premier flux une colonne Date_Relance = addDays(utcNow(),2), puis filtrez directement dans le flux planifié : Date_Relance eq '@{formatDateTime(utcNow(),'yyyy-MM-dd')}' — plus besoin de boucle ni de calcul.

B.6 Aller plus loin avec Excel : exécuter un script Office

Le connecteur Excel Online (Business) propose aussi l'action Exécuter le script : elle lance un Office Script (TypeScript) enregistré dans le classeur. C'est la manière propre de faire ce qu'une formule ou une expression ne permettent pas.

1

Ouvrez le classeur dans Excel pour le web → onglet Automatiser → Nouveau script → nommez-le MiseEnForme → collez le code ci-dessous → Enregistrer.

// Office Script : met en évidence la dernière ligne ajoutée au tableau function main(workbook: ExcelScript.Workbook) { const table = workbook.getTable("DemandesVehicules"); const nb = table.getRowCount(); const derniere = table.getRangeBetweenHeaderAndTotal().getRow(nb - 1); derniere.getFormat().setFillColor("#FEF3C7"); // fond ambre table.getRangeBetweenHeaderAndTotal().getFormat().setColumnWidth(140); }
2

Dans le flux : Excel Online (Business) → action Exécuter le script → Fichier = votre classeur, Script = MiseEnForme. Placez-la juste après « Ajouter une ligne ».

3

Autres scripts utiles : appliquer une couleur selon l'urgence, ajuster/figer les colonnes, calculer un vrai numéro séquentiel, protéger la feuille, générer un récapitulatif quotidien, exporter un PDF.

🧩

Conditions d'emploi : le classeur doit rester sur OneDrive/SharePoint, l'action n'existe que là où Office Scripts est disponible, et chaque appel consomme du temps de flux. Le format .xlsm est également accepté par cette action.

B.7 Fermer la boucle : rafraîchir Power BI à chaque demande

1

Dans Power BI Desktop : Accueil → Obtenir des données → Excel (ou OneDrive / Web) → sélectionnez REGISTRE_VEHICULES_AUTO.xlsx → chargez la table DemandesVehicules.

2

Publiez le rapport dans un espace de travail, puis Paramètres du jeu de données → Actualisation planifiée (2 fois par jour suffisent souvent). C'est la voie la plus robuste. (Rappel : cette étape est l'Exercice 02 de ce parcours.)

3

Pour une actualisation à la demande, juste après l'écriture Excel, ajoutez dans le flux l'action Power BI → Actualiser un jeu de données (Espace de travail + Jeu de données + notification d'échec). Cette action dépend de votre licence Power BI (Pro/Premium pour le propriétaire du jeu de données).

4

Mesures DAX prêtes à coller sur ce registre :

Demandes = COUNTROWS(DemandesVehicules) EnAttente = CALCULATE([Demandes], DemandesVehicules[Statut] = "En attente") Critiques = CALCULATE([Demandes], DemandesVehicules[Urgence] = "Critique") TauxOK = DIVIDE(CALCULATE([Demandes], DemandesVehicules[Statut] = "Approuvé"), [Demandes]) DelaiMoyen = AVERAGEX(DemandesVehicules, DATEDIFF(DemandesVehicules[Date_Soumission], DemandesVehicules[Date_Mission], HOUR))
📊

Vous venez de fermer la boucle complète : Forms (saisie, même depuis un QR code) → Power Automate (contrôle, écriture, notification, approbation) → Excel (source de vérité) → Power BI (pilotage) → Teams / e-mail (restitution). C'est une architecture d'entreprise réalisée avec des outils gratuits.

B.8 Rendre le flux incassable : portée + « configurer l'exécution après »

1

Portée (Scope) : + Nouvelle étape → catégorie Contrôle → Portée. Glissez-y (clic-glisser) les actions 4.3 → 4.6. Vous obtenez un bloc qui réussit ou échoue « en un seul point ».

2

Branche de secours : ajoutez une seconde Portée nommée Gestion d'erreur, puis sur sa première action → menu ⋯ → Configurer l'exécution après → cochez a échoué, a été ignoré et expiré (décochez « a réussi »).

3

Dans cette branche : un Envoyer un e-mail (ou Teams) d'alerte, l'expression result('Portée') pour détailler les erreurs, puis l'action Arrêter (Terminate) en statut Échec pour que l'exécution reste visible en rouge dans le tableau de bord.

4

Stratégie de nouvelle tentative : sur l'action Excel → Paramètres → Stratégie de nouvelle tentative → 4 essais, intervalle fixe 20 s. Indispensable quand OneDrive répond lentement (pannes temporaires très fréquentes).

🛡️

Résultat : plus de demandes « perdues en silence ». Chaque échec produit une alerte lisible et l'historique conserve la trace complète (entrées/sorties JSON de chaque carte) — la base de tout audit.

B.9 Passer de l'exercice à la production : 8 bonnes pratiques

PratiquePourquoi
Nommer chaque carte (1. Lire la réponse, 2. Écrire dans Excel…)Historique lisible, expressions outputs('…') compréhensibles, reprise possible par un collègue
Tout dans le même compte (formulaire + classeur + flux)Évite l'immense majorité des erreurs « fichier introuvable » et « formulaire non listé »
Colonnes sans accents ni espaces (ID_Demande)Le nom de colonne devient une clé technique dans l'API Excel : il doit être stable
Un flux = un objectif5 flux clairs de 6 actions valent mieux qu'un flux de 40 actions impossible à dépanner
Solutions + références de connexion (mode pro)Transportez vos flux d'un environnement à l'autre sans reconfigurer adresses et comptes
Documenter (notes de carte, Composer « documentation »)Vous comprendrez encore votre flux dans six mois — et quelqu'un d'autre aussi
Surveiller les échecs (analytique des flux, alerte d'échec)Un flux qui échoue sans alerte est plus dangereux qu'une tâche manuelle oubliée
Vérifier les quotas et licences (Paramètres → Afficher mes licences)La licence gratuite est plafonnée (≈ 750 exécutions/mois selon les conditions en vigueur) ; au-delà, prévoyez une licence adaptée
🚀

Décliner la méthode : demande de fournitures, réservation de salle, note de frais, fiche d'incident informatique, suivi de marchés, collecte de rapports terrain, signalement d'incident environnemental… Chaque fois le même squelette : Forms → contrôle → Excel/SharePoint → notification → tableau de bord.

✈️ Annexe C — Mode hors-ligne : travailler sans Internet
✈️

Consulter l'exercice et collecter des données sans connexion

📚 Selon les besoins
🔎

La vérité d'abord : Microsoft Forms et Power Automate sont des services cloud — ils ne fonctionnent pas sans Internet, quelles que soient vos licences. « Mode hors-ligne » signifie donc ici deux choses concrètes : (1) pouvoir consulter ces exercices sans connexion, et (2) continuer à collecter des demandes avec une application locale, puis rejoindre le registre en ligne au retour du réseau.

👉 Pour les alternatives natives de Microsoft 365 (Power Apps mobile, application Microsoft Lists, Excel mobile, Outlook hors ligne) et pour brancher cette collecte hors-ligne directement dans Power Automate, voir l'Annexe E — Hors-ligne dans Microsoft 365.

C.1 Ce qui marche hors ligne et ce qui ne marche pas

BesoinHors ligne ?Solution
Consulter ces 3 exercices (cette page incluse)✅ OuiVisitez la page une fois en ligne : le service worker la garde en cache. Ou enregistrez le fichier (Ctrl+S) — chaque page est autonome (aucun CDN).
Saisir et enregistrer une demande de véhicule✅ OuiApplication hors-ligne (voir C.2) : formulaire, registre, récépissé.
Suivre, valider, affecter un véhicule, éditer des statistiques✅ OuiRegistre intégré de l'application hors-ligne (statut, véhicule, indicateurs).
Exporter vers Excel / Power BI✅ OuiExport CSV, copier-coller, sauvegarde JSON — puis import au retour du réseau.
Imprimer un formulaire ou un récépissé✅ OuiFormulaire papier et récépissé imprimables intégrés.
Microsoft Forms (créer un formulaire, recevoir des réponses)❌ NonService cloud : forms.office.com exige une connexion.
Power Automate (créer ou exécuter un flux)❌ NonLe déclencheur lui-même est hébergé dans le cloud.
Excel Online / OneDrive (le registre partagé)❌ NonCloud — mais Excel Desktop fonctionne hors ligne et se resynchronise ensuite.
Envoi automatique de l'e-mail de confirmation❌ NonOutlook Desktop peut préparer les messages hors ligne ; l'envoi part au retour du réseau.
Power BI Desktop (modélisation, rendu du rapport)✅ OuiLe document local s'ouvre hors ligne ; seule l'actualisation des données demande le réseau.
Power Automate Desktop (automatisation du poste)⚠️ PartielAutomatise des tâches locales, mais la licence et les flux sont vérifiés en ligne régulièrement.

C.2 L'application hors-ligne : formulaire, registre, export Excel

Une application autonome (un seul fichier, sans compte, sans connexion) qui reproduit l'essentiel du pipeline : formulaire Q1→Q8, registre local modifiable, indicateurs, export CSV/Excel, récépissé imprimable et formulaire papier.

1

Ouvrez l'application (bouton ci-dessus). Elle fonctionne aussi depuis une clé USB : un seul fichier HORS_LIGNE_VEHICULE.html à double-cliquer, aucun serveur, aucune installation.

2

Saisissez les demandes dans l'onglet « Nouvelle demande » : les champs obligatoires sont contrôlés et la date par défaut est proposée (J+1). À la validation, l'application calcule l'ID (VEH-AAAAMMJJ-hhmmss), la priorité, l'échéance et le domaine e-mail — exactement les recettes de l'Annexe A.4.

3

Travaillez le registre dans le 2ᵉ onglet : recherche, filtres par statut et par urgence, changement de statut (En attente / Approuvé / Refusé), attribution d'un véhicule, suppression d'une ligne et 6 indicateurs en haut de page.

4

Exportez (3ᵉ onglet) : CSV avec point-virgule et BOM UTF-8 (s'ouvre directement dans Excel, accents compris), copier-coller vers un tableau Excel ouvert, ou sauvegarde JSON (archivage et restauration).

5

Rejoignez le registre en ligne au retour du réseau : dans Excel Online, Données → À partir d'un texte/CSV → déposez le fichier, puis faites rejoindre la table DemandesVehicules. Les colonnes A→K portent exactement les mêmes noms : aucun retraitement.

🔐

Où vont les données ? Nulle part : elles restent dans le stockage local du navigateur, sur votre poste. Aucune requête réseau. Conséquence : elles ne se synchronisent pas entre collègues et disparaissent si l'on vide le cache — exportez le CSV en fin de journée.

C.3 Variante 100 % locale, sans aucun compte Microsoft

Si vous ne pouvez utiliser ni Forms ni Power Automate (pas de compte, pas de connexion, ou contrainte administrative), le même résultat s'obtient uniquement avec des outils de bureau :

BriqueRôleÉquivalent en ligne
Application hors-ligne (cette annexe)Saisie du formulaire, registre, indicateurs, exportForms + Power Automate
Excel Desktop + tableau structuré DemandesVehiculesRegistre officiel, formules, listes déroulantes de validationExcel Online
Power Query (Excel)Consolider plusieurs CSV, nettoyer accents/casse, fusionner les doublons d'IDPower Automate (partie transformation)
Tableaux croisés dynamiquesIndicateurs : demandes par service, par urgence, délais moyensPower BI (version simple)
Power BI DesktopTableau de bord et graphiques (Exercice 02)Power BI Service
Outlook DesktopPréparer le récépissé à partir du texte copié ; envoi au retour du réseauEnvoyer un e-mail (V2)
Power Automate DesktopAutomatiser les tâches du poste : ouvrir Excel, renommer, imprimer, archiverFlux cloud planifié
✅

Bonne nouvelle : les Exercices 01 (Excel/TCD) et 02 (Power BI) de ce parcours se font déjà entièrement hors ligne. Cette annexe ne fait que compléter la chaîne avec la collecte des demandes.

C.4 Vérifier que le mode hors-ligne fonctionne (3 tests)

1

Test visuel : un badge apparaît en bas à gauche de chaque page d'exercice — « 🌐 En ligne — version hors-ligne prête » en vert. S'il reste absent, vérifiez que la page est bien ouverte en https:// (le service worker est refusé en file://) puis rechargez une fois.

2

Test de cache : F12 → onglet Application (Chrome/Edge) → Service Workers : sw.js doit être activated and is running. Dans Cache Storage, le cache demo-exercices-v1 contient les 5 pages.

3

Test réel (le seul qui compte) : coupez le Wi-Fi, puis appuyez sur F5. La page doit s'afficher et le badge passer en orange « ✈️ Hors-ligne — consultation possible ». Refaites le test sur les 3 exercices et sur l'application hors-ligne.

4

Sur téléphone / tablette : ouvrez la page puis, dans le menu du navigateur, Ajouter à l'écran d'accueil. L'icône ouvre l'exercice ou l'application même sans réseau.

⚠️

Limites du cache : (1) la première visite doit se faire en ligne, sinon il n'y a rien à mettre en cache ; (2) en navigation privée, cache et service worker sont effacés à la fermeture ; (3) si une page est modifiée sur le serveur, la version en ligne gagne toujours dès que le réseau est disponible (stratégie « réseau d'abord ») — aucun risque de contenu figé.

💾

Encore plus simple, sans service worker : chaque page est un fichier autonome (aucun CDN, aucune police externe). Ctrl+S sur une page, et vous obtenez un fichier consultable hors ligne partout, même depuis une clé USB, sans aucun réglage navigateur.

C.5 L'envoi des données : synchronisation automatique au retour du réseau

C'est la brique qui manquait. Saisir hors ligne ne sert à rien si l'information reste prisonnière du poste : voici le mécanisme offline-first complet, tel qu'il est implémenté dans l'application hors-ligne et testé de bout en bout.

Le principe en 4 temps

TempsCe qui se passe
1. Saisie hors ligneLa demande est enregistrée localement avec l'état 🕓 en attente. Le registre reste complet, modifiable et exportable.
2. File d'attenteLe nombre de demandes non transmises est affiché : compteur dans l'onglet Synchronisation, pastille sur chaque ligne du registre, indicateur en haut du registre local.
3. Retour du réseauL'application détecte la reconnexion (événement du navigateur + sonde de connectivité réelle) et envoie toute la file en une seule requête JSON.
4. Accusé du serveurLe service répond la liste des identifiants acceptés ; l'application marque ces demandes ✅ envoyé. Ce qui n'a pas été accepté reste en file : rien n'est perdu, et rien n'est envoyé deux fois.

Ce que fait le service de réception (sync.php sur ce serveur)

ContrôleDétail
Jeton partagéRequête rejetée en 403 si le jeton ne correspond pas (envoi comme test de connexion).
Contrôle de volume256 Ko maximum par envoi, 200 demandes maximum par requête.
Nettoyage des champsLongueurs plafonnées, suppression des caractères de contrôle, normalisation des espaces — aucune donnée brute n'est écrite telle quelle.
Anti-doublonIndex persistant des identifiants : une demande déjà reçue est ignorée et signalée comme telle. C'est précisément pour cela que l'identifiant doit être unique : l'application y ajoute un suffixe aléatoire, sinon deux demandes saisies dans la même seconde en auraient perdu une silencieusement.
Écriture fiableAjout en CSV (les 15 mêmes colonnes, séparateur « ; », BOM UTF-8) avec verrouillage de fichier pour résister aux envois simultanés.
ConfidentialitéLe fichier est conservé hors de la racine web : il n'est pas téléchargeable depuis Internet (vérifié : réponse 404).
TraçabilitéJournal d'audit horodaté : adresse IP, nombre de lignes reçues / acceptées / ignorées, refus.
Anti-abus60 envois par heure et par adresse IP ; au-delà, réponse 429.

Mise en route : 2 champs, 2 minutes

1

Ouvrez l'application hors-ligne et cliquez l'onglet 🔄 Synchronisation. Sans adresse configurée, l'application reste 100 % locale : rien n'est envoyé, vous utilisez l'export CSV.

2

Adresse du service : tapez sync.php (relatif : fonctionne quand l'application est ouverte depuis le site). Sur une clé USB, saisissez l'adresse complète https://zeinabdigitlab.ddns.net/Demo_Exercices/sync.php.

3

Jeton partagé : recopiez exactement la valeur de la constante JETON_ATTENDU du fichier sync.php sur le serveur — changez-la avant tout usage réel.

4

Cochez « Envoyer automatiquement au retour du réseau », cliquez 💾 Enregistrer, puis 🔌 Tester la connexion : le serveur répond le nombre de demandes qu'il détient déjà. C'est prêt.

Récupérer et exploiter les demandes reçues

Fichier créé sur le serveurRôle
…/vehicules/registre_hors_ligne.csvLes données — mêmes 15 colonnes que le registre en ligne. S'ouvre en double-clic dans Excel.
…/vehicules/index_ids.jsonIndex des identifiants déjà reçus (mécanisme anti-doublon).
…/vehicules/sync_log.jsonlJournal d'audit : un enregistrement par envoi (heure UTC, IP, compteurs).
…/vehicules/limite_ip.jsonCompteurs de la limitation anti-abus par adresse IP.
💻

Récupération : le dossier est hors de la racine web, donc non téléchargeable par navigateur. Copiez-le par SSH — scp -i «votre clé» root@76.13.39.30:/var/www/mg-digitalisation-data/vehicules/registre_hors_ligne.csv . — puis ouvrez-le dans Excel, ou chargez-le dans Power BI, ou fusionnez-le dans la table DemandesVehicules déjà utilisée par l'Exercice 03.

Ce que cette solution ne couvre pas (à savoir avant la production)

LimiteConséquence / parade
Le jeton n'est pas un secretIl est visible dans le code de la page : il bloque les envois accidentels, pas un attaquant. En production, préférez un déclencheur HTTP Power Automate (authentifié) ou une authentification par compte.
Pas de fusion de modifications concurrentesSi un même identifiant est modifié à la fois hors ligne et côté serveur, le serveur conserve la première version reçue. Pour un travail à plusieurs rédacteurs, passez à SharePoint ou Dataverse.
Les files d'attente sont par posteDeux agents sur deux ordinateurs = deux files séparées, fusionnées à l'arrivée grâce à l'unicité des identifiants. C'est le comportement attendu, mais cela implique de ne pas saisir deux fois la même demande.
Pas de chiffrement applicatifLe HTTPS protège le transport ; les données sont en clair dans le navigateur et dans le CSV. Sur un poste partagé : exporter puis vider le registre en fin de journée.
Pas d'e-mail automatiqueCette brique remplace l'envoi vers Excel, pas les notifications : combinez-la avec l'Annexe B (Teams, approbations) ou un flux Power Automate qui lit le CSV.
🧪

Vérifié en conditions réelles : l'ensemble de cette mécanique (file d'attente, envoi manuel et automatique, anti-doublon, identifiants uniques, pertes de réseau, jeton invalide, service injoignable, reprise après correction) est couvert par 27 tests automatisés sur un vrai navigateur, tous au vert, sans aucune erreur JavaScript. Le service PHP a de son côté été testé directement (envoi, doublon, 403, fichiers écrits, 404 depuis Internet).

🔁 Annexe D — Améliorer le workflow : à qui d'autre envoyer l'e-mail, et quoi optimiser
🔁

Faire passer le pipeline du « ça marche » au « c'est professionnel »

📚 À appliquer par vagues
✅

Bonne nouvelle : votre pipeline fonctionne déjà. Il n'y a donc rien à refaire, seulement des choses à ajouter. Chaque amélioration ci-dessous est autonome : vous pouvez n'en appliquer qu'une seule, sans toucher au reste.

D.1 Diagnostic : les 5 limites du pipeline de base

Limite actuelleConséquence concrète sur le terrainTraitée en
Un seul destinataire : le demandeurLe chef de service et la cellule parc auto ignorent la demande tant qu'ils n'ouvrent pas Excel — d'où les retards et les « je n'étais pas au courant ».D.2
Aucune notification du gestionnaireLe registre se remplit tout seul, mais personne n'est poussé à agir : le suivi repose sur la vigilance humaine.D.2 + B.2
Pas de cycle de vie après la demandeL'e-mail promet « réponse sous 24h » alors que rien ne gère l'affectation, le bon de sortie, le retour de mission ni la clôture.B.3 + D.3
Aucun contrôle d'intégritéDoublons, adresse e-mail vide, destination fantaisiste : des lignes inexploitables et des confirmations impossibles à envoyer.4.9 + B.4 + D.3
Rien ne mesure l'activitéImpossible de justifier le nombre de véhicules, les coûts, les délais ou les services les plus demandeurs.B.7 + D.3
🎯

La question à se poser pour chaque amélioration : « Qui a besoin de cette information, à quel moment, par quel canal ? ». C'est exactement l'objet de la partie suivante.

D.2 « Et si l'autre devait aussi recevoir l'e-mail ? » — 5 façons de faire

Tout se joue dans l'action Envoyer un e-mail (V2) : elle possède les champs À, CC et Cci, et chacun accepte plusieurs adresses séparées par un point-virgule. Reste à choisir d'où viennent ces adresses.

SolutionComment faireQuand l'utiliser
1. CC fixe
le plus rapide
Champ CC : tapez les adresses en dur — moyens.generaux@ministere.ci; parc.auto@ministere.ciDémarrage immédiat, une ou deux adresses d'unité qui ne changent pas
2. Groupe de distribution
recommandé
Créez un groupe Microsoft 365 (ex. Parc Automobile) et mettez cette seule adresse en CCPlusieurs personnes doivent être informées et elles changent : on gère le groupe, pas le flux
3. Annuaire dans Excel
le plus « métier »
Une 2ᵉ table Annuaire (Service → E-mail responsable, E-mail parc) relue par le flux, puis injectée dans le CCUn valideur différent par service (DAF, DRH, DGE…) et vous voulez tout piloter depuis Excel
4. Basculer (Switch) sur le serviceUne action Basculer, un cas par service, qui remplit une variable « Destinataires_CC »Peu de services (≤ 6) et pas d'annuaire à maintenir
5. Le demandeur désigne son responsableQuestion facultative « E-mail de votre responsable » (Q9) injectée en CCLes responsables tournent souvent, ou le demandeur sait mieux qui informer
⛔

À ne jamais faire : fabriquer une adresse par concaténation — par exemple concat('chef.', «jeton service», '@ministere.ci'). Si la convention de nommage n'est pas respectée à la lettre, l'e-mail part dans le vide sans aucun message d'erreur : le flux reste « vert » alors que personne n'a été prévenu. Utilisez un annuaire, un groupe de distribution ou une question du formulaire.

Qui doit recevoir quoi ? (le tableau à faire valider par votre hiérarchie)

DestinataireCe qu'il doit savoirChampMoment
👤 DemandeurSa demande est prise en compte, avec sa référence et le délai annoncéÀSoumission
👔 Chef de serviceUn agent de son service engage un véhicule (contrôle, visa)CCSoumission
🚗 Cellule parc autoUne demande à traiter, avec tous les éléments pour affecter un véhiculeCC + TeamsSoumission
🗄️ Secrétariat / archivesCopie pour classement, sans encombrer la conversationCciSoumission
🧑‍✈️ Chauffeur assignéSa mission : heure, prise en charge, destination, passagersÀ (autre e-mail)À l'affectation, pas à la soumission
💰 DAF / contrôle de gestionVolumes, coûts et délais (vue agrégée, pas demande par demande)RapportHebdomadaire ou mensuel (axe 5)
📌

Deux règles d'or : ① 2 destinataires maximum en « À », tout le reste en CC ou Cci ; ② on n'informe pas tout le monde au même moment — le chauffeur n'a que faire d'une demande non encore affectée, et 60 e-mails à tout le ministère pour une voiture, c'est le meilleur moyen de faire classer votre flux en indésirable.

D.2+ Mode opératoire : le CC « responsable du service » via un annuaire Excel

C'est la variante la plus utile en administration : chaque direction a son propre valideur. Comptez 20 minutes, sans rien casser de ce qui existe.

1

Dans le même classeur, ajoutez une 2ᵉ feuille Annuaire avec 3 colonnes : Service, Email_Responsable, Email_Parc. Une ligne par service (DAF, DRH, DEEE, DGE, DTM, Direction). Convertissez la plage en tableau structuré (Insertion → Tableau) et nommez-le Annuaire — exactement la méthode de l'Étape 3.

2

Dans le flux, après « Obtenir les détails de la réponse » (4.3) : + Nouvelle étape → Excel Online (Business) → action Obtenir une ligne (Get a row).

3

Fichier : le même classeur · Tableau : Annuaire · Colonne clé : Service · Valeur de clé : le jeton ⚡ Réponse à Q2 — Votre service. (« Obtenir une ligne » exige une clé unique : ici chaque service n'apparaît qu'une fois, c'est parfait. Si votre annuaire contient plusieurs lignes par service, utilisez plutôt « Répertorier les lignes présentes dans un tableau » avec le filtre Service eq '@{«jeton Q2»}'.)

4

Renommez l'action 3. Annuaire du service : elle expose aussitôt 2 nouveaux jetons ⚡, Email_Responsable et Email_Parc.

5

Dans l'action e-mail : À = jeton Q8 (le demandeur) ; CC = les deux nouveaux jetons. Comme un annuaire contient parfois une case vide, construisez le CC « propre » via l'onglet Expression (fx) :

// CC robuste : le séparateur n'est ajouté que si l'adresse existe concat( if(empty(«Email_Responsable»), '', concat(«Email_Responsable», ';')), if(empty(«Email_Parc»), '', «Email_Parc») )
6

Cci (facultatif) : une boîte d'archivage, par exemple vehicules-archives@ministere.ci. Elle sert de preuve d'envoi et conserve la trace même si le demandeur supprime le message.

7

Testez avec 2 services différents — dont un avec une case vide — et vérifiez dans l'historique que le CC ne contient ni ;; ni adresse fantôme. Terminez par la démonstration inverse : ouvrez la boîte du chef de service, la copie doit être là.

💡

Variante sans annuaire : s'il n'y a que 2 ou 3 destinataires stables, utilisez directement la solution 1 (CC fixe) ou la solution 2 (groupe de distribution). Moins élégant, aussi efficace — et 20 minutes de gagnées. On n'ajoute l'annuaire que lorsqu'il existe réellement un valideur par service.

✨

Bonus : regrouper toute la conversation. Placez une référence stable dans l'objet — concat('[', «ID du Composer», '] Demande véhicule — ', «jeton destination») → [VEH-20260912-084612] Demande véhicule — Abidjan Plateau. Accusé de réception, approbation, affectation, retour de mission : tous les messages se regroupent en une seule conversation dans Outlook, et une recherche sur l'ID retrouve l'historique complet.

D.3 6 autres axes d'amélioration (au-delà de l'e-mail)

Classés par thème. La colonne « effort » indique le temps de mise en œuvre — vous pouvez piocher uniquement ce qui vous rapporte le plus.

Axe 1 — Le formulaire (avant même le flux)

AméliorationPourquoiEffort
Ajouter matricule, téléphone, lieu de prise en charge, heure de retour prévueLe parc affecte plus vite et le chauffeur sait où aller : ce sont de toute façon les questions posées par téléphone10 min
Ajouter « Avec chauffeur » (Oui/Non) et « Véhicule souhaité »Toutes les demandes n'ont pas besoin d'un chauffeur : évite les allers-retours5 min
Transformer « Destination » en liste (destinations fréquentes + « Autre »)Fini les « Abidjan », « abj plateau », « Plateau Abidjan » qui rendent les statistiques inutilisables10 min
Branchement conditionnel (sections Forms)Si « Avec chauffeur = Non », on masque les questions inutiles : formulaire plus court, mieux rempli15 min
Message de confirmation personnalisé dans FormsRassure immédiatement le demandeur et annonce le délai (« vous recevrez un e-mail… »)2 min
Tester depuis un téléphone (QR code) et remplir 3 vraies demandesLa moitié des surprises d'ergonomie se découvrent sur mobile10 min
⚠️

Règle d'or du formulaire : chaque question ajoutée doit avoir un usage automatique (une colonne, une règle, un e-mail) — sinon elle sera mal remplie. Les questions « pour information » finissent vides.

Axe 2 — Intégrité et fiabilité des données

AméliorationPourquoiEffort
Anti-doublon avant écriture (B.4)Un double clic ou un rafraîchissement ne crée pas deux lignes20 min
Contrôle de l'adresse e-mail : si elle est vide → alerte au parc au lieu de la confirmationÉvite l'e-mail « envoyé à personne » — le pire des cas, car il passe totalement inaperçu10 min
Colonne Source (Web / QR / papier saisi)Savoir d'où viennent réellement les demandes, et si le QR code est utilisé5 min
Colonne Version_Flux (ex. v2.1)Savoir quelle règle a produit quelle ligne, et comparer avant/après une évolution5 min
Stratégie de nouvelle tentative sur l'action Excel (4 essais, 20 s)Absorbe les micro-coupures d'OneDrive, très fréquentes (B.8)2 min
Écrire l'heure UTC et l'heure locale d'AbidjanLes tris et les calculs restent justes même si le fuseau du serveur change5 min

Axe 3 — Tenir les engagements de délai (« réponse sous 24h »)

AméliorationPourquoiEffort
Échéance calculée dès la soumission (recette A.4 : +4 h si Critique, sinon +24 h)Rend l'engagement vérifiable et permet la relance automatique10 min
Relance automatique J+2 (B.5)Aucune demande ne reste « en attente » sans suite30 min
Alerte « non affecté 4 h avant la mission » : flux planifié horaire, filtre Statut eq 'En attente' puis comparaison de Date_MissionÉvite le pire scénario : le véhicule manque le jour du déplacement30 min
Escalade immédiate si Critique (B.1 + B.2)Cohérent avec le niveau d'urgence déclaré par le demandeur20 min
Colonne Delai_Traitement_H, renseignée à l'affectationAlimente votre engagement de qualité et le pilotage (axe 5)10 min
Aligner le texte du formulaire sur le délai réellement tenuUn SLA annoncé et non tenu décrédibilise tout le dispositif2 min

Axe 4 — Le cycle de vie complet (le plus gros gain)

Aujourd'hui le flux s'arrête à la confirmation : il couvre 20 % du processus. Voici les 6 étapes qui manquent.

Étape du cycleMise en œuvreEffort
1. Approbation par le chef de serviceAction « Démarrer et attendre une approbation » (B.3), décision écrite et horodatée30 min
2. Affectation du véhicule« Mettre à jour une ligne » (clé = ID_Demande) + e-mail au demandeur : n° de véhicule, chauffeur, heure de prise en charge20 min
3. Bon de sortie PDF numérotéWord Online (Business) → Remplir un modèle puis Convertir un fichier en PDF → joint à l'e-mail. Le modèle Word contient des contrôles de contenu nommés, que l'action remplit par leur nom.45 min
4. Briefing du chauffeurE-mail (ou SMS) à son adresse avec heure, lieu de prise en charge, destination, passagers15 min
5. Retour de missionPetit formulaire Forms (km parcourus, carburant, remarques, incident) → colonnes supplémentaires ou 2ᵉ table30 min
6. Clôture et coûtStatut « Terminée », calcul du coût (km × tarif), archivage du bon20 min
🏆

Effet levier : avec l'étape 3, le demandeur ne reçoit plus un simple accusé de réception mais un bon de sortie PDF numéroté, prêt à présenter au poste de garde. C'est ce détail qui fait basculer un exercice de démonstration en véritable application de gestion du parc.

Axe 5 — Pilotage : transformer les lignes en décisions

AméliorationPourquoiEffort
Power BI sur le registre (B.7) : demandes/mois, taux d'approbation, délai moyen, top destinationsRépond en un clic à « combien de véhicules nous faut-il ? »1 h
Taux d'utilisation par véhicule (jours de mission / jours ouvrés)Identifie les véhicules sous-utilisés et ceux sur-sollicités30 min
Rapport hebdomadaire automatique à la direction : flux planifié + action Créer un tableau HTML (connecteur Données) + e-mailLa direction est informée sans que personne ne rédige de note45 min
Coût par service (km × tarif) et coût moyen par missionArgumente le budget carburant/entretien avec des chiffres30 min
Tableau des refus et de leurs motifsRévèle les demandes hors périmètre (utile pour former les services)20 min
Export mensuel archivé (Excel + PDF figé)Traçabilité comptable et audit20 min

Axe 6 — Gouvernance, sécurité, coûts

AméliorationPourquoiEffort
Aucune adresse en dur : table Parametres ou variables d'environnement (mode solution)Changer un destinataire ne doit pas obliger à ouvrir et republier le flux30 min
Permissions du classeur : le flux écrit, les humains lisentFin des fausses lignes et des formules écrasées : la donnée devient fiable15 min
Protéger la feuille et les colonnes calculéesÉvite qu'un utilisateur casse une formule ou renomme un tableau10 min
Minimisation des données : ne collecter que le nécessaire, avec une information dans le formulaireConformité (données personnelles) et confiance des agents20 min
Documenter et sauvegarder : notes de carte, export du flux, export de l'environnementVous pouvez reconstruire en cas d'erreur, et un collègue peut reprendre le dossier30 min
Anticiper les limites d'Excel : au-delà de ~5 000 à 10 000 lignes ou de plusieurs rédacteurs → SharePoint ou DataverseExcel n'est pas une base de données : concurrence, verrous, performancesselon projet
📐

Le bon réflexe : chaque amélioration doit répondre à un problème constaté, jamais à une envie technique. Commencez par mesurer (axe 5) : vous saurez alors précisément quoi améliorer en premier.

D.4 Le pipeline « version 2 » et l'ordre de mise en œuvre

Voici la cible. Chaque maillon correspond à une amélioration déjà décrite dans cette annexe ou dans les annexes A, B et C — aucun n'invente un nouvel outil.

📋
Forms enrichi
9 à 12 questions
→
🛡️
Contrôles
Doublon + e-mail
→
📊
Excel
Ligne écrite
→
📇
Annuaire
Valideur du service
→
📧
E-mails
Demandeur + CC + Cci
→
💬
Teams
Si Critique
→
🖊️
Approbation
Chef de service
→
🧾
Bon de sortie
PDF joint
→
📈
Power BI
Pilotage du parc

Ordre de mise en œuvre recommandé (3 vagues)

VagueTravauxTemps total
Vague 1
effet immédiat
① CC fixe ou groupe de distribution pour le chef de service et le parc (D.2) · ② anti-doublon (B.4) · ③ colonne Source · ④ stratégie de nouvelle tentative (B.8)≈ 40 min
Vague 2
le cœur métier
⑤ annuaire Service → responsable (D.2+) · ⑥ contrôle de l'adresse e-mail · ⑦ alerte Teams si Critique (B.2) · ⑧ relance J+2 (B.5)≈ 1 h 30
Vague 3
le cycle complet
⑨ approbation (B.3) · ⑩ affectation + e-mail de mission au chauffeur · ⑪ bon de sortie PDF · ⑫ tableau de bord Power BI (B.7) · ⑬ rapport hebdomadaire automatique≈ 3 h
🎯

Conseil de conduite : livrez la vague 1 aujourd'hui même, faites-la valider sur 5 demandes réelles, puis passez à la vague 2. Chaque vague est démontrable en réunion — c'est ainsi qu'un projet d'automatisation obtient les moyens de continuer.

D.5 Les 7 anti-patterns à éviter

Anti-patternConséquence observéeÀ faire plutôt
Fabriquer des adresses par concat()E-mail perdu en silence, flux « vert » trompeurAnnuaire, groupe de distribution ou question du formulaire (D.2)
Tout le monde en « À »Personne ne se sent responsable, et votre flux finit en courrier indésirable2 destinataires maximum en À, le reste en CC ou Cci
Le chauffeur prévenu dès la soumissionIl reçoit une mission non encore affectée, puis un second message : confusionL'informer à l'affectation uniquement (axe 4, étape 4)
Adresses et noms en dur dans six actionsChaque changement d'organigramme impose d'ouvrir et republier le fluxTable Parametres ou variables d'environnement (axe 6)
Boucler sur « Répertorier les lignes » avec une action Excel par tourLent, gourmand en requêtes, échoue sur de gros volumesFiltrer en une seule requête (OData), puis traiter l'ensemble
Un seul flux de 40 actionsImpossible à tester et à dépannerUn flux = un objectif ; découper en flux enfant ou planifié
Excel utilisé comme base de données pour des milliers de lignes et plusieurs rédacteursConflits d'écriture, lenteurs, lignes perduesSharePoint List ou Dataverse dès que le volume grandit
🧭

Un dernier mot : l'amélioration la plus rentable n'est presque jamais technique. C'est de se mettre d'accord sur qui doit être informé, de quoi, quand et par quel canal. Faites valider le tableau « Qui doit recevoir quoi ? » (D.2) par votre hiérarchie : tout le reste en découle naturellement.

☁️ Annexe E — Le mode hors-ligne à l'intérieur de Microsoft 365
☁️

Ce qui fonctionne hors connexion dans la suite Microsoft, et comment collecter quand même

📚 Référence · selon votre licence
🚫

La réponse directe à la question : Microsoft Forms n'a pas de mode hors-ligne, et il n'y en aura pas — le formulaire est une page web servie par forms.office.com, et les réponses sont centralisées dans le cloud. Idem pour Power Automate : le déclencheur vit dans le cloud. En revanche, Microsoft propose bel et bien des outils de collecte hors ligne — c'est l'objet de cette annexe — et l'on peut faire converger une saisie hors ligne vers Power Automate, Excel, Teams et Outlook (E.5).

E.1 Qui est hors ligne et qui ne l'est pas, dans la suite Microsoft

ComposantHors ligne ?Ce que cela donne en pratique
Microsoft Forms — répondre à un formulaire❌ NonLa page est servie par forms.office.com : sans connexion, elle ne s'ouvre pas. Aucun cache hors ligne n'est prévu par Microsoft.
Microsoft Forms — créer ou modifier❌ NonMême service cloud. Un formulaire déjà ouvert peut rester affiché, mais l'envoi échouera.
Power Automate — flux cloud❌ NonLe déclencheur et les actions s'exécutent dans le cloud : sans réseau, rien ne se déclenche et rien ne part.
Power Automate Desktop⚠️ PartielLe robot agit sur votre poste, mais les flux, la licence et les données vivent dans le cloud : pas de collecte autonome hors ligne.
Excel (application de bureau)✅ OuiAucune restriction : c'est votre exercice 01, entièrement hors ligne.
Excel (mobile / tablette)✅ OuiÉdition hors ligne, synchronisation OneDrive à la reconnexion (conflits gérés par la co-édition).
Word / PowerPoint✅ OuiBureau et mobile : création et modification hors ligne, synchronisation ensuite.
Outlook (bureau et mobile)⚠️ PartielLecture et rédaction hors ligne ; les messages partent au retour du réseau — c'est déjà une forme de collecte différée (voir E.2, voie 4).
OneDrive✅ OuiFichiers marqués « Toujours conserver sur cet appareil » : accessibles et modifiables hors connexion.
Teams❌ NonMessages, canaux et fichiers indisponibles hors connexion (hors notifications déjà reçues).
SharePoint / Lists (navigateur)❌ NonVersion web uniquement : pas de cache local.
Microsoft Lists (application mobile)✅ OuiLa liste est mise en cache sur le téléphone : consultation et modification hors connexion, remontée des changements à la reconnexion.
Power Apps (application mobile)✅ Oui — c'est LA réponse MicrosoftApplication de saisie sans code, avec stockage local et envoi au retour du réseau. Fonctionne aussi avec un profil hors connexion Dataverse.
Dataverse✅ Oui (profil hors connexion)Configuration côté plateforme : les enregistrements sont téléchargés puis resynchronisés.
Power BI Desktop✅ OuiModélisation et rapports hors ligne ; seule l'actualisation des données demande le réseau.
Power BI Service / Copilot❌ NonServices en ligne uniquement.
🎯

À retenir : dans Microsoft 365, le poste de travail sait travailler hors ligne (Excel, Word, OneDrive, Outlook) ; c'est la partie « formulaire + automatisation » qui ne le sait pas. La parade Microsoft s'appelle Power Apps mobile.

E.2 Les 4 voies Microsoft pour collecter des données hors ligne

VoieComment ça fonctionneLicenceEffort
1. Power Apps
(application mobile)
La voie native
Vous construisez une application de saisie sans code (les 8 questions deviennent des champs). À la validation, la demande est stockée dans l'appareil (SaveData()) puis affichée dans une « file d'attente ». Un bouton Envoyer appelle le flux Power Automate quand le réseau est là (LoadData() + envoi), ou vous laissez Dataverse resynchroniser tout seul via un profil hors connexion. Power Apps inclus dans Microsoft 365 pour les connecteurs standard (SharePoint, Excel, Outlook) ; licence premium pour Dataverse ou les connecteurs premium. Inclus dans un essai de 30 jours. 1 à 2 h
2. Microsoft Lists
(application mobile)
Vous créez la liste DemandesVehicules dans SharePoint (colonnes identiques à votre registre). Sur téléphone, l'application Lists met la liste en cache : vous saisissez hors connexion, les modifications remontent à la reconnexion. Les automatisations restent assurées par Power Automate, déclenché par l'ajout d'un élément. Inclus dans Microsoft 365 (SharePoint). 30 min
3. Excel mobile + OneDrive
(le plus simple)
Un classeur partagé sur OneDrive avec un onglet de saisie et votre tableau DemandesVehicules. Chacun modifie hors ligne, OneDrive synchronise à la reconnexion (co-édition). Moins de contrôle de saisie qu'un formulaire, mais aucun développement. Inclus dans Microsoft 365 (ou compte gratuit : version limitée). 10 min
4. Outlook hors ligne
(l'astuce gratuite)
Vous préparez un modèle d'e-mail structuré (Nom / Service / Destination / Date / Passagers / Urgence / E-mail). L'agent le remplit hors ligne ; le message part au retour du réseau. Un flux Power Automate « Quand un nouvel e-mail arrive » lit le corps du message, en extrait les champs et écrit la ligne dans Excel, puis confirme au demandeur. Inclus (Outlook + Power Automate standard). 1 h
🏆

Si vous ne devez en retenir qu'une : la voie 1 (Power Apps mobile) est l'équivalent Microsoft officiel de ce que nous avons construit ici — formulaire, file d'attente locale, envoi automatique, base de données Dataverse. C'est aussi, et de loin, la plus industrialisable (gestion des rôles, historique, mode hors ligne administré).

⚠️

Ce que vous perdez dans les voies 1 et 2 : la simplicité d'un formulaire Forms. Un formulaire Forms se crée en 15 minutes sans compétence technique ; une application Power Apps demande de penser les écrans, les collections et l'envoi. Ne basculez que si le besoin hors ligne est réellement permanent.

E.3 Comparatif : quelle voie pour quel besoin ?

Critère Forms + Power Automate
(notre exercice)
Power Apps mobile Lists mobile Excel mobile
Hors ligne❌ Non✅ File locale + envoi auto✅ Cache + synchronisation✅ Synchronisation OneDrive
Effort1 h1 à 2 h30 min10 min
CompétenceAucuneLogique d'application (sans code)AucuneAucune
Contrôle de saisie✅ Fort (champs obligatoires, listes)✅ Très fort (règles, messages)⚠️ Moyen (colonnes typées)❌ Faible
QR code mobile✅ Natif dans Forms➖ Lien vers l'application➖ Lien vers la liste➖ Lien vers le classeur
E-mail automatique✅✅ Via un flux✅ Via un flux⚠️ Via un flux
Utilisateurs simultanés⚠️ Limité par Excel✅ Dataverse✅ SharePoint⚠️ Conflits de co-édition
Pilotage / Power BI✅✅✅✅
Ce qu'on y gagneLa simplicité et la rapiditéLe hors ligne robuste et industrialisableL'intégration SharePoint immédiateLa mise en œuvre en 10 minutes
🧭

Comment choisir : besoin hors ligne occasionnel (coupures, déplacements ponctuels) → gardez Forms + Power Automate et ajoutez la collecte de secours (Annexe C). Besoin hors ligne structurel (agents de terrain, zones blanches permanentes) → Power Apps mobile. Besoin d'un registre partagé modifiable par plusieurs personnes → Lists.

E.4 La voie hybride : notre collecte hors ligne branchée sur Microsoft

C'est la réponse la plus pragmatique à votre question : on ne rend pas Forms hors ligne, on fait converger la saisie hors ligne vers Power Automate. Le terrain garde un outil qui fonctionne partout ; tout le reste vit dans Microsoft 365.

📝 Saisie hors ligne → 🕓 File d'attente locale → 🌐 Requête HTTP (retour du réseau) → ⚡ Déclencheur HTTP Power Automate → 📊 Excel · 📧 E-mail · 💬 Teams · 🖊️ Approbation
Variante de convergenceCommentQuand
1. Requête HTTP directe
la plus aboutie
L'application envoie sa file d'attente vers un déclencheur HTTP Power Automate, qui écrit dans Excel Online, envoie les e-mails, notifie Teams et déclenche l'approbation. Recette complète en E.5.Dès qu'une connexion, même brève, est disponible
2. Import du CSVOn exporte le CSV depuis l'application et on l'importe dans la table DemandesVehicules (Annexe C.2). Aucun développement.Une fois par jour, au retour au bureau
3. E-mail structuréUne demande = un e-mail rempli hors ligne dans Outlook, parti au retour du réseau ; un flux « Quand un nouvel e-mail arrive » l'analyse et écrit la ligne. (Voie 4 de E.2.)Quand on ne dispose que d'Outlook
🎁

Ce que cette hybridation apporte : vous conservez la simplicité d'un formulaire côté terrain et vous récupérez tout l'écosystème Microsoft : lignes dans Excel Online, e-mails automatiques (avec le CC du responsable de l'Annexe D.2), alertes Teams, circuit d'approbation, tableau de bord Power BI, traçabilité et sauvegardes — sans administrer vous-même un serveur.

E.5 Recette : recevoir la file d'attente hors ligne dans Power Automate

Objectif : quand le réseau revient, les demandes saisies hors ligne arrivent dans Excel Online, les e-mails partent, Teams est notifié — le tout sans écrire une ligne de code. Comptez 30 minutes.

1

Sur make.powerautomate.com : + Créer → Flux cloud instantané → nom : Réception des demandes hors ligne → déclencheur « Lorsqu'une requête HTTP est reçue » (When an HTTP request is received) → Créer.

2

Dans la carte du déclencheur, cliquez Utiliser l'exemple de charge utile pour générer le schéma et collez exactement le JSON ci-dessous (c'est ce que l'application envoie) :

{ "jeton": "NDRI-VEHICULES-2026", "demandes": [ { "id": "VEH-20260913-205401-fdff", "ts": "2026-09-13 20:54:01", "nom": "Kouassi Ama", "service": "DAF", "dateMission": "2026-09-20 08:30", "destination": "Anyama — Ébène", "passagers": 3, "motif": "Terrain/Inspection", "urgence": "Critique", "statut": "En attente", "vehicule": "", "email": "kouassi.ama@ministere.ci", "priorite": 1, "echeance": "2026-09-14 00:54", "domaine": "ministere.ci" } ] }
3

+ Nouvelle étape → Appliquer à chacun (Apply to each) → champ : demandes (proposé dans le contenu dynamique du déclencheur). Toute la suite se place dans la boucle.

4

Dans la boucle : Excel Online (Business) → Ajouter une ligne dans un tableau → même classeur et même tableau que l'Étape 3. Chaque champ reçoit le jeton correspondant de l'élément courant : id → ID_Demande, nom → Nom_Demandeur, priorite → Priorite, etc.

5

Dans la même boucle : Envoyer un e-mail (V2) → À = email, Objet et Corps = le modèle de la sous-étape 4.6. Ajoutez le CC du responsable de service (Annexe D.2).

6

(Facultatif) Condition sur urgence = « Critique » → Publier un message dans un canal Teams (Annexe B.2). Et si vous voulez l'approbation : « Démarrer et attendre une approbation » puis « Mettre à jour une ligne » (Annexe B.3).

7

Après la boucle, ajoutez l'action Réponse (Response) du connecteur Requête → corps : { "ok": true }. C'est cet accusé qui fait passer les demandes à ✅ envoyé dans l'application.

8

Enregistrer : l'URL du déclencheur apparaît dans la première carte (elle contient une signature ?sig=…). Copiez-la.

9

Dans l'application hors-ligne → onglet 🔄 Synchronisation → collez cette URL dans Adresse du service, videz le champ Jeton (le flux n'en a pas besoin), cochez l'envoi automatique, 💾 Enregistrer puis 🔌 Tester la connexion.

🔐

Sécurité : l'URL du déclencheur est un secret (elle porte une signature) — ne la publiez pas, et régénérez-la si elle fuite. Ce déclencheur n'a pas d'authentification Azure AD native : pour durcir, ajoutez une Condition qui compare le champ jeton à la valeur attendue, et si elle échoue, répondez 403 avec l'action Réponse + Arrêter (statut Échec). Pour aller plus loin : passerelle API Management ou connecteur personnalisé.

🧪

Test de bout en bout : coupez le Wi-Fi, saisissez 2 demandes (elles restent 🕓 en attente), rebranchez le réseau. En moins d'une minute : le flux s'exécute, Excel se remplit, les e-mails partent et les deux pastilles passent à ✅ envoyé. Si une demande reste en attente, ouvrez Historique des exécutions du flux : chaque carte montre l'entrée et la sortie réelles.

🎉

Vous avez alors les deux mondes : la robustesse d'un formulaire qui fonctionne sans réseau, et la puissance de Power Automate côté Microsoft (Excel Online, e-mail, Teams, approbation, Power BI). C'est exactement l'architecture que l'on retrouve dans les applications de collecte terrain professionnelles.

✅ Validation Finale — Tout est en place ?
✓

J'ai un compte Microsoft gratuit et je peux accéder à forms.office.com et make.powerautomate.com

✓

J'ai contrôlé le type de compte (sous-étape 4.0) : le connecteur Microsoft Forms voit bien mon formulaire et Excel Online (Business) voit bien mon classeur

✓

J'ai ajouté la question 8 « Votre adresse e-mail » et mon formulaire « Demande de Véhicule » compte 8 questions

✓

J'ai téléchargé le QR code de mon formulaire depuis Forms → "Partager" → "Code QR"

✓

Le fichier Excel est sur OneDrive (pas sur le PC local) et contient un tableau nommé "DemandesVehicules"

✓

Le flux Power Automate a 4 cartes : 1 déclencheur Forms → 1. Lire la réponse → 2. Écrire dans Excel → 3. Confirmer au demandeur (voir sous-étapes 4.1 à 4.6)

✓

Test réussi : soumission formulaire → exécution verte dans PA → ligne dans Excel → email reçu

✓

Test QR Code depuis téléphone : le scan ouvre le formulaire et la soumission crée une nouvelle ligne Excel

← Exercice 02 — Power BI ← Retour au Hub Demo 🏠 Centre de Ressources