IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Combiner des tableaux Power Query avec une boucle FOR


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Ingénieur commercial
    Inscrit en
    Avril 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2022
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Combiner des tableaux Power Query avec une boucle FOR
    Bonjour,

    Je souhaiterais remplacer le bout de code entre guillemets en fin de programme (Table.Combine ({Tab1,Tab2,Tab3,Tab4,Tab5.......}) afin d'automatiser le process.
    Je dispose de plusieurs fichiers quelconques dont le nombre de tableaux n'est pas le même.
    Je souhaiterais que pour chacun de ces fichiers je puisse combiner leur table de façon automatique.
    Par exemple: Fichier 1 ; 10 tableaux séparés
    Fichier 2 ; 25 tableaux séparés
    fichier 3 ; 100 tableaux séparés

    J'obtiens par la suite de l'exécution de mon programme : Fichier 1 ; 10 tableaux combinés
    Fichier 2 ; 25 tableaux combinés
    Fichier 3 ; 100 tableaux combinés

    Voici le code que j'ai commencé à faire mais le problème est que je rentre une valeur de type string à la place d'une valeur de type liste de table.

    Nom : Image 3.jpg
Affichages : 1299
Taille : 156,6 Ko

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 419
    Points : 16 262
    Points
    16 262
    Par défaut
    Bonjour

    Si ces sont des tableaux structurés issus de requêtes, une requête powerquery peut traiter les classeurs d'un dossier assez simplement.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 057
    Points : 2 522
    Points
    2 522
    Par défaut
    Bonjour
    je compléterai en écrivant qu'il vaut bien mieux gérer dans Power Query votre liste de tableaux que dans VBA.
    Les possibilités des fonctions "List" en langage M sont infinies ou presque et généralement assez simple à mettre en œuvre.
    D'où vient l'information de votre liste de 10, 20 ou 100 tableaux à agréger ?
    Stéphane

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Ingénieur commercial
    Inscrit en
    Avril 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2022
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Je souhaiterais déjà vous remercier pour avoir répondu.
    Mes tableaux sont effectivement des tableaux structurés issus de requêtes. C'est avec la requête Table.Combine de Power Query que je gère l'ajout des différentes tables; c'est pourquoi j'obtiens ce code sous VBA Table.Combine ({Tab1,Tab2,Tab3,Tab4,Tab5.......}).
    Mes listes je les obtiens à partir d'un fichier PDF comportant un certain nombre de tableaux (Valeur non fixe d'un fichier PDF à l'autre) et que je souhaiterais combiner tous les tableaux d'un même fichier à chaque fois.
    Les informations entre fichier PDF ne pouvant être mélangé, il me faudrait un tableau combiné par PDF.

    PS: Il peut arriver d'avoir plus d'une trentaines de fichiers PDF pour lesquels il me faut refaire la même opération; d'où ma volonté d'automatiser le process.

  5. #5
    Membre émérite
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 057
    Points : 2 522
    Points
    2 522
    Par défaut
    Mais pourquoi vouloir passer par VBA ?
    Vous pouvez récupérer tous les tableaux d'un PDF en même temps avec Power Query et la fonction Pdf.Tables
    Ajoutez une pièce jointe si vous avez un exemple de fichier non confidentiel
    Stéphane

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    Hello,
    voici un exemple de requête en Power Query M pour récupérer une liste de tableaux de même type d'une source et les combiner en un seul tableau avec Power Query M
    Ma source est un classeur (sniff ! je n'ai qu'Excel 2016 donc pas de connecteur PDF) mais je pense que cela devrait fonctionner pareil avec un connecteur PDF. Ce classeur contient 6 tableaux de même type :

    Nom : JpSourcePowerM.PNG
Affichages : 1226
Taille : 16,5 Ko

    Dans mon exemple, j'effectue des étapes supplémentaires qui ne sont pas forcément nécessaires :
    1 - Tri de la liste des tables suivant un critère personnalisé ( tri sur la partie numérique du nom des tableaux). Et Pourquoi ne pas utiliser un tri classique (ex : Order.Ascending) me direz-vous ? Parce que le tri par défaut est alphabétique donc par exemple Tab1, Tab2, Tab10 sera trié Tab1, Tab10, Tab2. Avec le tri personnalisé on aura bien Tab1, Tab2, Tab10.
    2 - Filtre de la liste des tables suivant deux critères (on ne veut que les tableaux et dont le nom contient Tableau).

    Voici le code Power Query M :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let
        Source = Excel.Workbook(File.Contents("D:\Dev\Office\Excel\Tableaux.xlsx"), null, true),
        #"Lignes triées" = Table.Sort(Source,{{each Number.FromText(Text.Select([Name],{"0".."9"})), Order.Ascending}}),
        #"Liste Tables" = Table.SelectRows(#"Lignes triées", each ([Kind] = "Table" and Text.Contains([Name], "Tableau"))),
        #"Tables combinées" = Table.Combine(#"Liste Tables"[Data])
    in
        #"Tables combinées
    A noter que dans le cas d'un fichier PDF comme source la première ligne devrait ressembler à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Source = Pdf.Tables(File.Contents("c:\sample.pdf"))
    Voici la visualisation des différentes étapes de la requête Power Query M:

    Nom : JpPowerQueryM.gif
Affichages : 1225
Taille : 260,0 Ko

    Résultat Dans une feuille de classeur :

    Nom : JpResultPowerM.PNG
Affichages : 1210
Taille : 7,6 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Ingénieur commercial
    Inscrit en
    Avril 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2022
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Raccourcix Voir le message
    Mais pourquoi vouloir passer par VBA ?
    Vous pouvez récupérer tous les tableaux d'un PDF en même temps avec Power Query et la fonction Pdf.Tables
    Ajoutez une pièce jointe si vous avez un exemple de fichier non confidentiel
    Stéphane

    Je souhaite passer par vba car j'ai plusieurs fichier PDF à traiter séparément.
    Le fichier est confidentiel mais je peux vous faire un exemple de à quoi il ressemble. N'ayant pas les accès pour modifier le fichier PDF j'ai importé le tableau sur Excel pour que vous voyez à quoi cela ressemble.
    Nom : Image 2.jpg
Affichages : 1203
Taille : 38,7 Ko


    Chaque page du PDF contient un tableau comme l'image extraite jointe (avec un nombre de lignes variables en fonction des infos qui y sont rentrés).

    Dans mon programme, j'importe tous les tableaux, je les renomme, je crée la connexion aux requêtes et je les transpose.

    Nom : Image 4.jpg
Affichages : 1197
Taille : 210,0 Ko

    Ensuite je souhaite les combiner tous ensemble pour n'en faire qu'un seule grand tableau :

    Nom : Image 6.jpg
Affichages : 1190
Taille : 233,2 Ko

    Le code reste du Power Query M car c'est d'ailleurs sur celui-ci que je fais la combinaison de tableaux mais l'utilisation du Table.combine ({liste de tables}) requiert en paramètres une liste de tableaux et je n'arrive pas à récupérer chacun de mes tableaux sans avoir à les écrire un par un.

    En espérant avoir mieux décrit le problème.

  8. #8
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    Citation Envoyé par mm12345 Voir le message
    Le code reste du Power Query M car c'est d'ailleurs sur celui-ci que je fais la combinaison de tableaux mais l'utilisation du Table.combine ({liste de tables}) requiert en paramètres une liste de tableaux et je n'arrive pas à récupérer chacun de mes tableaux sans avoir à les écrire un par un.
    As-tu lu mon message précédent ?
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Ingénieur commercial
    Inscrit en
    Avril 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2022
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Salut,
    Oui j'ai lu ton message précédent.
    j'ai aussi vu que tous tes tableaux sont appelés par un seul nom "Liste Tables": #"Tables combinées" = Table.Combine(#"Liste Tables"[Data])
    in
    #"Tables combinées
    Comment les récupères-tu toutes ? Est-ce que "Liste Tables" est une variable de type string ou c'est autre chose ?

  10. #10
    Futur Membre du Club
    Femme Profil pro
    Ingénieur commercial
    Inscrit en
    Avril 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2022
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Ca y est, je viens de comprendre. C'est une étape. ( On ne sait plus lire de nos jours )

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Ingénieur commercial
    Inscrit en
    Avril 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2022
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    As-tu lu mon message précédent ?
    Salut,
    J'ai écrit les premières lignes comme tu me l'a décrit et j'obtiens cela mais il semblerait que je ne suis pas autorisé à combiner les fichiers. Peut être que je me trompe d'onglet. Dans l'attente de ton aide.

    Nom : Image 8.png
Affichages : 1197
Taille : 336,5 Ko

  12. #12
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    A quoi correspondent les 3 requêtes Table001, Table002, Table003 ? A 3 fichiers PDF différents ?
    Ce que tu nous montres correspond aux tables qu'il y a dans un fichier PDF ?
    Peux-tu nous montrer ce qu'il y a dans source (sans mettre de données confidentielles)
    Tu veux faire une fusion de toutes les tables de tous les fichiers ?
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  13. #13
    Futur Membre du Club
    Femme Profil pro
    Ingénieur commercial
    Inscrit en
    Avril 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2022
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Oui c'est bien cela, je veux faire une fusion de toutes mes tables qui se trouvent dans Table001
    Table002, Table003 sont à supprimées, j'ai fait la capture avant de les supprimer.

    Alors j'ai tout d'abord essayé celui-là :

    Nom : Image 11.jpg
Affichages : 1172
Taille : 113,9 Ko

    Comme ça ne passait pas j'ai mis çà :

    Nom : Image 13.jpg
Affichages : 1168
Taille : 260,6 Ko

  14. #14
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    Dans Etapes Appliquées tu cliques droit sur ta dernière étape (Lignes filtrées) et tu cliques sur insérer l'étape après.
    Dans cette nouvelle étape tu tapes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Table.Combine(#"Lignes filtrées"[Data])
    Tu renommes la nouvelle étape avec un nom explicite (clic droit Renommer)
    Normalement tu devrais avoir une table avec le contenu de toutes les autres
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  15. #15
    Futur Membre du Club
    Femme Profil pro
    Ingénieur commercial
    Inscrit en
    Avril 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2022
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    C'est tout bon, merci beaucoup beaucoup pour ton aide et ta patience.
    C'est vraiment trop puissant ce code !!!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Combiner des tableaux
    Par legomanfr dans le forum Power BI
    Réponses: 8
    Dernier message: 04/01/2022, 14h37
  2. Réponses: 2
    Dernier message: 11/07/2007, 10h40
  3. : remplir des zones de texte avec une boucle For
    Par Haro_GSD dans le forum Access
    Réponses: 3
    Dernier message: 20/09/2005, 21h23
  4. Generer des noms de variables avec une boucle
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/07/2004, 17h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo