Compilation de données de plusieurs classeurs excel vers un seul
Bonjour à toute la communauté,
Je sais que le sujet à déjà était traité à plusieurs reprises mais vu que les dates sont assez anciennes, j'ai peur que personne ne visite le ou les forum qui le traitent.
Je ne demande pas qu'on me construise une macro, mais simplement qu'on me fournisse une petite correction pour que la mienne fonctionne.
Je vous explique : Il s'agit d'une macro plutôt simple dans l'esprit ; dans un fichier déterminé (chemin déterminé par la macro) il existe plusieurs classeur excel au format de nom identique et dont la constitution (contenu) est également identique. Dans un autre fichier existe un classeur excel qui consolidera tous les autres.
Le but étant d'aller chercher les données d'un tableau d'une feuille contenue dans chaque classeur excel (nom de feuille est identique, format du tableau identique) et de compiler ces données à la suite dans un tableau du classeur consolidation (tableau toujours au même format).
voilà mon code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
Sub Compilation()
Dim Fichier As String
Dim Chemin As String
Dim ClasseurSource As Workbook
Dim valeur1 As String
Dim MonTableau As Variant
Application.DisplayAlerts = False 'Evite les messages d'Excel
Application.EnableEvents = False 'Evite l'exécution éventuelle de macros liées aux fichiers ouverts
valeur1 = Sheets("Base").Range("D2").Value
Chemin = "J:\Rom France\France\WPP\" & valeur1 'Chemin du répertoire contenant les fichiers
Fichier = Dir(Chemin & "*.xls*")
Do While Fichier <> ""
Set ClasseurSource = Workbooks.Open(Chemin & Fichier)
MonTableau = ClasseurSource.Worksheets("Masterfile-valeurs").Range("Tableau5")
ThisWorkbook.Worksheets("Base").Range ("Conso")
derlig = Cells.Find("*", , , , xlByRows, xlPrevious).Row
Range("derlig+1") = MonTableau
ClasseurSource.Close
Fichier = Dir
Loop
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub |
J'ai pour ce faire essayé d'utiliser des fonctions déjà présente dans mes classeurs et tenté d'obtenir le bon algorithme. Malheureusement, je pense que ma formule coince à partir de thisworkbook.worksheets("base")
Si une âme charitable pouvait m'éclairer ma lanterne pour continuer d'avancer, je lui en serai reconnaissant ^^.
Par avance merci pour votre contribution et votre disponibilité à tous et à toutes
Ravi de correspondre à nouveau avec vous Menhir
Je vais tenter de répondre par étape à vos interrogations et en parallèle je vais prendre vos remarques en compte pour corriger cette macro:
Code:
ThisWorkbook.Worksheets("Base").Range ("Conso")
en fait je cherchais en écrivant cela à sélectionner le tableau "conso" dans la feuille "base" du classeur sur lequel je travaille. (pour ensuite utiliser l'action derlig + 1 pour atteindre la première ligne vide du tableau.
En ce qui concerne votre remarque sur cette ligne
Code:
Range("derlig+1") = MonTableau
Vous avez du certainement comprendre que MonTableau me permet de copier mes cellules et de les apporter vers une autre plage. Dans un ancien code comportant cette variable j'avais été bloqué car j'avais collé cette plage non pas sur autre plage mais sur une colonne du tableau destination (ex : tableau n°3[store] qui était la première colonne du tableau. Du coup j'ai retiré le [store] et ma formule a fonctionné.
Ici je voulais faire pareille avec le tableau [Conso] mais à partir de la première ligne vide, d'où
Code:
Range("derlig+1") = MonTableau
Mais lorsque vous dites que je dois associer une colonne à ce range, si je note
Code:
cells(derlig+1,1) = MonTableau
ça peut aller vous pensez ?