Fichier synthèse de plusieurs fichiers Excel -copie cellule
Bonjour,
Je sollicite votre aide pour une macro vba pour créer un nouveau fichier de synthèse à partir de plusieurs fichiers excel (copie des cellules bien définies dans un tableau de synthèse). En effet j'ai plusieurs fichiers identiques qui se trouvent dans le dossier donnees. La structure des fichiers est identique. Ces fichiers n'ont pas le même nom.
Sur chaque fichier je souhaiterai récupérer 4 cellules différentes sur deux onglets différents
Feuil1 (A10 et J10)
Feuil 2 (B4 et B5)
et je souhaite à la fin regrouper les éléments dans un nouveau fichier qui sera crée et qui s'appellera Recap.xls et qui aura les éléments suivants
ENTETE1, ENTETE2, ENTETE3, ENTETE4
Contenu (A10) fichier 1, Contenu (J10) fichier 1, contenu (B4) fichier 1, Contenu (B5) fichier 1
Contenu (A10) fichier 2, Contenu (J10) fichier 2, contenu (B4) fichier 2, Contenu (B5) fichier 2
.
.
.
Contenu (A10) fichier n, Contenu (J10) fichier n, contenu (B4) fichier n, Contenu (B5) fichier n Votre aide me sera d'un très grand secours.
Merci
Un peu d'aide sur ce sujet...
Bonjour papis
Ci-joint un essai.
La macro est attachée au fichier Récup qu'il faut ouvrir.
Elle se lance en cliquant sur le bouton bleu et ouvre une boite de dialogue qui permet de sélectionner, avec un choix multiple, les fichiers sur lesquels se trouvent les données à récupérer.
Ces fichiers s'ouvrent puis se ferment les uns après les autres.
Cela te convient-il ?
A te lire
Bye
Bonsoir,
Une autre méthode à mettre dans un module de feuille.
Référence Microsoft Scripting Runtime à activer.
Scan ici tous les fichiers du dossier.
Option Explicit
Sub test()
Dim FSO As FileSystemObject
Dim aFile As File
Dim Wb As Workbook
Dim lRow%
Dim LeFolder As Folder
Set FSO = New FileSystemObject
Set LeFolder = FSO.GetFolder("C:\Recap") 'A modifier
lRow = Me.Range("A" & Rows.Count).End(xlUp).Row + 1
Application.ScreenUpdating = False
For Each aFile In LeFolder.Files
Set Wb = Workbooks.Open(aFile.Path)
Me.Range("A" & lRow) = Wb.Sheets(1).Range("A10")
Me.Range("B" & lRow) = Wb.Sheets(1).Range("J10")
Me.Range("C" & lRow).Resize(1, 2) = Wb.Sheets(2).Range("B4").Resize(1, 2).Value
Wb.Close
lRow = lRow + 1
Next
Set Wb = Nothing
Set LeFolder = Nothing
Set FSO = Nothing
End SubCdt,
Darzou
Bonjour gmb,
Merci beaucoup pour ce retour. Je commençais à desespérer
Merci de ton aide.
Papis
gmb a écrit :Bonjour papis
Ci-joint un essai.
La macro est attachée au fichier Récup qu'il faut ouvrir.
Elle se lance en cliquant sur le bouton bleu et ouvre une boite de dialogue qui permet de sélectionner, avec un choix multiple, les fichiers sur lesquels se trouvent les données à récupérer.
Ces fichiers s'ouvrent puis se ferment les uns après les autres.
Cela te convient-il ?
A te lire
Bye
papis a écrit :Bonjour gmb,
Merci beaucoup pour ce retour. [...]
Merci de ton aide.
Papis
Bien qu'incomplète compte tenu de vos précisions, je pense qu'il eut été de rigueur ne serait ce que de saluer un internaute se penchant sur votre problème.
Darzou
Bonjour papis
Une petite remarque pour commencer : dans la macro envoyée hier, il ne faut pas choisir fichier par fichier mais tous les fichiers d'un coup, en faisant glisser la souris avec le doigt enfoncé.
Ci-joint un nouvel essai.
Tous les fichiers sources, de "Fichier 1" à "Fichier n" doivent se trouver, comme tu le demandes, dans un même dossier que tu peux appeler comme bon te semble.
Tu dois par contre mettre aussi dans ce dossier le fichier qui contient la macro et que j'ai appelé "Macro-Récap".
Ce fichier ne contient que le bouton de lancement sur sa première feuille.
Lorsque la macro a fini son travail, elle laisse ouvert le fichier "Récap" qu'elle vient de créer et d'enregistrer dans le même dossier de départ au format ".xls" comme demandé.
S'il y avait déjà un dossier appelé "Récap", il à été écrasé.
Cela te convient-il ?
A te lire
Bye
merci beaucoup pour cette contribution. Le programme fonctionne aussi
Darzou a écrit :Bonsoir,
Une autre méthode à mettre dans un module de feuille.
Référence Microsoft Scripting Runtime à activer.
Scan ici tous les fichiers du dossier.
Option Explicit Sub test() Dim FSO As FileSystemObject Dim aFile As File Dim Wb As Workbook Dim lRow% Dim LeFolder As Folder Set FSO = New FileSystemObject Set LeFolder = FSO.GetFolder("C:\Recap") 'A modifier lRow = Me.Range("A" & Rows.Count).End(xlUp).Row + 1 Application.ScreenUpdating = False For Each aFile In LeFolder.Files Set Wb = Workbooks.Open(aFile.Path) Me.Range("A" & lRow) = Wb.Sheets(1).Range("A10") Me.Range("B" & lRow) = Wb.Sheets(1).Range("J10") Me.Range("C" & lRow).Resize(1, 2) = Wb.Sheets(2).Range("B4").Resize(1, 2).Value Wb.Close lRow = lRow + 1 Next Set Wb = Nothing Set LeFolder = Nothing Set FSO = Nothing End SubCdt,
Darzou
Bonjour gmb
Cela correspond exactement à ce que je voulais. J'ai modifié une ligne sur le lien des fichiers qui étaient en erreur.
MERCI BEAUCOUP
gmb a écrit :Bonjour papis
Une petite remarque pour commencer : dans la macro envoyée hier, il ne faut pas choisir fichier par fichier mais tous les fichiers d'un coup, en faisant glisser la souris avec le doigt enfoncé.
Ci-joint un nouvel essai.
Tous les fichiers sources, de "Fichier 1" à "Fichier n" doivent se trouver, comme tu le demandes, dans un même dossier que tu peux appeler comme bon te semble.
Tu dois par contre mettre aussi dans ce dossier le fichier qui contient la macro et que j'ai appelé "Macro-Récap".
Ce fichier ne contient que le bouton de lancement sur sa première feuille.
Lorsque la macro a fini son travail, elle laisse ouvert le fichier "Récap" qu'elle vient de créer et d'enregistrer dans le même dossier de départ au format ".xls" comme demandé.
S'il y avait déjà un dossier appelé "Récap", il à été écrasé.
Cela te convient-il ?
A te lire
Bye