Comment fusionner des données provenant de plusieurs fichiers Excel

Guy_L

XLDnaute Occasionnel
Bonjour,
Voici un résumé du problème:
Dans un contexte associatif, il y a plusieurs activités.
Chaque membre d'une même équipe (activité) remplit une feuille le concernant dans un fichier. Je vais les bâptiser A, B, C, D...
Ce fichier est semblable à ceux des autres "équipes", à quelques nuances près (plus ou moins de cases à remplir).
La forme générale du fichier est la même d'une activité à une autre mais il peut y avoir plus ou moins de feuilles dans le fichier en fonction du nombre de membres pratiquant cette activité. Disons que les fichiers par activités s'appellent : Act1.xls, Act2.xls, Act3.xls,...
Une fois que chaque membre a saisi ses infos, une feuille unique ("collecte") dans le même fichier récapitule les infos de chaque feuille "membre" (*)
Un fichier "général" pour toute l'association doit concentrer en une seule feuille les infos provenant de ces autres fichiers (Act1.xls, Act2.xls, Act3.xls,...) en "récoltant" celles-ci sur les différentes feuilles "collecte" de Act1.xls, Act2.xls, Act3.xls,...

A priori, il suffit de créer une macro qui ouvre le fichier Act1.xls, ouvre la "sheet" (feuille) "collecte" et recopie les infos nécessaires, puis fait de même avec Act2.xls , etc... (**)

Mais il faut aussi qu'on puisse récupérer par membre , ses infos dans chacun de ces mêmes fichiers. Et là, ça se corse vraiment car on ne sait pas au départ de combien de feuilles sont composé les fichiers Act1.xls, Act2.xls, Act3.xls,... (***)

J'aurai vraiment besoin d'aide pour développer ce fichier "général", sachant que pour les fichiers Act1.xls, Act2.xls, Act3.xls,... c'est déjà bien avancé, voir terminé (reste quelques détails à peaufiner).
ce sont donc sur les points:
(*) comment récapituler les infos de plusieurs feuilles quand on n'en connaît pas le nombre, ni le nom. Chaque feuille est renommée par le nom du membre par la macro suivante:
Sub Nv_feuille()
'
' Nv_feuille Macro
' Macro enregistrée le 20/01/2013
'
' Crée une copie de la feuille FI et la renomme avec le nom saisi qui est en A3
' A3 étant égal à J9 de la feuille accueil
'
Sheets("FI").Select
Sheets("FI").Copy After:=Sheets(3)
ActiveSheet.Name = Range("A3").Value
Range("A3").Select
End Sub

(**) comment "ouvrir" un fichier (dont le nom est connu évidemment) et y puiser les infos sur une feuille dont le nom est connu aussi.

(***) je ne détaille pas plus la question parce que le problème étant posé, la méthode peut certainement être adaptée. Je reste donc ouvert à toute solution proposée.

D'avance un grand merci, vos réponses soulageront mon travail bénévole mais je dois dire un peu compliqué pour le coup.
 

CHALET53

XLDnaute Barbatruc
Re : Comment fusionner des données provenant de plusieurs fichiers Excel

bonjour,

Un fichier récap en exemple et un fichier détail en exemple favorisent la compréhension du problème. Toutefois, lorsque tu ouvres un fichier Act1.xls (par exemple)
Pour lire toutes les feuilles, une boucle du type :

For Each sht In ActiveWorkbook.Sheets

'ton code
next
Si tu veux exclure des feuilles du traitement, il faut le préciser dans la boucle

A suivre
 

Guy_L

XLDnaute Occasionnel
Re : Comment fusionner des données provenant de plusieurs fichiers Excel

Un fichier récap en exemple et un fichier détail en exemple favorisent la compréhension du problème.
en effet, mais ça me parait difficile de joindre ce qui n'existe pas encore ;-) d'autre part, les données des membres étant confidentielles, je ne peux pas joindre de feuilles (sauf la feuille type, mais ça n'avance pas à grand chose dans le problème)

For Each sht In ActiveWorkbook.Sheets
qui signifie en clair ?
Si tu veux exclure des feuilles du traitement, il faut le préciser dans la boucle
comment ?

merci pour l'aide
 

Guy_L

XLDnaute Occasionnel
Re : Comment fusionner des données provenant de plusieurs fichiers Excel

J'ai un peu avancé, mais je butte sur certaines formules:
- admettons que dans mon fichier, les feuilles 4 à 9 soient des fiches "membre de l'association" avec autant de fichier que d'activités dans l'association (mettons: vélo, couture, échecs, peinture, danse,...)
- chaque membre rempli des cellules telles que "h/f", "tranche d'âge", "activité", ...
- on ne sait pas au départ combien de membre il y aura dans chque activités:
par exemple vélo = 15 feuilles , échecs =21, peinture=17, danse=8 ...
- dans chaque fichier, une feuille recceuille les données des membres (ex vélo.xls aura une feuille récapitulative qui dira:
> tant de membre dans la tranche d'âge 50-60, tant dans les 60-70, ...

La formule (ou macro) destinée à remplir la case 50-60 aurait un libellé du type:
-> pour chaque feuille du fichier à compter de la 4ème,
- si 50-60 (cellule D6) est remplier
- alors incrémenter la cellule E5 (de la feuille de collecte) de 1
Autrement dit
Faire le total des cellules 50-60 saisies dans toutes les feuilles 4 à xxx

du genre:

Dim c As Integer
For c = 4 To Worksheets.Count
For Each Sheet In ActiveWorkbook.Sheets
SI(D6<>"";Collecte!E5=Collecte!E5+1;???????)
Next c

Je sais bien que la syntaxe est inexacte, et que la méthode n'est sûrement pas la bonne, mais c'est bien pour cela que j'ai besoin de votre aide. Si le nmbre et le nom de chaque onglet (feuille) était connu d'avance, on pourrait simplement totaliser les celleules D6, mais la composante "incertitude" sur ce point rend la manipulation plus complexe.

Merci
 

CHALET53

XLDnaute Barbatruc
Re : Comment fusionner des données provenant de plusieurs fichiers Excel

Re,

je repasse par hasard
un fichier exemple (+ Récap) n'est pas obligé de contenir de données confidentielles
Un exemple pour For each joint :
a+
Il faudra loger ton programme d'analyse de tes infos à l'intérieur de la boucle
 

Pièces jointes

  • Guy L.xls
    38.5 KB · Affichages: 67

Guy_L

XLDnaute Occasionnel
Re : Comment fusionner des données provenant de plusieurs fichiers Excel

Un exemple pour For each joint :
Il faudra loger ton programme d'analyse de tes infos à l'intérieur de la boucle
Merci
si je résume (pour comprendre ce que je dois faire):

Sub essai()
For Each sh In ActiveWorkbook.Sheets
If sh.Name = "Accueil" Then GoTo suite
If sh.Name = "Collecte" Then GoTo suite
If sh.Name = "FI" Then GoTo suite > FI st le nom de la feuille "type" créée pour chaque membre
'
a = sh.Name
Sheets(a).Activate
If Range("D13") <> "" Then
Sheets(Collecte).Activate
Incr = Range("D11")
Range("D11").Select
ActiveCell.FormulaR1C1 = Incr+1
Else: GoTo suite
End If
suite:
Next
End Sub

Mais je pourrai peut-être faire aussi (pour m'affranchir du test dur le nom de la feuille ?):

Dim c As Integer
For c = 4 To Worksheets.Count
For Each sh In ActiveWorkbook.Sheets > (je ne suis pas sûr de pouvoir inclure cette ligne dans la boucle)
a = sh.Name
Sheets(a).Activate
If Range("D13") <> "" Then
Sheets(Collecte).Activate
Incr = Range("D11")
Range("D11").Select
ActiveCell.FormulaR1C1 = Incr+1
Else: GoTo suite
End If
suite:
Next
Next c
 

Pièces jointes

  • projet test asso.xls
    103 KB · Affichages: 82

Guy_L

XLDnaute Occasionnel
Re : Comment fusionner des données provenant de plusieurs fichiers Excel

Je ne sais pas comment l'expliquer différemment:

Je veux "collecter" des informations se trouvant sur des feuilles du classeur.
Mais ces feuilles sont créées par "copie" d'un feuille type à l'aide de la macro suivante:

Sub Nv_feuille()
'
' Nv_feuille Macro
' Macro enregistrée le 20/01/2013 par Guy'
' Crée une copie de la feuille FI et la renomme avec le nom saisi qui est en A3
' A3 étant égal à J9 de la feuille accueil
' Cette macro est déclenchée par la saisie d'un nom en J9 de la feuille accueil

Sheets("FI").Select
Sheets("FI").Copy After:=Sheets(3)
ActiveSheet.Name = Range("A3").Value
Range("A3").Select
End Sub

Au final, le fichier aura x feuilles (autant que de membres pratiquant une activité de l'association)
Il faut donc par exemple collecter le total des personnes de la tranche 60-70 ans dans la feuille de collecte sachantq u'on ne sait pas par avance combien de feuilles "membres" comprendra le classeur au moementd e lancer la macro, ni leur nom (puisqu'elles sont renommées au fur et à mesure par la macro ci-dessus).

Ai-je été plus clair ?
 

CHALET53

XLDnaute Barbatruc
Re : Comment fusionner des données provenant de plusieurs fichiers Excel

Bonsoir,

Je te joins un fichier avec une procédure (Lecture des feuilles) écrite dans le module 4

Elle lit les feuilles (sauf : Accueil, Collecte, FI)
Affiche un message (Msgbox) à chaque activation des feuilles membres que j'ai créé par copie de la feuille FI

A la place de MsgBox, tu écris le code qui prend les infos que tu veux dans cette feuille pour les écrire dans la feuille Collecte

A suivre

a+
 

Pièces jointes

  • Guy L bis.xls
    119 KB · Affichages: 63

Guy_L

XLDnaute Occasionnel
Re : Comment fusionner des données provenant de plusieurs fichiers Excel

Bonsoir,

Je te joins un fichier avec une procédure (Lecture des feuilles) écrite dans le module 4

Elle lit les feuilles (sauf : Accueil, Collecte, FI)
Affiche un message (Msgbox) à chaque activation des feuilles membres que j'ai créé par copie de la feuille FI

A la place de MsgBox, tu écris le code qui prend les infos que tu veux dans cette feuille pour les écrire dans la feuille Collecte

A suivre

a+
impec ! un grand merci Chalet, ta sub "lecture_feuilles" est exactement ce que je cherchais à faire. A portériori, ça paraît tellement évident, mais je séchais lamentablement.
 

Discussions similaires

Statistiques des forums

Discussions
314 647
Messages
2 111 533
Membres
111 197
dernier inscrit
john49