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 !
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 SubTe 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