Copier/coller des données de plusieurs fichiers fermés vers un autre

Bonjour à tous,

Je dois optimiser des transferts de données de plusieurs fichiers à un autre, je dois utiliser pour ça le VBA mais j'ai du mal à comprendre le code lorsque je parcours les infos sur internet, je m'en remets à vous si possible.

Exposé de la situation :

  • Il y a un fichier principal (Destination) qui comporte sur l'onglet "Tableau recap" un grand tableau (plus d'une trentaine de colonnes et 3000 lignes). Sur ce tableau, on retrouve le budget associé à chaque type d'activité en fonction de plusieurs critères (année, nom du responsable, nom du projet, etc …). Les budgets pour l'année 2000 sont déjà dans le tableau, en revanche les budgets pour l'année 2001 sont vides.
  • Il y a environ 1000 fichiers sources Fiche xxxx qui sont des fiches récapitulant plusieurs informations. Tous ces fichiers sont regroupés dans un même dossier.

Mon objectif : Pour ne pas devoir ouvrir chaque fichier Fiche et recopier la valeur du budget dans le fichier Destination, j'aimerais faire une macro qui fait la manip toute seule : sur l'onglet "Tableau recap" du fichier Destination, je souhaiterais pouvoir appuyer sur un bouton qui permet de copier la valeur du budget de chaque fichier Fiche, et de la copier au bon endroit dans l'onglet "Tableau recap" du fichier Destination. Je souhaiterais que les fichiers Fiche restent fermés. Les budgets des fiches correspondent à l'année 2001, les budgets de 2000 sont déjà remplis dans le "Tableau recap".

Pour copier-coller dans la bonne colonne de la feuille "Tableau recap", cela dépend du type d'activité.

Pour copier-coller dans la bonne ligne de la feuille "Tableau recap", cela dépend de l'année, du nom du responsable et du nom du projet.

Par exemple :

Pour le fichier source Fiche Projet1, il faut copier la valeur du budget en "B12" et la recopier dans la feuille "Tableau recap" du fichier Destination à la cellule "H16".

Dans les fichiers j'ai mis en fond orange l'endroit où la valeur du budget doit apparaître pour chaque fiche et en vert les colonnes dont on a besoin comme critères pour trouver la bonne place dans le tableau.

Pour ouvrir les fichiers Fiches et exécuter la macro, j'ai un début de code que j'ai trouvé ici en parcourant les sujets :

Sub LoopThroughFiles()

    Dim fiches, chemin As String
    chemin = "C:\Users\.....\"
    fiches = Dir(chemin & "*.xlsx*")

    Application.ScreenUpdating = False

    Do While Len(fiches) > 0

        With Workbooks.Open(chemin & fiches)

        'Le reste du code

        ActiveWorkbook.Close savechanges = True
        End With

    fiches = Dir
    Loop
End Sub

En revanche, pour copier/coller la valeur budget d'un fichier à l'autre, je suis un peu perdu, il me semble qu'il faut trouver la fonction Find mais je nage

Je mets ci-joint un exemple de fichier Destination, et 3 fichiers sources correspondant aux Fiches. Tous ces fichiers sont très simplifiés par rapport à ceux que je dois traiter, j'espère ne pas les avoir trop simplifié pour ne pas dénaturer le problème.

Je remercie tous ceux qui vont prendre le temps de m'aider, n'hésiter pas à me dire si je n'ai pas été clair !

30destination.xlsx (10.97 Ko)
18fiche-2001-p2.xlsx (9.87 Ko)
19fiche-projet1.xlsx (9.87 Ko)
25fiche-thomas.xlsx (9.87 Ko)

Bonjour et

J'avais développé ce type d'application avec plus de 1500 fichiers source.

Les fichiers restent fermés.

Je te laisse voir, si problème n'hésite pas.

Il y a des infos que je n'ai pas trouvées dans tes fiches, comme l'âge etc.

nota : le code date d'il y a plus de 15 ans ... donc c'est pas top mais cela fonctionne.

Ok super, je te remercie, je regarderai ça demain Il y a des chances que j'ai des questions sur la compréhension du code ^^'

Oui il y a des infos dans les fiches qui ne sont pas utiles pour le tableau recap et à l'inverse, il y a des infos dans le tableau recap qui ne sont pas dans les fiches.

il y a des infos dans le tableau recap qui ne sont pas dans les fiches.

Je ne sais pas faire en "standard" de mon application. Il faudra ajouter ensuite les formules.

Je te remercie pour ton code ! J'essaye de le comprendre, mais je suis un peu perdu ^^'

Du coup avec les informations récupérées dans la feuille data, il faut écrire un autre code qui copie la valeur du budget dans la bonne place du tableau ? Je me demandais si je pouvais passer par des fonctions simples mais le code à l'air obligatoire ici.

Tu peux réagencer les données comme tu veux dans les différentes colonnes, par contre la macro ne peut pas inventer des données qui n'y sont pas. Après, tu peux compléter par des formules de type RECHERCHEV.

L'intérêt du code est de récupérer des milliers de données provenant de fiches individuelles.

Il faut rester standard le plus possible, sinon ce n'est pas maintenable.

Ok du coup j'utilise la fonction SOMME.SI.ENS pour copier la valeur du budget du tableau généré par ton code pour l'insérer dans mon tableau principal. Je ne sais pas si c'est optimal, mais ça peut faire l'affaire.

Je te remercie pour ton aide Steelson !

Dans ce cas, utilise les tableaux ... et ta formule sera reproduite en automatique sur les autres lignes.

Donne un exemple car cela peut nécessiter une petite retouche de mon côté.

Voici le fichier où j'ai rajouté un onglet avec le tableau récapitulatif. Avec la formule SOMME.SI.ENS, je vais chercher la valeur du budget dans l'onglet "data".

Je ne vois pas la formule dans l'onglet data ... quels paramètres et quelle valeur recherchée ?

C'est dans l'onglet "Tableau recap", colonne Budget pour les années 2001.

j'utilise la fonction SOMME.SI.ENS

Je suis prêt à t'aider mais je ne vois pas de formule !

Je rejoins le fichier.

J'utilise la formule SOMME.SI.ENS(Tableau3[Budget];Tableau3[Année];[@Année];Tableau3[Nom];[@Nom];Tableau3[Nom Projet];[@[Nom Projet]];Tableau3[Activité 1];[@[Type activité]]) dans les cellules J15:J24 de l'onglet Tableau recap

Excuse moi Lu26, je vais prendre un jour ou deux et revenir avec une solution actualisée et qui prendre en compte ton besoin. C'est l'occasion pour moi de reprendre cette solution avec une programmation plus propre.

Bonjour,

Je pensais avoir compris, mais je n'en suis plus sûr !

Pourquoi une formule dans l'onglet Tableau recap au niveau Budget alors que celui-ci est récupéré des fiches ?

Un essai et tu me diras si c'est cela que tu attends ou non !

edit : fichier supprimé pour compléments

fichier corrigé

Merci pour le fichier, désolé je met un peu de temps avant de répondre.

Mon objectif est de compléter des lignes de budget pour l'année 2001 d'un gros tableau que j'ai allégé dans l'onglet Tableau recap (il y a normalement beaucoup d'infos qu'on ne retrouve pas dans les fiches). Toutes les autres informations sont déjà présentes (Nom, Projet, Type d'activité, Service ...) dans le tableau. Du coup comme ton code récupère les données des fiches et créé un tableau, j'ai fait les formules pour aller chercher la valeur du budget dans le tableau data et les insérer dans le Tableau recap !

Je ne sais pas si je suis plus clair ^^

Je ne sais pas si je suis plus clair ^^

heu, pas sûr d'avoir compris, mais si tu as la solution à ton problème alors c'est parfait !
Rechercher des sujets similaires à "copier coller donnees fichiers fermes"