Bonjour Floune, Tom, le Forum
Comme j'avais pensé à indiquer dans notre
Charte il est important d'indiquer son niveaun et spécialement par rapport au VBA dans ce cas de figure. (Article 3-d)
En effet ce que tu demandes se fera à mon avis 100% par VBA, et vu l'ampleur de l'application, il y aura besoin d'avoir certaines bases de connaissance en programmation pour comprendre ce que l'on pourrait te donner comme pistes.
Car même avec la meilleure volonté et du temps disponible, ce projet développé dans son intégralité, dépassera de loin la taille d'un Zip de 50 Ko.
Donc pour commencer je peux te donner des pistes avec des codes de programmation les plus simples possibles (au détriment de l'optimisation et rapidité, car là on fait pas d'ADO, mais on ouvre les classeurs, on les lis et on les ferme un à un...) :
Option Explicit
Option Compare Text
Const Chemin As String = "C:\Agents\Reports" '<<<<< A ADAPTER
Public Transfert As Workbook
Public Mois As String
Sub OpenFileToReportToTranfert()
Dim Fichier As Variant
Set Transfert = ThisWorkbook
Mois = InputBox("Choisir le Mois à reporter", "Sélection du Mois", "Avril")
Transfert.Sheets(Mois).Range("A4:I500").Clear
With Application.FileSearch
.NewSearch
.LookIn = Chemin
.Filename = "*.xls"
.SearchSubFolders = False
.Execute
For Each Fichier In .FoundFiles
Workbooks.Open Fichier
ReportingMacro
Next Fichier
End With
End Sub
Sub ReportingMacro()
Dim Nom As String
Dim C As Byte
Dim CC As Byte
Dim PlageToCopy As Range, CellToCopy As Range
Dim L As Integer
C = Len(ActiveWorkbook.Name)
CC = C - 4
Nom = Left(ActiveWorkbook.Name, CC)
With ActiveWorkbook
With .Sheets(Mois)
Set PlageToCopy = .Range("A4:A" & .Range("A4").End(xlDown).Row)
End With
End With
With Transfert.Sheets(Mois)
For Each CellToCopy In PlageToCopy
If IsDate(CellToCopy) Then
L = .Range("A65536").End(xlUp).Row + 1
.Range("A" & L) = CellToCopy
.Range("B" & L) = Nom
.Range("C" & L) = CellToCopy.Offset(0, 1)
.Range("D" & L) = CellToCopy.Offset(0, 2)
.Range("E" & L) = CellToCopy.Offset(0, 3)
.Range("F" & L) = CellToCopy.Offset(0, 4)
.Range("G" & L) = CellToCopy.Offset(0, 5)
.Range("H" & L) = CellToCopy.Offset(0, 6)
.Range("I" & L) = CellToCopy.Offset(0, 7)
End If
Next CellToCopy
End With
ActiveWorkbook.Close False
End Sub
NB : Il est à noter une "discrepancy"
(comment dit-on en français !! lol) une erreur dirons nous, entre tes données du post initial et tes fichier joints...
En effet dans les données de bases tu écrit textuellement
"A5 à A48 = date que je veux recopier'....... "B5 à H48 = données que je veux recopier"
Or dans tes fichiers exemples tu pars de la ligne "4" vers la ligne 48.....
Ce que j'ai donc appliqué dans mon code... ligne départ = 4
Voilà sinon il te faudra modifier of course le Chemin dans la Constante en début de code, afin d'y indiquer où se trouve les fichiers que tu dois reporter (et les mettre dans ce répertoire, sans autres fichiers XLS, non-concernés)
Mise en garde Pour que ce programme fonctionne, il est impératif que tu soies ultra rigoureux et scrupuleux sur les noms d'onglets, si tu fais tourner Décembre, mais que les feuilles n'existent pas, le débugueur te le fera savoir...
Bon Week End à tous et toutes
@+Thierry