Récupération de données dans plusieurs fichiers
Bonjour à tous,
Je viens vers vous aujourd'hui car j'ai quelques soucis dans une macro pour construire une base de données.
Je dispose d'un dossier contenant plusieurs fichiers ayants la même architecture (mais pas les mêmes variables ni le même nombre de colonnes).
Je souhaite remplir un fichier de récupération avec les données de chaque fichier Excel. Il faut que le remplissage se réalise par colonne afin que je puisse garder toutes mes variables et remplir la bdd au fur et à mesure.
J'ai aussi un autre soucis. Je souhaite mettre en forme la date (format d-m-yyyy H/Mn/S en m/d/yyyy) afin de pouvoir traiter mes données par la suite. J'ai bricolé quelque chose mais lorsque j'execute la macro tout mon fichier et mis en forme et donc les commentaires de mes fichiers se font séparer en X colonnes....
Ci dessous mon code, je joins aussi l'archive avec des fichiers permettant la comprehension de mon problème:
Sub recupdata()
'Importation of the folder with ressources
Dim File As String, Path As String
Dim Wb As Workbook
Path = "\Dossieressai" '<---- Mettre le chemin d'accès au dossier : Dossieressai
File = Dir(Path & "\*.xls")
'Importation of the data collector file with a "already open" test
On Error Resume Next
Workbooks("Fichierrecup.xls").Activate
If Err Then Err.Clear: Workbooks.Open Filename:="\Fichierrecup.xlsx" '<--- Mettre le chemin d'accès au fichier : Fichierrecup
Do
Set Wb = Workbooks.Open(Path & "\" & File)
'Modification of the date format
Application.DisplayAlerts = False
Columns("C:C").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns("C:C").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B13").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.TextToColumns Destination:=Range("B13"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
Range("B13").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormat = "m/d/yyyy"
Columns("C:D").Select
Selection.Delete Shift:=xlToLeft
Application.DisplayAlerts = True
'Collection of the data
Range("A13").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Application.DisplayAlerts = False
Wb.Close False
Application.DisplayAlerts = True
'Pasting of the data
Activate.Workbook ("Fichierrecup.xls")
Activate.Sheet (1)
Range("A2").Select
Application.DisplayAlerts = False
Range(Selection, Selection.End(xlToRight)).Select
ActiveSheet.Paste
Application.DisplayAlerts = True
'Data treatment
File = Dir
' Next File
Loop Until File = ""
End Sub
Merci beaucoup pour votre temps!
Si vous avez des questions parce que je me suis mal exprimé je réponds rapidement.
Cordialement,
Alexandre
bonjour
la "bonne" méthode :
- dans chaque classeur créer une feuille contenant des simples = pointant vers la feuille principale servant à la saisie, et qui a la forme de ton fichier de destination. Ainsi les futures actions seront grandement facilitées
- à quoi sert de créer une BDD qui regroupe d'autres BDD ? normalement on n'en a pas besoin. Il suffit de faire des TCD, des SOMMPROD, des graphiques etc.
- la mise en forme des dates se fera dans une colonne supplémentaire du fichier de destination, ou bien par Format cellule
tu aurais dû poser les 2 questions séparément
ne pas croire que VBA peut sauver un projet "machine à écrire"
Bonjour et merci pour votre réponse,
Je suis complètement débutant en Excel donc je me débrouille comme je peux!
_ Je ne peux pas créer des références pointants vers mon fichier final car les données sont sur des fichiers inéditables et variants (extraction automatique journalière de datas en .xls par un autre software).
_ Si je demande pour réaliser le regroupement de plusieurs BdD c'est très certainements parce que j'en ai besoin... La finalité de mon projet n'est pas des réaliser des graphs ou autre mais d'implanter automatiquement et journalièrement cette BdD "surchargée" dans un soft qui prendra ces valeurs pour créer des matrices d'estimations statistiques. J'ai donc besoin d'une architecture unique.
_ Pour la mise en forme des dates c'est exactement ce que j'ai essayé. Le soucis vient du fait que ma demande (ajout de colonne et séparation des données) est uniquement sur une colonne et que pourtant lors de l'execution cette action se fait sur tout le fichier.
Alexandre
re
en 2 étapes :
1 - créer un fichier "de copie" des N fichiers bruts d'export. Ces fichiers étant non homogènes, on crée un fichier de N feuilles qui elles sont de même structure.
Feuil1 contient des = qui pointent vers Brutexport1, mais avec la présentation en colonnes telle que tu la veux. Sans les colonnes inutiles.
Feuil2 contient des = qui pointent vers Brutexport2, mais avec la présentation en colonnes telle que tu la veux.
etc.
2-
afin de regrouper toutes ces tables en une seule, créer un autre fichier et faire comme ceci
https://forum.excel-pratique.com/excel/consolidation-de-fichiers-dans-une-feuille-t73967.html
Il devrait être possible de simplement créer une N+1 feuille dans le fichier ci-dessus
Dates : dans chaque feuille de 1 à N, créer une colonne fixe tout à droite contenant la formule de transformation de date (sur une hauteur de 1000 lignes si tes exports bruts ne dépassent pas 1000 lignes, et plus si nécessaire (mais pas à l'infini)
Re,
Merci pour votre réponse, j'ai testé sur quelques fichiers et ça correspond exactement à ce qu'il me faut!
Pour la date ça marche très bien aussi, il y a t'il une explication sur le fait que cela ne marche pas en sélectionnant une colonne à l'infini et pas une plage de données? (par curiosité)
J'ai validé la résolution du sujet
Merci encore,
Alexandre