Synchroniser des tables Excel ou du Common Data Service avec Microsoft Power Automate
Ajouter et / ou supprimer des lignes dans une table pour refléter les modifications dans une autre
Cette automatisation est pour vous si vous souhaitez :
- Maintenir une copie d’une table à chaque fois qu'elle est modifiée ou selon une fréquence déterminée ;
- Industrialiser vos automatisations (par exemple à travers le Common Data Service) ;
- Vérifier la bonne forme et / ou normaliser les données d’un tableau Excel ;
- Mettre à disposition les données d’un tableau Excel pour une exploitation par d’autres services (Power BI, Dynamics 365, un autre tableau Excel, applications tierces, etc.) ;
- Copier des données entre deux fichiers Excel.
Comment ça marche avec Power Automate ?
Suivez les instructions ci-dessous pour paramétrer votre propre flux et / ou télécharger le modèle sous forme de solution à importer sur votre compte Power Automate.
Identification et extraction des données des tables source et cible
D’abord nous identifions le fichier et la table d’où proviennent les données ainsi que la table que nous souhaitons maintenir synchronisée avec le fichier source.
Normalisation de l'appellation des données issues des tables
Nous normalisons ensuite les noms des colonnes de la table source et de la base de données afin de les faire correspondre lors du traitement des données au sein du flux Power Automate. Cette étape nous permet d’éviter des erreurs et d’assurer un nommage clair et constant à travers le flux Power Automate.
Pour ce faire, nous ajoutons une tâche Select et nous écrivons les noms que nous souhaiterons utiliser au cours du flux. Nous parcourons la liste des contenus dynamiques prédisposé et nous sélectionnons les valeurs correspondantes pour les attribuer aux noms que nous avons appliqués.
Récupération des données à traiter et exclusion des lignes non-traitables
Dans cette troisième étape nous filtrons les valeurs que nous ne souhaitons pas synchroniser. Cette étape est optionnelle mais permet de démontrer que vous avez la possibilité d’exclure des lignes selon les conditions que vous choisissez.
Nous avons ajouté une tâche de filtre. Pour les entrée de la tâche, nous avons passé l'output de la tâche précédente.
Pour appliquer une condition, nous sommes obligé d'utiliser le support de composition d'expression. Pour le champs à gauche, nous avons entré le suivant :
Et pour le champs à droite nous avons entré simplement :
Création des variables permettant de comparer les lignes des deux tables
Après, grâce à la possibilité de créer des branches au sein d’un flux Power Automate, nous créons une variable par branche qui nous permet de comparer les lignes de la table source avec les lignes de la table cible.
Ces variables, intitulées Clé source et Clé cible, représentent les clés uniques qui font correspondre une ligne déjà présente dans la table cible avec sa contrepartie dans la table source. Elle nous permettra donc de distinguer les nouvelles lignes de celles à supprimer.
Alimentation des variables avec les clés de comparaison
Nous alimentons chaque variable en passant une tâche “Append” à l’intérieur d’une tâche “Apply to each”. Nous appliquons le corps (body) de la tâche du filtre (dans le cas de la table source) et de la tâche "Select" (dans le cas de la table cible) aux entrées la tâche “Apply to each” correspondante. Ceci permet d’itérer sur chaque ligne des tables afin d’extraire les clés et les ajouter à aux listes de clés maintenues par chaque variable.
Pour alimenter les variables nous récupérons la donnée, ID du salarié, qui nous sert comme clé unique des deux tables.
Dans le champs "Valeur" de la tâche "Attacher la clé de la variable Clé source", nous écrivons la fonction suivante dans l'éditeur d'expression :
Et pour la tâche "Attacher la clé de la variable Clé cible" :
Création des variables permettant de regrouper les lignes à traiter par leur nature
Nous initions par la suite, les deux variables Power Automate, Clés des nouvelles lignes et Clés des lignes à supprimer. Ils faciliteront le regroupement des lignes selon leur nature.
Comparaison des deux tables afin d'alimenter les variables de regroupement des lignes
Afin de distinguer les nouvelles lignes de celles à supprimer, nous créons des comparaisons entre les variables définies au-dessus, Clé source et Clé cible respectivement. Ces variables contiennent chacune une liste de toutes les clés de lignes des tables qui les ont alimentées. Par conséquent, nous avons la possibilité d’évaluer si chaque clé est présente dans l’array opposé.
Par exemple, nous pouvons évaluer si la première clé de l’array Clé source est présente dans l’array Clé cible. Si cela n’est pas le cas, nous savons qu’il s’agit d’une nouvelle ligne et pourrait être ajouté à l’array Clés des nouvelles lignes. À l’inverse, si la dixième clé de l’array Clé cible n’est pas présente dans l’array Clé source, cela signifie que la ligne source avait été supprimée et que cette clé fait partie Clés des lignes à supprimer.
Nous capturons toutes les clés des nouvelles lignes et les clés des lignes à supprimer dans les variables Clés des nouvelles lignes et Clés des lignes à supprimer, créées dans une étape précédente.
Afficher le contenu des variables pour vérification de la bonne exécution de la comparaison
Ces variables sont, à cette étape, exposées par des tâches Power Automate de type “Compose” pour que nous ayons la possibilité d’évaluer le contenu des variables et assurer qu'elles correspondent à nos attentes.
Collecter l'ensemble des données pour chaque ligne selon les clés présentes au sein des variables
Maintenant que nous avons regroupé les clés des lignes, il est nécessaire de filtrer les tables de normalisation des données par les clés afin de collecter les lignes dans leur totalité et d'effectuer des opérations sur la table cible. Nous procédons par l'ajout des deux côtés d'une tâche "Apply to each" qui boucle sur les clés de lignes. Au sein de la boucle, nous plaçons une tâche de filtre qui restitue les lignes dans leur totalité.
Parfois, les données spécifiques ne sont pas affichés dans le contenu dynamique proposé. Pour cibler la bonne donné, il est encore nécessaire de passer par l'éditeur d'expression. Nous validons l'entrée suivante :
Ajouter des lignes à la table cible
Les tâches de filtre restitue la seule et unique ligne qui correspond à la clé traitée lors de l’itération de la boucle. Pour cette raison nous pouvons tout simplement ajouter la tâche d’ajout de ligne dans la boucle associée au traitement des clés de nouvelles lignes. Il est nécessaire de paramétrer la tâche d’ajout pour qu’elle cite explicitement chaque donnée à ajouter à la table cible.
À noter : La tâche de filtre restitue un array d'un objet. Afin d'accéder aux données (propriétés) contenues dans l'objet, il est nécessaire d'utiliser la fonction first. La fonction first permet d'identifier le premier objet d'un array. Dans ce cas, nous savons qu'il n'y aura toujours un seul objet restitué par le filtre. Alors, nous pouvons nous fier aux données extraites par la fonction first.
Supprimer des lignes de la table cible
De la même manière que pour l'ajout des lignes, nous pouvons introduire la tâche de suppression de ligne directement dans la boucle qui traite les clés de lignes à supprimer. Le paramètrage de cette tâche est plus simple. Il faut choisir la table cible et tout simplement renseigner l'identifiant unique de la ligne à supprimer.
Nous avons inclus cette donnée au début de ce flux et nous l'avons récupéré par la suite lors de la dernière tâche de filtre. Comme pour l'ajout des lignes, il est nécessaire d'utiliser la fonction first pour obtenir le résultat au sein de l'array émit par la tâche de filtre.
Bravo 🎉 👏
Vous pouvez maintenant sauvegarder et exécuter votre flux !
C'est par ici pour télécharger le modèle 👉 ici