XL 2016 Comment compiler 3 tableaux dynamiques et 1

scoubidou35

XLDnaute Occasionnel
Bonjour à tous,

J'ai trois tableaux dynamiques (colonne A,C et E) et j'ai besoin pour un TCD que les 3 tableaux soient compilés en un seul comme dans mon fichier.
Sauf que j'ai fais un copier/coller des listes et donc mon nouveau tableau n'est plus dynamique or j'aimerai que si l'un des tableaux évoluent (rajout ou suppression de lignes) que le nouveau tableau se mettent à jour automatiquement et je ne vois pas comment procéder.

Je reste bien évidemment disponible pour des info complémentaires.

Merci
 

Pièces jointes

  • Fichier120321.xlsm
    13.9 KB · Affichages: 15
Solution
Bonjour scoubidou35,

Voyez le fichier joint et la macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim resu(), n As Byte, tablo, titre$, i&, x$, j&
ReDim resu(1 To Rows.Count, 1 To 2)
For n = 1 To 3
    tablo = ListObjects(n).Range 'matrice, plus rapide
    titre = tablo(1, 1)
    For i = 2 To UBound(tablo)
        x = Trim(tablo(i, 1))
        If x <> "" Then j = j + 1: resu(j, 1) = titre: resu(j, 2) = x
Next i, n
'---restitution---
Application.EnableEvents = False 'désactive les évènements
With ListObjects(4).Range
    If j Then .Cells(2, 1).Resize(j, 2) = resu Else .Rows(2).ClearContents
    On Error Resume Next
    .Rows(j + 2).Resize(.Rows.Count - j - 1).Delete xlUp 'RAZ en dessous...

job75

XLDnaute Barbatruc
Bonjour scoubidou35,

Voyez le fichier joint et la macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim resu(), n As Byte, tablo, titre$, i&, x$, j&
ReDim resu(1 To Rows.Count, 1 To 2)
For n = 1 To 3
    tablo = ListObjects(n).Range 'matrice, plus rapide
    titre = tablo(1, 1)
    For i = 2 To UBound(tablo)
        x = Trim(tablo(i, 1))
        If x <> "" Then j = j + 1: resu(j, 1) = titre: resu(j, 2) = x
Next i, n
'---restitution---
Application.EnableEvents = False 'désactive les évènements
With ListObjects(4).Range
    If j Then .Cells(2, 1).Resize(j, 2) = resu Else .Rows(2).ClearContents
    On Error Resume Next
    .Rows(j + 2).Resize(.Rows.Count - j - 1).Delete xlUp 'RAZ en dessous
    .EntireColumn.AutoFit 'ajustement largeurs
End With
With UsedRange: End With 'actualise la barre de défilement verticale
Application.EnableEvents = True 'réactive les évènements
End Sub
Elle se déclenche quand on modifie ou valide une cellule quelconque.

A+
 

Pièces jointes

  • Fichier120321(1).xlsm
    22.4 KB · Affichages: 10
Dernière édition:

scoubidou35

XLDnaute Occasionnel
Bonsoir job75
Merci pour votre travail c'est bien ce que je souhaite
j'ai modifié le code en enlevant :
If x <> "" Then car j'ai besoin des cases vides

Par contre comment je peux modifier l'emplacement du tableau compilé car j'aimerai qu'il n'y ait qu'une seul colonne entre mes tableaux et le tableau compilé. Car j'ai d'autres tableau après avec des codifications utilisés dans le fichier

Merci encore
 

scoubidou35

XLDnaute Occasionnel
Si désolé job75 j'ai oublié de réactualiser mon post j'avais un problème lorsque je rentrai de nouvelles données je me retrouvai avec un nouveau tableau compilé à jour mais qui écrasait mes autres tables. Mais je pense avoir trouvé la solution mais j'arrête pour aujourd'hui je suis HS.
Merci beaucoup pour l'aide et bonne nuit.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Puisque Excel 2016, voici une proposition avec Power Query. Le rafraîchissement de la requête se fait sur l'évènement change des cellules des trois tableaux.

Cordialement
 

Pièces jointes

  • Fichier120321.xlsm
    38 KB · Affichages: 4

scoubidou35

XLDnaute Occasionnel
Bonjour à tous,
Merci à Job75 et Roblochon pour leurs propositions. Les deux donnent exactement ce que je demandais.
Maintenant faut voir si l'un est plus avantageux que l'autre lorsque que l'on travaille de gros fichier (temps d'exécution par exemple).
Merci encore. Bonne journée
 

Discussions similaires

Statistiques des forums

Discussions
312 370
Messages
2 087 690
Membres
103 640
dernier inscrit
So pizza