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
 

chris

XLDnaute Barbatruc
re

Regarde mon post édité : j'avais corrigé 2 minutes après... mais il manque cependant l'identification de la feuille

VB:
            fichierXLS = Client & ".xlsx"
           Set SH = Range("Articles").Parent
            SH.Range("A:A,E:K,N:Z").EntireColumn.Hidden = True
Ton exemple en MP ne correspond pas aux classeurs postés dans le #26

On ne sait pas si tu changes les calculs d'un client à l'autre et donc s'il faut masquer/démasquer à chaque fois
De tels calculs sur un tel nombre de lignes fait perdre une grande partie de l'intérêt des requêtes...

C'est dans les requêtes qu'ils faut gérer... On n'est plus dans l'énoncé de départ...
 
Dernière édition:

jojolatribuche

XLDnaute Junior
re

Regarde mon post édité : j'avais corrigé 2 minutes après... mais il manque cependant l'identification de la feuille

VB:
            fichierXLS = Client & ".xlsx"
           Set SH = Range("Articles").Parent
            SH.Range("A:A,E:K,N:Z").EntireColumn.Hidden = True
Ton exemple en MP ne correspond pas aux classeurs postés dans le #26

On ne sait pas si tu changes les calculs d'un client à l'autre et donc s'il faut masquer/démasquer à chaque fois
De tels calculs sur un tel nombre de lignes fait perdre une grande partie de l'intérêt des requêtes...

C'est dans les requêtes qu'ils faut gérer... On n'est plus dans l'énoncé de départ...
effectivement je suis resté sur le premier que tu m'a créé car la notion de Price group au final je l'avais en clé dans la requête pour dire que la query fonctionne et appel le client de son price group j'ai testé et ça fonctionne.
Je viens de remettre la macro à jour mais il bug sur range
1671705528266.png

Et en effet pour la seconde partie on sort de la requête car je ne sais pas comment interprêter cette donnée et don affichage quand tu vois la formule que j'ai imbriqué pour avoir le resultat je ne sais si dans power query c'est possible sans devoir passer justement par ce système.. je suis pas assez callé pour ça maintenant si tu as une idée là dessus.
L'onglet table PG est une liste de prix que certain clients bénéficie soit sur achat en quantité ou un prix préférenciel comme on parle de 600 prix pour 300 clients je pensez pouvoir le gérer de cette façon..
 

chris

XLDnaute Barbatruc
RE

Il manque la ligne de copy donc il est normal que le paste ne fonctionne pas : reprends la ligne copy comme indiqué dans le code du #29

Dans le #31 je n'ai indiqué que les 3 1ères afin de montrer où était le changement : cela ne signifiait pas qu'il fallait supprimer d'autres lignes en dessous...
 

jojolatribuche

XLDnaute Junior
RE

Il manque la ligne de copy donc il est normal que le paste ne fonctionne pas : reprends la ligne copy comme indiqué dans le code du #29

Dans le #31 je n'ai indiqué que les 3 1ères afin de montrer où était le changement : cela ne signifiait pas qu'il fallait supprimer d'autres lignes en dessous...
J'ai recopié la macro elle fonctionne sauf qu'elle ne rafraichi plus la feuille de travail et me copie les mêmes données pour tous les clients :-( :-( dsl de t'embêter avec ça encore..
 

jojolatribuche

XLDnaute Junior
J'ai recopié la macro elle fonctionne sauf qu'elle ne rafraichi plus la feuille de travail et me copie les mêmes données pour tous les clients :-( :-( dsl de t'embêter avec ça encore..
j'ai remis la macro comme ceci pour faire le refresh mais du coup il cache plus les colonnes :-( mais rafraichis les données..

VB:
Sub F_Clients()

  Chemin = Range("Dossier")
  Application.ScreenUpdating = False
            For Each Client In [ClientsTous].ListObject.ListColumns("Customer account").DataBodyRange
    Range("Choix").Value = Client
    [Articles].ListObject.QueryTable.Refresh
    fichierXLS = Client & ".xlsx"

            Range("A:A,E:K,N:Z").EntireColumn.Hidden = True
            Range("Articles[#All]").SpecialCells(xlCellTypeVisible).Copy
            Workbooks.Add
            Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
            Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
                Cells.EntireColumn.AutoFit
            ActiveSheet.Name = Client
            Application.DisplayAlerts = False
            ActiveWorkbook.SaveAs Chemin & fichierXLS
            ActiveWorkbook.Close
            Application.DisplayAlerts = True
            Cells.EntireColumn.Hidden = False

        Next Client

End Sub
 

chris

XLDnaute Barbatruc
Bonjour

Forcément tu pars sur une demande puis cela évolue plusieurs fois et manifestement tu ne connais pas VBA car il n'est pas très difficile de comprendre les instructions avec un minimum d'effort...

Si on repars sur la demande à laquelle j'ai répondu au #29 avec les corrections et les masquages/démasquages
VB:
Sub F_Clients()
    Chemin = Range("Dossier")
    Application.ScreenUpdating = False
    For Each Client In [ClientsTous].ListObject.ListColumns("Customer account").DataBodyRange
        Range("Choix").Value = Client
        [Articles].ListObject.QueryTable.Refresh
        fichierXLS = Client & ".xlsx"
        Set SH = Range("Articles").Parent
        SH.Range("A:A,E:K,N:Z").EntireColumn.Hidden = True
        Range("Articles[#All]").SpecialCells(xlCellTypeVisible).Copy
        Workbooks.Add
        Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
            Cells.EntireColumn.AutoFit
        ActiveSheet.Name = Client
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Chemin & fichierXLS
        ActiveWorkbook.Close
        Application.DisplayAlerts = True
        SH.Cells.EntireColumn.Hidden = False

    Next Client
End Sub
 

jojolatribuche

XLDnaute Junior
Bonjour

Forcément tu pars sur une demande puis cela évolue plusieurs fois et manifestement tu ne connais pas VBA car il n'est pas très difficile de comprendre les instructions avec un minimum d'effort...

Si on repars sur la demande à laquelle j'ai répondu au #29 avec les corrections et les masquages/démasquages
VB:
Sub F_Clients()
    Chemin = Range("Dossier")
    Application.ScreenUpdating = False
    For Each Client In [ClientsTous].ListObject.ListColumns("Customer account").DataBodyRange
        Range("Choix").Value = Client
        [Articles].ListObject.QueryTable.Refresh
        fichierXLS = Client & ".xlsx"
        Set SH = Range("Articles").Parent
        SH.Range("A:A,E:K,N:Z").EntireColumn.Hidden = True
        Range("Articles[#All]").SpecialCells(xlCellTypeVisible).Copy
        Workbooks.Add
        Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
            Cells.EntireColumn.AutoFit
        ActiveSheet.Name = Client
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Chemin & fichierXLS
        ActiveWorkbook.Close
        Application.DisplayAlerts = True
        SH.Cells.EntireColumn.Hidden = False

    Next Client
End Sub
Tout d'abord un joyeux Noël :)
Ensuite un tout tout grand merci à toi et ton support exceptionnel
Tout fonctionne parfaitement et j'ai pu ainsi communiquer vers les clients sans fausse note grâce à toi 1000 merci et long vie à excel-downloads.com :cool:
 

Corinnez

XLDnaute Nouveau
Il faut charger la table power query dans un tableau croisé dynamique, puis glisser la colonne clients dans le champ filtre et dans le menu « Analyse du tableau croisé dynamique », « Options », « Afficher les pages de filtres de rapport ». Ensuite exporter ces feuilles (près de 2000 si j’ai bien compris) avec une macro et pdf ou format excel. Faire l’essai avec 100 clients… ça marche, je le fais régulièrement.
 

Discussions similaires

Statistiques des forums

Discussions
312 045
Messages
2 084 834
Membres
102 685
dernier inscrit
med_remi021