Envoyer des alertes des factures à plusieurs clients

  • Envoyer des alertes des factures à plusieurs clients

    Posté par Kamalo sur 17 janvier 2025 à 15h23

    Bonjour,

    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
  • R3dKap

    Membre
    17 janvier 2025 à 18h39

    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 :

    1. 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)
    2. Initialiser une variable de chaîne qui va contenir l’HTML de la liste du tableau des factures d’un client (par ex. strHtmlTabFactures)
    3. Initialiser une variable de chaîne qui va contenir le nom du précédent client (par ex. strClientPrec)
    4. Boucler sur les lignes identifiées à l’étape 1 et pour chaque ligne :
      1. 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 :
        1. 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>
        2. On vide strHtmlTabFactures puisqu’on est sur un nouveau client
      2. 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) :
        1. On ajoute à la variable de chaîne strHtmlTabFactures le <tr>…</tr> qui va bien pour y renseigner les éléments de la facture
        2. Dans strClientPrec on met le client de la ligne en cours
    5. 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 ?

  • Kamalo

    Membre
    18 janvier 2025 à 19h40

    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.

    • Cette réponse a été modifiée Il y a 2 semaines, 6 jours par  Kamalo.
    • Cette réponse a été modifiée Il y a 2 semaines, 6 jours par  Kamalo.
  • R3dKap

    Membre
    19 janvier 2025 à 19h34

    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 :

    1. Filtrer les lignes Impayées
    2. 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.

  • Kamalo

    Membre
    20 janvier 2025 à 4h11

    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 ?

    1. Initialiser une variable de chaîne qui va contenir l’HTML de la liste du tableau des factures d’un client (par ex. strHtmlTabFactures)
    2. Initialiser une variable de chaîne qui va contenir le nom du précédent client (par ex. strClientPrec)
    3. Boucler sur les lignes identifiées à l’étape 1 et pour chaque ligne :
      1. 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 :
        1. 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>
        2. On vide strHtmlTabFactures puisqu’on est sur un nouveau client
      2. 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) :
        1. On ajoute à la variable de chaîne strHtmlTabFactures le <tr>…</tr> qui va bien pour y renseigner les éléments de la facture
        2. Dans strClientPrec on met le client de la ligne en cours
    4. 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.
  • R3dKap

    Membre
    20 janvier 2025 à 14h45

    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é… 😉

  • Kamalo

    Membre
    21 janvier 2025 à 14h48

    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

  • R3dKap

    Membre
    21 janvier 2025 à 15h42

    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…

  • Kamalo

    Membre
    21 janvier 2025 à 21h42

    Bonjour @R3dKap,

    J’ai fait les modifications demandées mais je vois que la condition qui existe dans Apply to each donne toujours False peut être la déclaration des variables ! je sais pas trop.

    Merci de revoir de ton coté ça donne quoi.

    Merci d’avance

  • R3dKap

    Membre
    22 janvier 2025 à 12h29

    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 :

  • Kamalo

    Membre
    23 janvier 2025 à 5h01

    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

  • R3dKap

    Membre
    23 janvier 2025 à 10h05

    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.