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..
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...
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
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..
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...
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..
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..
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
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
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.