Accueil – Le CFO masqué › Forums › Excel › Fusion de tables
- This topic has 10 réponses, 2 participants, and was last updated il y a 1 years et 8 months by Christophe.
-
AuteurArticles
-
14 février 2023 à 10 h 10 min #125527ChristopheParticipant
Bonjour,
J’ai deux tables clients sur Excel issues de mon ERP : une table clients avec les adresses, téléphone etc… et une table avec les contacts par clients.
La table clients ne contient qu’une ligne par clients et donc un client a plusieurs contacts.
Je voudrais regrouper en 1 seule ligne les informations de la table client et les contacts. J’ai essayé avec Power Query avec une fusion gauche mais j’ai autant de lignes que de contacts.
Je vous joins un extrait de mon fichier.
Merci d’avance à toutes et tous pour votre aide.Attachments:
You must be logged in to view attached files.14 février 2023 à 16 h 48 min #125546Stéphane LorinParticipantBonjour
vous ne précisez pas comment vous voulez regrouper les contacts en une seule ligne par client :
en collant les noms les uns derrière les autres,
en créant autant de colonnes que de contact
en créant des colonnes suivant la fonction
…voici exemple de code avec un regroupement pour créer une liste.
let
Source = Excel.CurrentWorkbook(){[Name=”Contacts”]}[Content],
#”Lignes groupées” = Table.Group(Source, {“CodeClient”}, {{“Contact”, each [NomContact], type list}})
in
#”Lignes groupées”Vous pouvez ensuite développer la liste sur des colonnes ou la concaténer.
Vous réaliserez la fusion avec la table des clients dans une autre requête.Stéphane
15 février 2023 à 3 h 00 min #125547ChristopheParticipantBonjour Stéphane,
Je vous remercie pour votre réponse.
Je voudrais avoir autant de colonnes que de contacts. J’ai modifié mon tableau Excel et dans l’onglet résultat, ce que je voudrais obtenir.Votre solution est de passer par du langage VBA ? Je ne connais pas du tout son utilisation et je crains de ne pouvoir appliquer votre solution à mon tableau..
Christophe
Attachments:
You must be logged in to view attached files.16 février 2023 à 3 h 04 min #125613Stéphane LorinParticipantBonjour
Le code proposé est bien du Power Query (langage M) et non en VBA
Il faut commencer par stocker vos données dans des tableaux “structurés” (insertion/tableau)
Ce que vous souhaitez est une transformation assez “classique” qui revient régulièrement sur les forums.
Une possibilité est de regrouper votre table “contacts” par Codeclient, d’ajouter un Index afin de numéroter les contacts, de dépivoter les colonnes pour obtenir “Nom1”, “Adresse1″, Fonction1”, “Nom2″, Adresse2”, “Fonction2″… Enfin vous pivoter l’ensemble pour obtenir une ligne par Codeclient.
La dernière étape est une fusion entre votre table “Clients” et votre table “Contacts” transformée.Voici le code Power Query pour transformer la table “Contacts”
let
Source = Excel.CurrentWorkbook(){[Name=”Contacts”]}[Content],
Regroupement = Table.Group(Source, {“CodeClient”}, {{“Données”, each Table.AddIndexColumn(_,”Index”,1)}}),
Développement = Table.ExpandTableColumn(Regroupement, “Données”, {“NomContact”, “AdresseContact”, “CodePostalContact”, “CommuneContact”, “TelephoneContact”, “EmailContact”, “FonctionContact”, “Index”}, {“NomContact”, “AdresseContact”, “CodePostalContact”, “CommuneContact”, “TelephoneContact”, “EmailContact”, “FonctionContact”, “Index”}),
Dépivot = Table.UnpivotOtherColumns(Développement, {“CodeClient”, “Index”}, “Attribut”, “Valeur”),
#”Fusion Colonne” = Table.CombineColumns(Table.TransformColumnTypes(Dépivot, {{“Index”, type text}}, “fr-FR”),{“Attribut”, “Index”},Combiner.CombineTextByDelimiter(” “, QuoteStyle.None),”Attribut.1″),
Pivot = Table.Pivot(#”Fusion Colonne”, List.Distinct(#”Fusion Colonne”[Attribut.1]), “Attribut.1”, “Valeur”)
in
PivotStéphane
16 février 2023 à 5 h 46 min #125619ChristopheParticipantBonjour Stéphane,
Je suis bloqué à l’étape ci-jointe par capture d’écran. Je n’arrive pas à avoir “Nom1”, “Adresse1” etc… Est-ce que je dois ajouter une colonne conditionnelle et fusionner les colonnes “contacts” et “Index” ? Quelles sont les colonnes à dépivoter à ce stade de la transformation ?
ChristopheAttachments:
You must be logged in to view attached files.16 février 2023 à 8 h 02 min #125623Stéphane LorinParticipantRegardez l’étape Regroupement de mon code ci-dessus
Table.Group(Source, {“CodeClient”}, {{“Données”, each Table.AddIndexColumn(_,”Index”,1)}})Je modifie le code manuellement en ajoutant l’index à chaque table (avant le développement des colonnes), comme ça il y a un contact 1, 2, 3… pour chaque client.
Ensuite à l’étape dépivot, on conserve les codes clients et l’index et on dépivote toutes les autres colonnes, en attribut on a maintenant Nom, Adresse, Fonction…
Puis on combine les colonnes Attribut et Index pour avoir Nom1, Adresse1, Fonction1, Nom2, Adresse2,…
Enfin on pivote cette colonne Attribut+Index pour avoir en colonne Nom1, Adresse1, Fonction1, Nom2, Adresse2,…Stéphane
16 février 2023 à 9 h 19 min #125626ChristopheParticipantStéphane,
Je suis arrivé jusqu’à l’étape pivot. Je vous envoie la copie d’écran et le fichier Excel. Je n’arrive pas ensuite à avoir tous les contacts d’un même client sur une seule ligne après avoir pivoter la colonne attribut+index.
J’ai dû mal faire quelque chose mais je ne sais pas quoi !
ChristopheAttachments:
You must be logged in to view attached files.17 février 2023 à 6 h 21 min #125698Stéphane LorinParticipantBonjour
votre fichier pointe vers une source externe que je ne peux évidemment pas ouvrir.
il faut créer un tableau dans votre fichier exemple et partir de ce tableau ContactsA la lecture du code je vois que vous ajoutez l’index après le développement des colonnes regroupées, je vous expliquais hier de créer l’index sur chaque table du regroupement
Table.Group(Source, {“CodeClient”}, {{“Données”, each Table.AddIndexColumn(_,”Index”,1)}})
Stéphane
17 février 2023 à 10 h 26 min #125718ChristopheParticipantBonjour Stéphane,
Vous m’avez perdu dans le process. Si vous avez fait la transformation, pouvez-vous m’envoyer une copie d’écran des différentes étapes dans l’ordre chronologique ?
Merci d’avance,
Christophe.17 février 2023 à 12 h 26 min #125734Stéphane LorinParticipantComme je l’écrivais tout à l’heure, je n’ai pas accès à votre base et votre requête commence par
Source = Excel.Workbook(File.Contents(“\\datas\profils$\Administration\Desktop\Fusion contacts2.xlsx”), null, true)
J’ai donc une erreur à l’ouverture, si vous voulez de l’aide il faut fournir un fichier exploitable
Voici un code qui fonctionne mais il faudra l’adapter à votre source (1er étape)
let
Source = Excel.CurrentWorkbook(){[Name=”Table_Contacts”]}[Content],
#”Lignes groupées” = Table.Group(Source, {“CodeClient”}, {{“Nombre”, each Table.AddIndexColumn(_,”Index”,1), type table }}),
#”Nombre développé” = Table.ExpandTableColumn(#”Lignes groupées”, “Nombre”, {“NomContact”, “AdresseContact”, “CodePostalContact”, “CommuneContact”, “TelephoneContact”, “EmailContact”, “FonctionContact”, “Index”}, {“NomContact”, “AdresseContact”, “CodePostalContact”, “CommuneContact”, “TelephoneContact”, “EmailContact”, “FonctionContact”, “Index”}),
#”Supprimer le tableau croisé dynamique des autres colonnes” = Table.UnpivotOtherColumns(#”Nombre développé”, {“CodeClient”, “Index”}, “Attribut”, “Valeur”),
#”Colonnes fusionnées” = Table.CombineColumns(Table.TransformColumnTypes(#”Supprimer le tableau croisé dynamique des autres colonnes”, {{“Index”, type text}}, “fr”),{“Attribut”, “Index”},Combiner.CombineTextByDelimiter(” “, QuoteStyle.None),”Attribut.1″),
#”Colonne dynamique” = Table.Pivot(#”Colonnes fusionnées”, List.Distinct(#”Colonnes fusionnées”[Attribut.1]), “Attribut.1”, “Valeur”)
in
#”Colonne dynamique”Stéphane
21 février 2023 à 4 h 11 min #125823ChristopheParticipantBonjour Stéphane,
Je vous remercie pour votre aide. Je ne sais pas comment intégrer votre code à Power Query. Faut-il passer par le menu “Affichage, Editeur avancé “?
Je ne sais pas comment intégrer votre code au mien pour le faire fonctionner. Je ne connais pas assez le langage M pour cela. Je vous transmets mon code sur le document Word ci-joint.
Pourriez-vous regarder ? Merci d’avance,
Christophe.Attachments:
You must be logged in to view attached files. -
AuteurArticles
- Vous devez être connecté pour répondre à ce sujet.