VBA - extraire des données de nombreuses feuilles et les compiler dans une seule feui

varchamb

XLDnaute Nouveau
Bonjour à tous,

Je suis chargé de récolter des données ds mon entreprise (350 personnes). Chaque employé doit donner le temps qu'il a passé sur un dossier. Je leur envoie un fichier excel qu'ils remplissent et me renvoie. Je me retrouve donc à la fin avec 350 fichier excel desquels je dois retirer 5 ou 6 infos. J'aimerais réaliser une macro VBA pour réaliser cette opération fastidieuse. Mais je ne connais pas bien l'écriture (et utiliser l'enregistrement n'est pas la panacée).
Je souhaiterai que les données extraites soient ensuite compilées dans un autre classeur, sous forme de base de données.
Pour illustrer, je joins un fichier zip, qui contient 4 fichiers :
3 fichiers nommés "C1", "C2", "C3", qui correspondent aux fichiers qui me sont envoyés;
1 fichier nommé "compilation2", avec les données des fichiers C1, C2 et C3, compilées comme j'aimerais que ça le soit après l'extraction.

J'espère avoir été clair ... Toute demande de précision est évidemment la bienvenue :)

Cdlt, et avec mes remerciements d'avance,
 

Pièces jointes

  • Enqjh2.zip
    82.5 KB · Affichages: 77
Dernière édition:

varchamb

XLDnaute Nouveau
Re : VBA - extraire des données de nombreuses feuilles et les compiler dans une seule

Merci bcp.

Il y a en effet de ça. Mais il y a très peu de commentaires sur la macro elle-même et je ne me sens pas capable dans ces conditions de l'adapter à mon propre problème. Serait-il envisageable que tu donnes plus d'explication directement sur la macro stp ? (les commentaires en vert comme on en voit bcp).

Merci d'avance
 

varchamb

XLDnaute Nouveau
Re : VBA - extraire des données de nombreuses feuilles et les compiler dans une seule

J'ai l'impression que finalement ce que je veux faire est assez éloigné de l'exemple vers lequel vous m'avez envoyé. En effet, pour ma part, je n'ai pas besoin d'utiliser une fonction sommeprod puisque je souhaite conserver l'intégralité de mes données. Ce que je désire faire est encore plus simple me semble-t-il.
 

pierrejean

XLDnaute Barbatruc
Re : VBA - extraire des données de nombreuses feuilles et les compiler dans une seule

Bonjour varchamb

A tester:

Edit : Salut kjin :)
 

Pièces jointes

  • Compilation.xlsm
    19.7 KB · Affichages: 96
  • Compilation.xlsm
    19.7 KB · Affichages: 113
  • Compilation.xlsm
    19.7 KB · Affichages: 111

kjin

XLDnaute Barbatruc
Re : VBA - extraire des données de nombreuses feuilles et les compiler dans une seule

Bonsoir,
Hello Pierrejean
Code:
Sub Macro1()
Application.ScreenUpdating = False
pfile = ActiveWorkbook.Path & "\archive\" 'indiquer ici le chemin du répertoire
nfile = Dir(pfile)
i = 2
Do Until nfile = ""
    Cells(i, 8).FormulaArray = "=COUNTA('" & pfile & "[" & nfile & "]FORMULAIRE'!$C$18:C118)"
    For j = 1 To Cells(i, 8)
        Cells(i, 1) = Year(Date)
        Cells(i, 2) = Int((Month(Date) + 2) / 3)
        Cells(i, 3) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$C$4"
        Cells(i, 4) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$C$5"
        Cells(i, 5) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$B$" & j + 17
        Cells(i, 6) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$C$" & j + 17
        Cells(i, 7) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$E$" & j + 17
        i = i + 1
    Next
    nfile = Dir()
Loop
Columns(8).Cells.Clear
With Range("A2:G" & Range("A65000").End(xlUp).Row)
    .Value = .Value
End With
End Sub
...moins de 0,1 s pour les 4 fichiers
A+
kjin
 

Pièces jointes

  • varchamb.zip
    45.2 KB · Affichages: 65

varchamb

XLDnaute Nouveau
Re : VBA - extraire des données de nombreuses feuilles et les compiler dans une seule

Merci à vous deux. C'est vraiment super.
Pierrejean, je dois faire une mauvaise manip, ça ne fait rien quand j'appuie sur le bouton.
Kjin, ça marche très bien. J'aimerai adapter encore plus ta macro, pour pouvoir tenir compte de quelques cas particuliers. Je vais tenter de le faire ... puis je pense que je reviendrai vers vous pour comprendre pourquoi mes tentatives d'amélioration ne fonctionne pas :).

Encore merci à vous deux.

Varchamb
 

varchamb

XLDnaute Nouveau
Re : VBA - extraire des données de nombreuses feuilles et les compiler dans une seule

Bonjour,

Comme je le pensais, je suis obligé de revenir sur le forum. J'aimerai améliorer la macro, et après avoir potassé un peu VBA (un peu car quand on commence juste, on a l'impression que les possibilités sont infinis, donc même en ayant bien bossé, ça parait peu !), je ne me sens pas capable d'améliorer la macro.
Voila ce que je souhaiterais ajouter à la macro de Kjin (cf.supra) : il est possible que la cellule C5 soit vide dans certains fichiers archives et dans ce cas il faudrait prendre la cellule C6.
Y'aurait il moyen d'intégrer cette condition avec un minimum de modification ?

Merci d'avance à tous ceux (et celles, bien sûr) qui prendront le temps de me répondre,

Varchamb
 

Gelinotte

XLDnaute Accro
Re : VBA - extraire des données de nombreuses feuilles et les compiler dans une seule

Bonsoir,

Pour ce problème (si c5 vide utiliser C6) :
ajouter :
Code:
If Cells(i, 4) = 0 Then Cells(i, 4) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$C$6"
sous la ligne
Code:
Cells(i, 4) = "='" & pfile & "[" & nfile & "]FORMULAIRE'!$C$5"
tout simplement


G
 

varchamb

XLDnaute Nouveau
Re : VBA - extraire des données de nombreuses feuilles et les compiler dans une seule

Kjin,

Ton code était excellent. J'ai remarqué que pour déterminer le numéro du trimestre tu passais par un moyen détourné. En fouillant un peu, j'ai trouvé un moyen plus approprié pour déterminer le numéro du trimestre :

Cells(i, 2) = DatePart("q", MaDate)

plutôt que :

Cells(i, 2) = Int((Month(Date) + 2) / 3)

Cependant, comme je fais ma consolidation une fois le trimestre en question terminé, j'aimerai que ma macro indique le trimestre précédent. J'ai essayé en ajoutant "-1" à la suite du code, mais cela ne fonctionne pas lors du trimestre 1 de l'année N pour donner le trimestre 4 de l'année N-1. Quelqu'un saurait il comment faire ?
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 393
Messages
2 088 006
Membres
103 696
dernier inscrit
lgerbaud