Microsoft 365 Copier Tableaux Listobject Classeur fermé

Regueiro

XLDnaute Impliqué
Bonsoir le Forum
Explication : Dans mon fichier 1 Tableau (Tableau1) structure identique aux autres
Je copie les tableaux sources depuis un classeur fermé.
Dans le Classeur, il y actuellement 4 tableaux ( Tableau1 à 4)
Chaque année il y a un tableau supplémentaire.
Pas de problème, mais le message : le presse-papiers contient une grande quantité d'information. oui et OK
Ma question, il y a t'il une autre façon de faire ADO ?

VB:
Option Explicit
Option Compare Text
Dim TBLS As ListObject         'Tableau source "Tableau1 ou 2-3-4"
Dim s As Byte
Dim wk As Workbook
Dim i
Dim TBLD As ListObject      'Tableau destination

Sub CopierTableau()
Application.ScreenUpdating = False
Set wk = Workbooks.Open("C:\Users\jre\Documents\PRIX REVIENT \FACTURE - ACOMPTE.xlsx")
Set TBLD = ThisWorkbook.Worksheets("Feuil1").ListObjects("Tableau1")
TBLD.ListRows.Add

i = 0
For s = 1 To wk.Sheets.Count
    For Each TBLS In wk.Sheets(s).ListObjects
        'Uniquement les noms "Tableau"
        If TBLS.Name Like "*Tableau*" Then
              TBLS.DataBodyRange.Cells.Copy
              TBLD.DataBodyRange.Rows(TBLD.DataBodyRange.Rows.Count).PasteSpecial (xlPasteValues)
                     End If
    Next TBLS
Next s
i = i + 1

'Fermeture sans enregistrer
wk.Close savechanges:=False
Set wk = Nothing
Application.ScreenUpdating = True 'Facultatif
End Sub

Sub EffaceTBLD()
Set TBLD = ThisWorkbook.Worksheets("Feuil1").ListObjects("Tableau1")
TBLD.DataBodyRange.Delete
TBLD.ListRows.Add
End Sub
 

Regueiro

XLDnaute Impliqué
Bonsoir le Forum, Chris
Avec powerquery, j'ai essayé mais je dois faire trop de manipulation
Importer mes 4 tableaux, ensuite combiner les requêtes fusionner max 3 tableaux.
Ok cela crée un xème tableau (ajouter1) que je fusionne avec le 4ème tableau.
Et enfin le dernier tableau avec les 4 fusionner = Ajouter2
Je voulais savoir si on pouvait faire ça avec du VBA
Bonne soirée
 

chris

XLDnaute Barbatruc
NOooon

C'est beaucoup plus simple

Le code m résultant pour l’import et la synthèses des tableaux du classeur externe
VB:
let
    Source = Excel.Workbook(File.Contents("T:\TEMP\xxxxx.xlsx"), null, true),
    #"Lignes filtrées" = Table.SelectRows(Source, each ([Kind] = "Table")),
    #"Autres colonnes supprimées" = Table.SelectColumns(#"Lignes filtrées",{"Data"}),
    #"Data développé" = Table.ExpandTableColumn(#"Autres colonnes supprimées", "Data", {"Colonne1", "Colonne2", "Colonne3", "Colonne4", "Colonne5", "Colonne6"}, {"Colonne1", "Colonne2", "Colonne3", "Colonne4", "Colonne5", "Colonne6"})
in
    #"Data développé"
en adaptant le nom et chemin du fichier et la liste des colonnes
ou bien, pour celles-ci, avec une ligne générique
Code:
#"Data développé" = Table.ExpandTableColumn(#"Autres colonnes supprimées", "Data", List.Union(List.Transform(#"Autres colonnes supprimées"[Data], each Table.ColumnNames(_))))

reste à ajouter au tableau du classeur initial mais en tout c'est très peu de manips et automtique quel que soit le nombre de tableaux
 

Regueiro

XLDnaute Impliqué
Bonsoir le Forum.
Chris, merci pour les infos.
Voici comment j'ai procédé.
1. j'établis une connexion avec mes 4 tableaux dans 4 fichiers différents
VB:
et
    Source = Excel.Workbook(File.Contents("C:\Users\xxxx\facture 2017.xlsm"), null, true),
    Tableau1_Table = Source{[Item="Tableau1",Kind="Table"]}[Data],
    #"Type modifié" = Table.TransformColumnTypes(Tableau1_Table,{{"N°#(lf)FACTURE", Int64.Type}, {"N°#(lf)CHANTIER", type text}, {"DATE #(lf)FACTURE", type date}, {"MAITRE OUVRAGE", type text}, {"MONTANT #(lf)FACTURE HT", type number}, {"OBJET", type text}, {"TYPE", type text}, {"COMPTE", type text}, {"PAIEMENT #(lf)RECU LE", type date}, {"MONTANT#(lf)RECU HT", type number}, {"DIFF #(lf)PAIEMENT", type number}, {"DELAIS", Int64.Type}, {"NOMBRE #(lf)FACTURE", type number}, {"COMMENTAIRES", type text}})
in
    #"Type modifié"
2. Données - Requêtes et Connexions
Ajouter des tables - Tableau1 + Tableau2 + etc
Je renomme cette requête et je charge sur une feuille sous forme de tableau
3. Etablissement de mon tableau de bord avec uniquement des formules
Merci, en effet c'est plus simple que du VBA

Code:
let
    Source = Table.Combine({Tableau1, Tableau2, Tableau3, Tableau4})
in
    Source
 

Statistiques des forums

Discussions
312 106
Messages
2 085 352
Membres
102 871
dernier inscrit
Maïmanko