Concaténation de tableaux selon critères

Bonjour !

Je suis actuellement en stage et on m'a demandé de programmer une concaténation automatique de deux tableaux à l'ouverture du premier.

J'ai créé deux fichiers simplifiés pour illustrer le problème.

Le tableau T1 est un filtre qui va sélectionner des données à relever sur le second tableau. Le second T2 ne contient pas toujours les données demandées dans T1.

Voici mon code (avec F1 de T1 active et T2 ouvert au lancement) :

N = Range("A2").End(xlDown).Row

For i = 2 To N:

FA = Range("B" & i)

Windows("T2.xlsx").Activate

Sheets(1).Activate

If Not ActiveSheet.Columns(1).Find(FA).Row Is Nothing Then

l = ActiveSheet.Columns(1).Find(FA).Row

Range("A"&l&":AJ"&l).Copy

Windows("T1.xlsm").Activate

Sheets(1).Activate

Range("B" & i).Select

ActiveSheet.Paste

End If

Next

Vous trouverez en deuxième feuille de T1 le résultat attendu.

Je code depuis 4 ans sur python, j'ai découvert VBA il y a seulement une semaine, je suis débutante dans ce langage et ne comprends pas pourquoi il ne marche pas, surtout que les messages d'erreurs sont en allemand (bien que mon niveau soit bon).

Merci d'avance pour votre aide !

5t1.xlsm (14.41 Ko)
5t2.xlsx (12.22 Ko)

bonjour

ça se fait avec Power Query, ETL moderne intégré à Excel et à Power BI (si tu pythonnes, tu sais manipuler des données, et tu connais les ETL)

Youtube "excel power aquery concaténer fichiers"

bon travail

amitiés

Effectivement avec Query c'est extrêmement plus simple et rapide, merci beaucoup !

Néanmoins je rencontre un petit problème à l'actualisation du tableau résultant. Quand j'ajoute une ligne au premier tableau pour laquelle je sais qu'il existe une ligne correspondante dans le second, la ligne est bien créée dans le tableau final mais sans les données de issues du second tableau.

Auriez-vous une solution ?

Bonjour et bienvenue sur le forum

Bonjour à tous

Essaie ce code corrigé :

Option Explicit

Dim ft1 As Worksheet, ft2 As Worksheet, cell As Range
Dim i&, ligne&, n&, fa!

Sub Automat()

    Set ft1 = ActiveSheet
    Set ft2 = Workbooks("T2.xlsx").Sheets(1)

    n = ft1.Range("A2").End(xlDown).Row
    For i = 2 To n:
        'fa = Range("B" & i)
        fa = Range("A" & i)
        'Windows("T2.xlsx").Activate
        'Sheets(1).Activate
        'If Not ActiveSheet.Columns(1).Find(fa).Row Is Nothing Then

        Set cell = ft2.Columns(1).Find(fa, lookat:=xlWhole, LookIn:=xlValues)
        If Not cell Is Nothing Then
            'ligne = ActiveSheet.Columns(1).Find(fa).Row
            ligne = cell.Row
            'Range("A"&ligne&":AJ"&ligne).Copy
            ft2.Range("A" & ligne & ":AJ" & ligne).Copy
            ft1.Range("A" & i).PasteSpecial xlPasteValues

            'Windows("T1.xlsm").Activate
            'Sheets(1).Activate
            'Range("B" & i).Select
            'ActiveSheet.Paste
        End If
    Next i

End Sub

Te convient-il ?

Bye !

Effectivement avec Query c'est extrêmement plus simple et rapide, merci beaucoup !

Néanmoins je rencontre un petit problème à l'actualisation du tableau résultant. Quand j'ajoute une ligne au premier tableau pour laquelle je sais qu'il existe une ligne correspondante dans le second, la ligne est bien créée dans le tableau final mais sans les données de issues du second tableau.

Auriez-vous une solution ?

re à tous

c'est le problème d'intégrité référentielle, pour lequel Excel n'a aucun automatisme

note : les SGBD ont tous cet automatisme

soit tu règle ça par VBA (solution gmb, salut au passage)

soit tu mets une alerte du type =SI(ESTERREUR((RECHERCHEV(....);"Donnée manquante")

ceci permet de voir qu'il faut saisir une donnée dans l'autre tableau

étant nul en VBA, je préfère la seconde solution

amitiés

Rechercher des sujets similaires à "concatenation tableaux criteres"