Power Query Split des données Power query en différents onglet ou fichiers excel

jojolatribuche

XLDnaute Junior
Bonjour la communauté.
J'ai un problème de taille.. et le temps est compté pfff
Je vous explique je dois communiquer pour nos clients leur nouvelles listes de prix pour 2023 la ou ça coince, c'est que j'ai une table avec 12 000 articles (sans la notion de client) et j'ai une table client qui en fonction de son groupe de prix ce voit attribuer ses prix.
Le soucis est que dans mon premier exemple pour le Groupe de prix PGGENESPW j'ai 1928 clients ce qui veux dire que actuellement dans Power Query j'ai fait une fusion de requête entre mes deux tables avec comme clé mon price groupe. Dans l'éditeur ça s'affiche (Génial) mais dans Excel non (Normal on est limité à un peu plus de 1 millions de lignes).
Ma question est donc est-il possible quand on est dans l'éditeur power query de lui donner comme instruction à chaque client qui trouve de créer soit un onglet excel ou encore mieux un fichier excel.
Je vous mets les captures d'écran car les fichiers de travail sont confidentielles :-(

La première capture est déjà le résultat de la fusion de la requête la première colonne est la clé qui va chercher dans la capture 2 la clé Price group.
Je lui demande de m'afficher le customer account que vous voyez en colonne 2 de la première capture d'écran.

Après ben bordel car cette requête comporte 14 millions de lignes à importer dans excel et ce n'est pas possible..
Donc à partir d'ici comment faire si c'est possible en fonction du Customer Account spliter cette requête en Fichier /onglet par client.. soit 1928 fichiers et ou onglet différents avec les 12000 articles

Merci de votre aide car je sèche et je suis pris par le temps dans la mesure ou je dois communiquer avant fin de semaine aux clients..

Cordialement

1671450418670.png

1671450449526.png
 

jojolatribuche

XLDnaute Junior
Voici
J'ai modifié les données par contre pour créer le fichier masters et avoir moins de 1 millions de lignes j'ai du supprimer dans le fichier Customer Tables des clients pour que je puisse sauver le fichier master.
Mais l'idée est là le résultat que vous verrez dans l' fichier master onglet Feuille de travail si la totalité des clients sont repris excel n'affichera pas le résultat d'où est-il possible dans powerquery (avant l'actualisation des données dans excel) faire un split des données en fichiers/onglet par clients pour que ça s'affiche.
 

Pièces jointes

  • Customer Tables.xlsx
    13.9 KB · Affichages: 11
  • PGGENESPW.xlsx
    873.8 KB · Affichages: 10
  • Fichier Master.xlsx
    32.4 KB · Affichages: 8

chris

XLDnaute Barbatruc
Bonjour à tous

Il ne faut pas créer 1928 onglets ou classeurs mais juste prévoir un affichage à la demande avec choix du client et éventuellement d'autres paramètres

Une boucle VBA pour traiter du 1er au 1928ème client si vraiment il faut générer un PDF ou autre à chacun...
 
Dernière édition:

jojolatribuche

XLDnaute Junior
Bonjour à tous

Il ne faut pas créer 1928 onglets ou classeur mais juste prévoir un affichage à la demande avec choix du client et éventuellement d'autres paramètres

Une boucle VBA pour traiter du 1er au 1928ème client si vraiment il faut générer un PDF ou autre à chacun...
Bonjour justement si car je dois ensuite envoyer à chaque client sa liste de prix par mail soit excel ou pdf
actuellement pour ses clients on ne fait rien mais pour les clients qui ne sont pas lié à un price group je split les données via une macro.. Mais ici la problématique est vraiment le faite que pour ce price groupe 1200 articlesX1900 clients ben je n'ai pas de données à afficher :-(
 

jojolatribuche

XLDnaute Junior
Perso, je n'ai pas compris ce que tu veux générer comme fichier..
Si tu actualise le fichier master onglet fichier de travail ce sont ses données là que je veux qui se génère mais la limite des 1 millions de lignes ne permets pas de générer le résultat pour l'ensemble des données et ensuite mon but est de spliter les données par clients C00XXXXX en fichier excel pour chacun des clients en questions.
D'ou ma demande de pouvoir avoir les fichier par clients au départ de powerquery
 

vgendron

XLDnaute Barbatruc
si j'actualise, j'ai un message d'erreur qui me dit qu'un fichier n'est pas disponible...

peux tu simplement poster
1) les deux fichiers souces (Liste des client + Liste des articles) avec juste une dizaine de lignes chacun
2) le fichier résultat en expliquant quelles données viennent d'où

en Power Query, je ne saurai pas faire, mais en macro pas de souci pour générer le/les fichiers excels et/ou pdf
 

jojolatribuche

XLDnaute Junior
si j'actualise, j'ai un message d'erreur qui me dit qu'un fichier n'est pas disponible...

peux tu simplement poster
1) les deux fichiers souces (Liste des client + Liste des articles) avec juste une dizaine de lignes chacun
2) le fichier résultat en expliquant quelles données viennent d'où

en Power Query, je ne saurai pas faire, mais en macro pas de souci pour générer le/les fichiers excels et/ou pdf
1) ok ci-dessous
2) Du fichier PGGENSESPW les colonnes A,B,F,O,P et du fichier Customer Tables la colonne E
toutes ses informations dans le même fichier par client. . la liste des prix est identiques pour tout ses clients mais je dois pouvoir avoir un fichier par client.

Merci sincèrement
 

Pièces jointes

  • Customer Tables.xlsx
    13.9 KB · Affichages: 6
  • PGGENESPW.xlsx
    14.3 KB · Affichages: 5

chris

XLDnaute Barbatruc
RE

Il y a combien de Price group ?

Car il faut une requête paramétrée par Price group et une boucle par client de chaque Price group
Ce qui est plus rapide qu'une requête par client

Une première ébauche qui ne tient pas compte du Price group
 

Pièces jointes

  • Fichier Master_PQ.xlsm
    875.6 KB · Affichages: 9

vgendron

XLDnaute Barbatruc
avec ce que j'ai compris...

code à mettre dans un module standard du classeur "Customer Tables"
VB:
Sub FichierClient()
Dim ListeClients() As Variant 'tableau contenant les clients à traiter
'Dim FichierSortie() As Variant

With ActiveWorkbook.Sheets("Feuil1") 'dans la feuille 1
    fin = .Range("E" & .Rows.Count).End(xlUp).Row 'dernière ligne non vide de la colonne E
    ListeClients = .Range("E2:E" & fin).Value 'on place les clients dans le tableau
End With

ListingArticle = Application.GetOpenFilename 'on demande le fichier des articles à ouvrir
If ListingArticle <> False Then
    Application.Workbooks.Open ListingArticle 'on ouvre le fichier
    Set WbArticle = ActiveWorkbook 'affectation à l'objet WbArticle
End If

With WbArticle.Sheets("Feuille de travail") 'dans la feuille de travail
    
    .Range("C:E,G:N").Delete Shift:=xlToLeft 'on supprime les colonnes inutiles
    'LastLine = .Range("A" & .Rows.Count).End(xlUp).Row 'dernière ligne non vide de la colonne A
    'FichierSortie = .Range("A1:E" & LastLine).Value 'on met dans un tableau
End With

For i = LBound(ListeClients, 1) To UBound(ListeClients, 1) 'pour chaque client
    WbArticle.SaveCopyAs Filename:=ListeClients(i, 1) & ".xlsx" 'on sauvegarde le fichier avec le nom du client
Next i
WbArticle.Close savechanges:=False 'on ferme le fichier d'origine sans enregistrer les changements (suppression des colonnes)

End Sub
 

jojolatribuche

XLDnaute Junior
Finalement il ne s'agit que de copier ton fichier "PGGEESPW" autant de fois qu'il y a de clients??
en supprimant les colonnes inutiles au passage..
en quelques sortes oui
RE

Il y a combien de Price group ?

Car il faut une requête paramétrée par Price group et une boucle par client de chaque Price group
Ce qui est plus rapide qu'une requête par client

Une première ébauche qui ne tient pas compte du Price group
un peu plus de 20 ici j'ai juste mis le résultat du price groupe PGGENSPW et chaque price group à son lot de clients...
 

jojolatribuche

XLDnaute Junior
avec ce que j'ai compris...

code à mettre dans un module standard du classeur "Customer Tables"
VB:
Sub FichierClient()
Dim ListeClients() As Variant 'tableau contenant les clients à traiter
'Dim FichierSortie() As Variant

With ActiveWorkbook.Sheets("Feuil1") 'dans la feuille 1
    fin = .Range("E" & .Rows.Count).End(xlUp).Row 'dernière ligne non vide de la colonne E
    ListeClients = .Range("E2:E" & fin).Value 'on place les clients dans le tableau
End With

ListingArticle = Application.GetOpenFilename 'on demande le fichier des articles à ouvrir
If ListingArticle <> False Then
    Application.Workbooks.Open ListingArticle 'on ouvre le fichier
    Set WbArticle = ActiveWorkbook 'affectation à l'objet WbArticle
End If

With WbArticle.Sheets("Feuille de travail") 'dans la feuille de travail
   
    .Range("C:E,G:N").Delete Shift:=xlToLeft 'on supprime les colonnes inutiles
    'LastLine = .Range("A" & .Rows.Count).End(xlUp).Row 'dernière ligne non vide de la colonne A
    'FichierSortie = .Range("A1:E" & LastLine).Value 'on met dans un tableau
End With

For i = LBound(ListeClients, 1) To UBound(ListeClients, 1) 'pour chaque client
    WbArticle.SaveCopyAs Filename:=ListeClients(i, 1) & ".xlsx" 'on sauvegarde le fichier avec le nom du client
Next i
WbArticle.Close savechanges:=False 'on ferme le fichier d'origine sans enregistrer les changements (suppression des colonnes)

End Sub
j'ai testé.. ici ta macro copie l'ensemble du fichier PGGENNESPW mais il y a pas l'information du nom du client dans le fichier hormis que dans le nom du fichier (et le fichier doit comporter que un seul onglet car ici il prend tout les onglets) et ensuite comme c'est un copier coller ma table Customer tables doit etre que les clients d'un PG donc faire du manuel avant.. enfin c'est une première base mais pas optimale dans le sens ou il ya bcp de préparation manuelles pour les données..
 

Discussions similaires

Statistiques des forums

Discussions
312 204
Messages
2 086 198
Membres
103 155
dernier inscrit
lombrik