Bonjour,
Je te mets une piste par VBA sans passer par une boucle qui fonctionne très bien avec les fichiers que tu m'as joint :
Sub transfert()
Dim WB()
Dim WS_I As Worksheet
Dim i%
Application.ScreenUpdating = False
Application.DisplayAlerts = False
WB = Array("fichier1", "fichier2")
Set WS_I = ThisWorkbook.Worksheets("Feuil1")
For i = 0 To UBound(WB)
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & WB(i) & ".xlsx"
ActiveWorkbook.ActiveSheet.Cells.Copy
WS_I.Cells.PasteSpecial Paste:=xlPasteValues, SkipBlanks:=True 'skipblanc permet de ne pas écraser les cellules avec valeur par des cellules sans valeur
ActiveWorkbook.Close
Next i
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
A noter qu'il sera surement nécessaire de restreindre la range cells des lignes 11 et 12 pour ne pas trop ralentir l’exécution. J'espère que tu arriveras à adapter ce code à ton fichier. Le soucis c'est que là les données sont présentées en colonnes, dans ton code en lignes. Ce ne sont pas les mêmes plages, vas-tu avoir des plages recouvrantes entre tes différents fichiers où des collages vont écraser d'autres valeurs ?
Ce code est à titre d'exemple afin de te montrer qu'il n'est pas forcément nécessaire de passer par des boucles pour atteindre ton objectif (même si c'est souvent très pratique !).
Cdlt,