
Envoyer des alertes des factures à plusieurs clients
Envoyer des alertes des factures à plusieurs clients
Posté par Kamalo sur 17 janvier 2025 à 15h23Bonjour,
J’ai un tableau Excel partagé sur Sharepoint qui contient les factures de plusieurs clients. le but du flux que je cherche est d’envoyer toutes les factures impayées à chaque client à part dans une seule table HTML par courriel (une table peut contenir plusieurs lignes des factures).
J’ai fait un essai et j’ai un problème que le flux pour chaque ligne de facture envoie la table au client si j’ai 3 lignes de factures va envoyer les 3 lignes et 3 courriels doublons au même client.
voici mon essai :
1- Déchlencheur
2- List rows present in a table
3- Apply to each en utilisant output de l’étape précédente
4- Au sein de même Apply to each :
4-1 une condition générale des factures impayées
4-2 Si la condition est vrai un switch qui vérifie le nom du client
4-2-1 si le nom du client = ABCD alors
4-2-2 Filter array qui vise à filtrer le nom du client
4-2-3 Créer une table HTML
4-2-4 Format de la table
4-2-5 envoyer le courriel.
Pour les autres clients les étapes à partir 4-2-1 se répète dans chaque cas de switch.
Cette méthode me donne des courriels doublons par exemple si j’ai 3 lignes de factures pour un client le flux va envoyer 3 rappels courriels qui contient la même table au même client.
Merci d’avance de me proposer une solution pour ce problème.
R3dKap a répondu Il y a 2 semaines, 1 jour 2 Membres · 11 Réponses- 11 Réponses
Salut @Kamalo,
C’est normal : l’action d’envoi de mail se trouve à l’intérieur de la boucle 4-2 et donc un mail est envoyé à chaque ligne de facture… 😉
Ton problème est plus compliqué que tu ne le penses 😅 car tes lignes de factures concernent plusieurs clients différents et tes lignes sont sûrement mélangées entres les différents clients. Donc, il va falloir :
- trier les lignes pour les regrouper par clients (en profiter pour ne récupérer que les factures impayées)
- gérer ce que l’on appelle une rupture sur le client dans la boucle qui va balayer les lignes
Grosso modo il faut que tu procèdes ainsi :
- Lister les lignes de factures : ici, en une seule opération tu peux spécifier à la fois de filtrer les factures impayées (paramètre Requête de filtre) et de les trier par client (paramètre Trier par)
- Initialiser une variable de chaîne qui va contenir l’HTML de la liste du tableau des factures d’un client (par ex. strHtmlTabFactures)
- Initialiser une variable de chaîne qui va contenir le nom du précédent client (par ex. strClientPrec)
- Boucler sur les lignes identifiées à l’étape 1 et pour chaque ligne :
- Si le client de la ligne en cours est différent du client précédent strClientPrec et que strClientPrec n’est pas vide alors :
- Envoyer le mail au client en intégrant au message Html du mail les lignes du tableau qui liste les factures strHtmlTabFactures, c’est à dire quelque chose comme : <html>…..<body>Bonjour, blablabla<table>strHtmlTabFactures</table>Merci, bonne journée</body></html>
- On vide strHtmlTabFactures puisqu’on est sur un nouveau client
- Sinon (on est soit sur un nouveau client ou sur le même client que précédemment et donc il faut construire la ligne du tableau pour la facture concernée) :
- On ajoute à la variable de chaîne strHtmlTabFactures le <tr>…</tr> qui va bien pour y renseigner les éléments de la facture
- Dans strClientPrec on met le client de la ligne en cours
- Si le client de la ligne en cours est différent du client précédent strClientPrec et que strClientPrec n’est pas vide alors :
- Après la boucle, il faut gérer l’envoi du mail pour le dernier client et donc simplement refaire ici la même action d’envoi du mail qu’en 4.1.1 ci-dessus
Est-ce que tu vois l’idée ?
Bonjour @R3dKap,
Merci pour ta réponse.
En effet je suis nouveau dans Power Automate, j’ai fait mon flux présenté en description à l’aide d’un vidéo. J’ai eassayé la première étape que tu m’a proposé mais Power automate me propose pas les colonnes de mon tableau partagé sur Sharepoint et en plus pour filtrer la facture impayée je dois filtrer deux autres colonnes, il s’agit de si la colonne contient la confirmation d’envoyer l’alerte, valeur “oui”, et si la colonne colonne Rappel 2 est vide aussi.
voci un exemple de mon tableau :
J’aimerais bien que tu me donne plus de détails des captures et codes pour chaque étape sera très apprécié de ta part.
Merci d’avance.
Tu as raison : il n’est pas possible de filtrer plusieurs colonnes en une seule opération dans l’action Lister les lignes présentes dans un tableau.
Alors, tout d’abord, je te recommande vivement d’éliminer tous les espaces dans les noms de tes colonnes dans le fichier Excel. Ca va te simplifier la vie dans Power Automate. Donc, typiquement, plutôt Rappel1 que Rappel 1 (il me semble qu’il y a un espace dans ta capture mais je suis pas sûr).
Ensuite, pour le filtrage il va donc falloir procéder en 2 temps :
- Filtrer les lignes Impayées
- Filtrer les lignes dont le Rappel est Oui
Voici comment procéder :
Et voici comment paramétrer l’action Filtrer un tableau pour ne conserver que les factures dont Rappel est Oui :
Le body/value qu’il y a dans le From c’est la sortie de l’action précédente.
Attention, dans le nouvel éditeur Power Automate, y’a un bug lorsque tu consultes le résultat de l’action Filtrer un tableau : il t’affiche qu’il n’y a aucune sortie alors qu’il y en a ; il faut cliquer sur le lien Afficher les sorties brutes pour les voir dans un panel sur la droite.
Bonjour @R3dKap,
J’ai bien compris les 2 étapes merci beaucoup!
Pour les étapes suivantes est ce possible des captures des écrans et les codes svp ?
- Initialiser une variable de chaîne qui va contenir l’HTML de la liste du tableau des factures d’un client (par ex. strHtmlTabFactures)
- Initialiser une variable de chaîne qui va contenir le nom du précédent client (par ex. strClientPrec)
- Boucler sur les lignes identifiées à l’étape 1 et pour chaque ligne :
- Si le client de la ligne en cours est différent du client précédent strClientPrec et que strClientPrec n’est pas vide alors :
- Envoyer le mail au client en intégrant au message Html du mail les lignes du tableau qui liste les factures strHtmlTabFactures, c’est à dire quelque chose comme : <html>…..<body>Bonjour, blablabla<table>strHtmlTabFactures</table>Merci, bonne journée</body></html>
- On vide strHtmlTabFactures puisqu’on est sur un nouveau client
- Sinon (on est soit sur un nouveau client ou sur le même client que précédemment et donc il faut construire la ligne du tableau pour la facture concernée) :
- On ajoute à la variable de chaîne strHtmlTabFactures le <tr>…</tr> qui va bien pour y renseigner les éléments de la facture
- Dans strClientPrec on met le client de la ligne en cours
- Si le client de la ligne en cours est différent du client précédent strClientPrec et que strClientPrec n’est pas vide alors :
- Après la boucle, il faut gérer l’envoi du mail pour le dernier client et donc simplement refaire ici la même action d’envoi du mail qu’en 4.1.1 ci-dessus
Merci d’avance,
-
Cette réponse a été modifiée Il y a 2 semaines, 4 jours par
Kamalo.
Ah je vais pas pouvoir te faire tout ton flux par contre 😅
Va falloir t’y coller et je pourrais te débloquer si t’es coincé… 😉
Bonjour @R3dKap,
Je suis d’accord avec toi !
J’ai fait des essais de ce flux et chaque foix le flux donner des erreurs, peux tu me corriger les codes et vérifie avec moi si j’ai bien compris les étapes, voici les captures d’écran de chaque étape:
PS: le filtre et le tri fonctionnenet très bien.
1- Déclaration des variables :
2- Boucler avec les variables :
a- Si la condition est vrai :
b- Puis réinitialiser la variable :
c- Ajouter une ligne :
3- Mettre à jour le client précèdent :
4- Vérifier si il existe une case non vide :
Merci d’avance
Merci pour toutes les captures…
Alors c’est pas mal… Y’a 2 ou 3 choses à revoir :
- dans la branche NO de la condition il faut que tu mettes une copie identique de ton action actuelle APPEND TO STRING VARIABLE
- dans l’action d’initialisation de la variable strHtmlFactures il faut que tu enlèves le
<table>
car il est déjà dans le corps de ton mail - idem pour l’action SET VARIABLE qui est actuellement juste après l’envoi du mail
Et ça devrait le faire…
Bon, j’ai reproduit ton cas chez moi et voici comment faire le flux :
Pour le schéma du JSON, il faut que tu ailles dans l’une des exécutions de ton flux et que tu copies (CTRL-C) un enregistrement du résultat de l’action Filtrer un tableau (sans la virgule derrière le “}” !!!) :
Ensuite, tu retournes dans ton flux et tu cliques sur le bouton Générer à partir de l’échantillon de l’action Analyser JSON, tu colles l’enregistrement copié et tu cliques sur Terminer :
Suite du flux :
Dans la branche OUI :
C’est une action Ajouter à la variable de chaîne. Les IdFact et Client proviennent de l’action précédente Analyser JSON.
Dans la branche NON :
APRES la condition, DANS la boucle :
APRES la boucle :
Voilà… Testé chez moi ça donne ça :
Bonjour @R3dKap,
Merci pour ton illustartion c’est très apprécié,
En effet, j’ai suivi à la lettre tes étapes en haut en prenant un exemple de 2 clients avec 2 factures qui répondent à la condition d’alerte pour chaque client. Le flux est fonctionnel sans erreur mais problème de résultat car il a envoyé 8 courriels et pour chaque client envoie un courriel avec une seule factures. on dirait le même résultat que j’avais dans mon premier essai envoyé à la question initiale.
Merci de me corriger si il me fallait d’autres précisions sinon un autre flux qui répond au cas de plusieurs clients et plusieurs lignes et chaque client reçoit toutes ses factures impayées.
Merci d’avance
Le cas que je t’ai détaillé dans mon dernier post fonctionne pour un fichier avec plusieurs lignes de factures pour plusieurs clients, des lignes mélangées avec des statuts et des rappels mélangés.
Si tu suis scrupuleusement mes indications c’est obligé que ça marche puisque ça fonctionne chez moi. Oublie mes posts précédents. Base-toi uniquement sur le dernier d’hier avec toutes les captures. Revérifie de ton côté et dis-moi ce que ça donne… 😉
Connectez-vous pour répondre.