Synthèse de données

titymax

XLDnaute Occasionnel
Bonjour à tous,

Le problème est le suivant :

J'ai différents fichiers sources de données (appelés source X), dont le format est identique et tous regroupés dans un seul et même répertoire.

Ce que je souhaite obtenir :

Un fichier de synthèse (appelé cible) et regroupant par colonne les infos suivantes :
- Colonne A --> la liste des fichiers sources présents dans le répertoire en question, de manière automatique, soit via une macro qui s'exécuterai à l'ouverture du fichier, soit via des formules.
- Colonnes B à X --> Les différentes données contenues dans ces différents fichiers sources, toujours de manière automatique, soit via une macro qui s'exécuterai à l'ouverture du fichier, soit via des formules.

NOTA : Etant sur un PC professionnel, il m'est impossible d'installer quoi que ce soit dessus, comme par exemple les macros MOREFUNC.

Ci-joints, des fichiers de travail, qui bien entendu, sont une simplification extrème des fichiers sur lesquels je dois réellement travailler.
 

Pièces jointes

  • Cible.xls
    20.5 KB · Affichages: 40
  • Source 2.xls
    20.5 KB · Affichages: 37
  • Source 1.xls
    20.5 KB · Affichages: 38
  • Cible.xls
    20.5 KB · Affichages: 37
  • Source 2.xls
    20.5 KB · Affichages: 36
  • Source 1.xls
    20.5 KB · Affichages: 40
  • Cible.xls
    20.5 KB · Affichages: 38
  • Source 2.xls
    20.5 KB · Affichages: 35
  • Source 1.xls
    20.5 KB · Affichages: 41

Efgé

XLDnaute Barbatruc
Re : Synthèse de données

Bonjour titymax, Une proposition, Il faut que le classeur cible soit dans le même répertoire que les classeurs sources. Le code est dans la feuille (clic droit sur l'onglet / visualiser le code). Le code est commenté. A tester sous 2010. Cordialement
 

Pièces jointes

  • Cible(1).xls
    40.5 KB · Affichages: 36
  • Cible(1).xls
    40.5 KB · Affichages: 43
  • Cible(1).xls
    40.5 KB · Affichages: 35

titymax

XLDnaute Occasionnel
Re : Synthèse de données

Bonjour et un ENORME MERCI à toi Efgé,

Merci d'avoir pris le temps de répondre à mon problème et de proposer une solution qui à priori répond à ma demande, c'est vraiment SUPER !!!

Que faut il faire, pour que cette macro s'exécute automatiquement à l'ouverture du fichier ?

J'ai copier/coller le code dans ThisWorkbook mais ça ne fonctionne pas...

Cordialement.
 

Efgé

XLDnaute Barbatruc
Re : Synthèse de données

Re. Pour le mettre dans le thisworkbook, il faut une petite adaptation. Mets le code présent dans la feuille 1 dans le thisworkBook dans une
VB:
Private Sub Workbook_Open()
LEs modifications sont commentées. Cordialement
 

Pièces jointes

  • Cible(2).xls
    41 KB · Affichages: 45
  • Cible(2).xls
    41 KB · Affichages: 55
  • Cible(2).xls
    41 KB · Affichages: 48

titymax

XLDnaute Occasionnel
Re : Synthèse de données

Aie !!! j'ai parlé un peu trop vite... En effet, je pensais pouvoir extrapoler/transposer cette solution à mon cas réel et ça coince.

Il se trouve que dans mon application, les fichiers source comportent plusieurs feuilles et que je dois aller chercher mes différentes données toujours dans les mêmes cellules de la même feuille (SYNTHESE) de mes différents fichiers sources.

En essayant d'adapter le code, à l'exécution ça plante.

Voir ci-dessous ce que j'ai modifié et/ou rajouté (souligné)

Private Sub Workbook_Open()
Dim dossier As Object, fichier As Object, i&, F As Worksheet
'On va utiliser la feuille 1 du classeur qui porte la macro
Set F = ThisWorkbook.Sheets("DONNEES")
'si on veux d'abord "vider" la feuille 1 pour ne pas avoir de doublons
F.Range("A3").Resize(F.UsedRange.Rows.Count, F.UsedRange.Columns.Count).ClearContents
'On bloque l'écran
Application.ScreenUpdating = False
'On défini le dossier ou ce trouve les classeurs
'(ici le même dossier que le classeur qui porte la macro)
Set dossier = CreateObject("Scripting.FileSystemObject").GetFolder(ThisWorkbook.Path)
'Pour chaque fichier du dossier
For Each fichier In dossier.Files
'Si ce n'est pas le fichier qui porte la macro (condition)
If fichier.Name <> ThisWorkbook.Name Then
'on récupère la première ligne vide de la feuille qui porte le bouton
i = Cells(Rows.Count, 1).End(xlUp).Row + 1
'on ouvre le fichier
'/ ! \ si le fichier est déja ouvert on plante...
Workbooks.Open Filename:=fichier
'Avec la feuille active du fichier ouvert
With ActiveWorkbook.ActiveSheet
'La cellule colonne A première ligne vide de la feuille qui porte le bouton
'est égale àau nom du fichier ouvert
F.Range("A" & i).Value = fichier.Name
'La cellule colonne B, première ligne vide de la feuille qui porte le bouton
'est égale à la cellule B3 de la feuille du fichier ouvert
F.Range("B" & i).Value = .Range("SYNTHESE!F2").Value
F.Range("C" & i).Value = .Range("SYNTHESE!F5").Value
F.Range("D" & i).Value = .Range("SYNTHESE!F6").Value
F.Range("E" & i).Value = .Range("SYNTHESE!I2").Value
F.Range("F" & i).Value = .Range("SYNTHESE!AJ43").Value
F.Range("G" & i).Value = .Range("SYNTHESE!F9").Value
F.Range("H" & i).Value = .Range("SYNTHESE!AF9").Value
F.Range("I" & i).Value = .Range("SYNTHESE!M8").Value
F.Range("J" & i).Value = .Range("SYNTHESE!F153").Value
F.Range("K" & i).Value = .Range("SYNTHESE!F156").Value
F.Range("L" & i).Value = .Range("SYNTHESE!F158").Value
F.Range("M" & i).Value = .Range("SYNTHESE!G153").Value
F.Range("N" & i).Value = .Range("SYNTHESE!G156").Value
F.Range("O" & i).Value = .Range("SYNTHESE!G158").Value

'Etc.....
End With
'On ferme le fichier ouvert
Workbooks(fichier.Name).Close False
'Fin de la condition
End If
'Prochain fichier
Next fichier
'on réactive l'écran
Application.ScreenUpdating = True
End Sub

Merci de bien vouloir m'aider à nouveau.

NOTA : Histoire d'éclaircir le but de tout cela, mon application réelle est la suivante :

Mes fichiers sources sont tous issus d'un seul et même modèle et son ensuite personnalisés et mis à jour au fur et à mesure que cela est nécessaire. Chacun d'eux, comporte une feuille intitulée "SYNTHESE" qui regroupe toutes les infos calculées dans l'ensemble du fichier.

Le fichier de synthèse que je cherche à faire (appelé dans mon ex de vulgarisation "cible") est en fait une synthèse globale qui va chercher dans toutes les feuilles "SYNTHESE" de chacun des fichiers source différentes infos. Cela dans le but d'avoir d'un seul coup d'oeil une vue globale. De plus, ce fichier de synthèse globale, aura une feuille destinée à recevoir les données et une autre pour leur traitement.
 

Efgé

XLDnaute Barbatruc
Re : Synthèse de données

Re, Remplace laligne
VB:
With ActiveWorkbook.ActiveSheet
par
VB:
With ActiveWorkbook.Sheets("SYNTHESE")
ce qui te permets de continuer les copies avec les lignes de type:
VB:
F.Range("B" & i).Value = .Range("B3").Value
Cordialement
 

Efgé

XLDnaute Barbatruc
Re : Synthèse de données

Re Quand tu passe la souris sur le mot Fichier de la ligne en jaune, tu devrais voir le nom du fichier. si non dans l'éditeur VBE, affiche la fenetre Exécution (Menu affichage / fenetre Execution) et ajoute
VB:
Debug.Print Fichier
juste avant la ligne en jaune, cela écrira la valeur de "fichier" dans le fenetre exécution. Dis mois quelle est cette valeure. Cordialement
 

titymax

XLDnaute Occasionnel
Re : Synthèse de données

Re,

En tapant le code dans la fenêtre Exécution comme demandé, cela ne donne rien.... Par contre avec le pointeur de la souris en bout de la ligne jaune une info-bulle s'affiche dans laquelle il est écrit :

fichier="C:\Users\j93447\Documents\affaires\Suivis affaires\Suivi 003731 Pailleres V2-3.XLS

Il s'agit en fait du chemin du premier fichier dont doivent être extaites les données.
 

Efgé

XLDnaute Barbatruc
Re : Synthèse de données

Re, Le problème vien peut être du fait que l'on est directement dans ThisWorkBook. Un essai : mettre le code dans un module et l'appeler depuis le Workbook open. (Regarde mes commentaires) Cordialement
 

Pièces jointes

  • Cible(3).xls
    45.5 KB · Affichages: 42

Discussions similaires

Réponses
4
Affichages
422

Statistiques des forums

Discussions
312 856
Messages
2 092 858
Membres
105 544
dernier inscrit
Eden90