Microsoft 365 Fusion de 2 tables

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

alexitt

XLDnaute Nouveau
Bonjour,
Je rencontre une difficulté sous Excel concernant la manipulation et la consolidation de données issues de deux tables distinctes :
  • Table 1 : Données dynamiques liées à mon ERP (contenant, par exemple, des dates).
  • Table 2 : Données statiques (contenant du texte figé).

Mon objectif est de dupliquer chaque ligne de la première table (ERP) pour qu'elle soit associée à toutes les lignes et valeurs de la seconde table (statique), générant ainsi un ensemble complet de combinaisons.

Pour illustrer mon besoin et le résultat attendu, vous trouverez ci-joint un fichier d'exemple.

Je n'ai pas encore exploré de solution en VBA, privilégiant dans un premier temps une approche via Power Query.

Pensez-vous qu'il s'agisse de la méthode la plus adaptée et la plus simple pour réaliser cette opération ?

Merci d'avance pour votre aide.
 

Pièces jointes

Bonjour,

Avec power Query:

VB:
let
A = (x)=> Table.ToRows(Excel.CurrentWorkbook(){[Name="Tableau"&x]}[Content]),
B = Table.FromRows(List.TransformMany(A("1"), each A("4"), (x,y)=> {x{0}} & y), {"Date", "Colonne 1"}),
C = Table.TransformColumnTypes(B, {"Date", type date})
in C

Bonne journée

edit: Bonjour Cousinhub
 
Bonjour,

Pour Power Query, je passe la main.

Pour VBA, code ci-dessous à mettre dans un module standard et enregistrer le fichier en xlsm.
VB:
Option Explicit

Sub CreerTbResultat()
    Dim ws As Worksheet
    Dim loDate As ListObject, loValeur As ListObject, loResultat As ListObject
    Dim rngDate As Range, rngValeur As Range
    Dim i As Long, j As Long, ligne As Long
    
    Set ws = ThisWorkbook.Sheets("Feuil1")
    
    ' Récupérer les tableaux existants
    Set loDate = ws.ListObjects("Tableau1")
    Set loValeur = ws.ListObjects("Tableau2")
    
    Set rngDate = loDate.DataBodyRange
    Set rngValeur = loValeur.DataBodyRange
    
    ' Supprimer l'ancien tableau TbResultat s'il existe
    On Error Resume Next
    ws.ListObjects("TbResultat").Delete
    On Error GoTo 0
    
    ' Poser les en-têtes à partir de F3
    ws.Range("I3").Value = "Date"
    ws.Range("J3").Value = "Valeur"
    
    ligne = 4
    
    ' chaque date × chaque valeur
    For i = 1 To rngDate.Rows.Count
        For j = 1 To rngValeur.Rows.Count
            ws.Cells(ligne, 6).Value = rngDate.Cells(i, 1).Value
            ws.Cells(ligne, 7).Value = rngValeur.Cells(j, 1).Value
            ligne = ligne + 1
        Next j
    Next i
    
    ' Créer le tableau structuré TbResultat
    Set loResultat = ws.ListObjects.Add( _
        SourceType:=xlSrcRange, _
        Source:=ws.Range("F3").Resize(ligne - 3, 2), _
        XlListObjectHasHeaders:=xlYes)
    
    loResultat.Name = "TbResultat"
    
    MsgBox "Tableau TbResultat créé avec " & loResultat.DataBodyRange.Rows.Count & " lignes."
End Sub
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
1 K
Retour