Power Automate – Comment récupérer le contenu d’emails dans Gmail et l’enregistrer dans Google Sheet

(Last Updated On: 7 mai 2020)

Voici une astuce pour automatiser le traitement d’e-mails : utiliser Power Automate (anciennement appelé Microsoft Flow) pour récupérer automatiquement les informations contenues dans des e-mails de notification (ici Gmail) et alimenter un tableau dans une feuille Google Sheet !

Supposons que vous receviez des e-mails automatiquement chaque fois qu’un évènement se produit : par exemple chaque fois qu’un utilisateur de votre site e-commerce achète un produit, ou bien dès qu’un processus dans votre entreprise est terminé.

Pour assurer le suivi de ce processus, vous alimentez une feuille Excel Online (ou Google Sheet) en insérant les informations contenues dans chaque e-mail dans une nouvelle ligne.

Cela peut être très fastidieux à faire manuellement à la longue, et aujourd’hui il est possible d’automatiser ce processus.

Concrètement, vous avez besoin de Power Automate, disponible en version d’essai gratuit, d’un compte Gmail et de créer une feuille Google Sheet dans votre espace Google Drive.

Voici en vidéo comment automatiser le flux entre Gmail et Google Sheet avec Power Automate 🤖

Pour cette exemple, j’ai créé une feuille Google Sheet avec en colonne les champs que je souhaite récupérer dans mes e-mails.

Créer un Flux automatique

Commencez par créer un nouveau flux automatique dans Power Automate :

Entrez le nom du flux :

La première étape d’un flux s’appelle un Trigger. C’est l’évènement déclenchant le flux. Nous allons choisir Gmail dans la liste des triggers :

Sélectionnez le (seul) trigger gmail When a new email arrives :

Ensuite, sélectionnez le libellé que vous avez préalablement configuré dans Gmail et qui met tous les e-mails au même endroit dans votre boîte mail. Cliquez sur New Step :

Récupérer le contenu des emails

Nous allons maintenant stocker le contenu de l’email dans des variables, afin de remplir dans l’étape d’après la feuille Google Sheet. On définit une première variable qui récupère tout le contenu de l’email :

Pour initialiser la valeur, choisir Dynamic Content et sélectionner Body. C’est ce qui contient le corps de texte de l’email. On choisit le type String (texte) pour notre variable :

A ce stade, enregistrez le flux et faites un test pour voir si le contenu est bien récupéré dans la variable :

Examinons le contenu de l’email récupéré dans un éditeur de texte. On note une structure avec une table HTML. Les éléments qu’on souhaite récupérer (ici fichier téléchargés, nom utilisateur, email) sont délimités par des balises <TD>:

Nous allons créer une deuxième variable, pour stocker les éléments du contenu, dans des variables distinctes. Pour cela on créé une variable Array pour stocker toutes les lignes du tableau de l’email dans des éléments distincts.

On initialise la valeur avec une expression Split comme ceci :
split(variables('RecupMessage'),'<td>')
  • le 1er argument : la 1ère variable créée contenant le corps de texte de l’email
  • le 2ème argument est le délimiteur, ici la balise <TD>. Indique à quel endroit scinder le texte. Il y a 4 balises TD dans l’e-mail, donc on devrait récupérer 5 éléments de tableau.

Une fois que les éléments qu’on souhaite récupérer sont stockés dans une table Array, on doit extraire le texte utile :

formules-jours-feries.xlsm</td>
</tr>

<tr>
<th style="text-align: left; padding: 0.5em 1em; color: #0073aa;">First Name</th>

Pour l’élément Fichier téléchargé, on utilise à nouveau une expression Split pour extraire le texte utile du texte inutile :

split(last(take(variables('RecupDonnees'),2)),'</td>')[0]

Le délimiteur </TD> permet de scinder le texte en 2 parties, la première partie étant celle qu’on souhaite conserver.

On fait de même avec les autres éléments (nom utilisateur, email).

Remplir le fichier Google Sheet

Une fois les variables créées, on insère une nouvelle étape pour remplir la Google Sheet :

Choisir Insert row, de cette manière à chaque nouvel email reçu une nouvelle ligne sera créée :

Renseignez la feuille Google Sheet à remplir. A noter qu’il faut avoir créé au moins une ligne d’en-têtes de colonnes au préalable.

Remplir les champs de la feuille avec les variables du flux :

Enfin, sauvegarder et tester le flux !

Si tout fonctionne bien, vous devriez avoir une nouvelle ligne créée à l’issue du test !

Voilà, j’espère que cet article vous a plu ainsi que la vidéo explicative.

🛫A la fin de la vidéo, je vais plus loin en vous montrant comment j’ai alimenté un rapport Power BI à partir de cette feuille Google Sheet ! Les explications viendront dans un prochain article…

Abonnez-vous si vous souhaitez être tenu(e) au courant de la sortie du prochain article 👏👏

Et vous, connaissez-vous Power Automate ? Quels sont les flux que vous souhaiteriez automatiser ? Répondez en commentaire👇

Souscrivez à ma newsletter :

7 commentaires

  1. sartori dit

    Bonjour,
    J’ai des soucis au niveau des variables (objet nom, mail).

    BadRequest. La variable « nom objet » de type « Integer » ne peut pas être initialisée ou mise à jour avec la valeur « Alerte de sécurité » de type « String ». La variable « nom objet » prend uniquement en charge les valeurs des types « Integer ».
    Quels types de champ faut-il mettre?

    Concernant googlesheets, faut-il mettre insérer les lignes, ou faire correspondre les lignes?

    Merci par avance,

    • Lionel dit

      Bonjour

      Je ne suis pas sûr de bien comprendre votre problème.
      Si vous souhaitez récupérer l’objet du mail, vous devez créer une nouvelle étape dans le flux et choisir le type string (texte), puis sélectionnez le contenu ‘subject‘, comme ceci :
      Objet du mail

      Pour Google Sheets, choisissez Insert row, de cette manière chaque e-mail créera une nouvelle ligne :
      Google Sheets

      Lionel

  2. Ghislain D'ALMEIDA dit

    Bonjour,
    Merci pour ce tuto.
    Dans mon cas, je souhaiterais savoir comment extraire des données d’un mail Outlook vers Excel.
    J’ai commencé à utiliser votre méthode mais je suis bloqué sur la dernière condition. Il m’affiche trop d’éléments et pas celui que je souhaite.

    Pourriez-vous m’aider ?

    Dans l’attente de votre réponse, je continue mes essais.

    Cordialement, Ghislain.

  3. Franck dit

    Bonjour,

    J’ai un pb de conversion:
    BadRequest. La variable « RecupererDonnees » de type « Array » ne peut pas être initialisée ou mise à jour avec la valeur de type « String ». La variable « RecupererDonnees » prend uniquement en charge les valeurs des types « Array ».
    La première variable créée e pour récupérer le corps d’un email est effectivement un string, comme dans votre exemple.

    • Lionel dit

      Bonjour,

      Je pense que c’est parce que le corps d’email ne contient pas de tableau.
      En effet, à l’étape suivante “split” , le flux cherche la balise qui permet de scinder le contenu en tableau :

      split(variables(‘RecupMessage’),’td’)

      Si la balise ‘td’ est absente de votre email, le contenu ne sera pas scindé et converti en “Array”.
      Suivant ce que vous souhaitez récupérer dans l’email et sa structure, il vous faudra adapter les étapes du tutoriel. Par exemple si l’email est structuré avec des paragraphes, utilisez comme balise de split ‘p’

      Les balises ‘div’ sont également courantes pour structure du contenu HTML.

      Ou si votre email est en format texte brute, il faudrait plutôt rechercher des mots clés, par exemple si vous souhaitez récupérer le montant d’une transaction, et que ce montant est précédé de “Montant:” et suivi de “€”, vous pouvez splitter avec le mot clé “Montant:” puis dans les étapes suivantes vous scinder avec “€”.

      De cette manière, en avançant pas à pas vous allez trouver une manière d’isoler l’information à récupérer dans une variable, que vous pourrez enfin enregistrer dans la feuille Excel.

      Lionel

    • Lionel dit

      Bonjour, il est possible de récupérer les informations sur la pièce jointe via les contenus dynamiques Attachements Name, Attachements Content, etc.
      Donc je pense que c’est possible d’enregistrer d’abord la pièce jointe en créant un fichier dans Google Drive, puis de copier le chemin du fichier dans une feuille google sheet.
      Il y a un template “save-gmail-attachments-to-your-google-drive” pour la première tâche.
      Pour la deuxième tâche, reprenez mon exemple en changeant le contenu de la ligne insérée dans google sheet par le lien du fichier.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *