extraction de données sur de multiples fichiers

Le
Vince SR
Bonjour,



Je vous soumets un cas qui pourrait être bien utile.



J'ai 3 dispositifs qui me génèrent chacun un fichier de données par jour.



Pour extraire les données pour une durée de un an : 365 * 3 = 1 100 manips
d'ouverture-sélection-copier-collage spécial .



Je souhaiterais donc automatiser cette manip.



A partir d'un classeur, dire à Excel :



- dans tel dossier il y a des fichiers excels

- dans le premier fichier, extraire la matrice de données de B2:F6

- copier ces données des lignes 2 à 6

- puis,

- dans le second fichier, extraire la matrice de données de B2:F6

- copier ces données des lignes 7 à 11

- puis,

- dans le troisième fichier . etc. . jusqu'à 31 fichiers car je fais un
bilan tous les mois



J'ai préparé deux fichiers semblables à mes fichiers bruts :



Fichier "01"



http://www.cijoint.fr/cjlink.php?file=cj200912/cij13UwAZT.xls



Fichier "02"



http://www.cijoint.fr/cjlink.php?file=cj200912/cijgKt59dg.xls



Voili voilà, mais là j'ai bien peur que l'on soit aux limites des
possibilités de notre logiciel préféré.



Cordialement.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #20759371
Bonjour,

Pour pouvoir automatiser une tâche, il faut définir précisément
cette tâche !

A ) le chemin de l'explorateur Windows où tu sauvegardes tes fichiers
B ) Est-ce que tous tes fichiers sont enregistrés dans un même répertoire ?
Lesquels ?
C ) Est-ce que ce (ces) répertoire contient seulement des fichiers Excel
qui ont rapport au processus que tu décris ?
D ) Où sont situées les données dans chaque classeur ?
- Le nom de la feuille (si plusieurs...comment déterminer
les feuilles du classeur concerné ?)
- La plage de cellules concernées sur chacune des feuilles
E ) Comment s'appelle le fichier dont tu veux récupérer tes données ?
Où ce classeur est-il situé sur le disque dur ?
Est-ce que les données de tes 3 processus doivent être copié sur la même
feuille à la suite des données précédentes ? Si autrement, comment se
présente le fichier qui doit recevoir les données ? (son organisation)
F ) Si tu as des conditions particulières, tu les ajoutes aux informations
précédentes...

Si tu arrives à définir ton problème de façon opérationnelle, cela pourrait
donner des idées aux répondants quant à la manière de procéder !



"Vince SR" discussion : eKnfDl#
Bonjour,



Je vous soumets un cas qui pourrait être bien utile.



J'ai 3 dispositifs qui me génèrent chacun un fichier de données par jour.



Pour extraire les données pour une durée de un an : 365 * 3 = 1 100 manips
d'ouverture-sélection-copier-collage spécial .



Je souhaiterais donc automatiser cette manip.



A partir d'un classeur, dire à Excel :



- dans tel dossier il y a des fichiers excels

- dans le premier fichier, extraire la matrice de données de B2:F6

- copier ces données des lignes 2 à 6

- puis,

- dans le second fichier, extraire la matrice de données de B2:F6

- copier ces données des lignes 7 à 11

- puis,

- dans le troisième fichier . etc. . jusqu'à 31 fichiers car je fais un
bilan tous les mois



J'ai préparé deux fichiers semblables à mes fichiers bruts :



Fichier "01"



http://www.cijoint.fr/cjlink.php?file=cj200912/cij13UwAZT.xls



Fichier "02"



http://www.cijoint.fr/cjlink.php?file=cj200912/cijgKt59dg.xls



Voili voilà, mais là j'ai bien peur que l'on soit aux limites des
possibilités de notre logiciel préféré.



Cordialement.
Vince SR
Le #20760031
Merci "michdenis" pour cette série de questions qui me permettent d'affiner
cette recherche :

A) Pour les fichiers de données sources, le chemin exporateur va forcement
varier et devra être préciser à excel à chaque extraction dans le classeur
pilote de l'opération.

Je défini le classeur "pilote" tel que : nommé "2009 10 bilan mensuel" : ce
sera le bilan des données pour le mois d'octobre 2009.

- feuille 1 : précise la localisation du répertoire contenant 31
excels (31 jours de données)
- feuille 2 : zone d'importation des données à partir de B2
(c'est plus pratique pour mettre des titres aux colonnes)

B) fichiers tous dans le même répertoire (une place pour chaque chose - et
chaque chose à sa place)

C) uniquement des fichiers excel sont présents dans le répertoire nommés de
01 à 31 pour une identification simplifiée

D) une seule feuille par classeur de donnée nommée "Feuil1", les données à
extraire sont en plage : B2:F6

E) le fichier de destination est nommé : "2009 10 bilan mensuel"

je veux être libre de mettre le fichier destination où je veux, c'est de lui
que partira la recherche des données.

je sépare les 3 processus pour simplifier : si, à la place de 1 100
manipulations, j'en ai plus que 3*12 = 36 le gain d'efficacité sera déjà
génial.
organisation des données extraites : à la suite des une des autres : des
lignes 2 à 6 ; 7 à 11 : n à n+5 ; (n)+6 à (n+5)+6 ; etc...

F) conditions particulière : je rapelle les deux fichiers-types (énormément
plus simples que les fichiers réels, sinon cette démarche ne se justifierai
pas)

fichier 01

http://www.cijoint.fr/cjlink.php?file=cj200912/cij13UwAZT.xls



fichier 02

http://www.cijoint.fr/cjlink.php?file=cj200912/cijgKt59dg.xls



NB : si vous les réutilisez, il faut les renommer (cijoint.fr les a renommés
automatiquement)

Merci pour avoir fait avancer ce sujet.

-----------------------------------------------------------------------------------------------------------------------------------------------------------

"michdenis" news:%23sjDL5%
Bonjour,

Pour pouvoir automatiser une tâche, il faut définir précisément
cette tâche !

A ) le chemin de l'explorateur Windows où tu sauvegardes tes fichiers
B ) Est-ce que tous tes fichiers sont enregistrés dans un même répertoire
?
Lesquels ?
C ) Est-ce que ce (ces) répertoire contient seulement des fichiers Excel
qui ont rapport au processus que tu décris ?
D ) Où sont situées les données dans chaque classeur ?
- Le nom de la feuille (si plusieurs...comment déterminer
les feuilles du classeur concerné ?)
- La plage de cellules concernées sur chacune des feuilles
E ) Comment s'appelle le fichier dont tu veux récupérer tes données ?
Où ce classeur est-il situé sur le disque dur ?
Est-ce que les données de tes 3 processus doivent être copié sur la
même
feuille à la suite des données précédentes ? Si autrement, comment se
présente le fichier qui doit recevoir les données ? (son
organisation)
F ) Si tu as des conditions particulières, tu les ajoutes aux informations
précédentes...

Si tu arrives à définir ton problème de façon opérationnelle, cela
pourrait
donner des idées aux répondants quant à la manière de procéder !



"Vince SR" groupe de
discussion : eKnfDl#
Bonjour,



Je vous soumets un cas qui pourrait être bien utile.



J'ai 3 dispositifs qui me génèrent chacun un fichier de données par jour.



Pour extraire les données pour une durée de un an : 365 * 3 = 1 100 manips
d'ouverture-sélection-copier-collage spécial .



Je souhaiterais donc automatiser cette manip.



A partir d'un classeur, dire à Excel :



- dans tel dossier il y a des fichiers excels

- dans le premier fichier, extraire la matrice de données de B2:F6

- copier ces données des lignes 2 à 6

- puis,

- dans le second fichier, extraire la matrice de données de B2:F6

- copier ces données des lignes 7 à 11

- puis,

- dans le troisième fichier . etc. . jusqu'à 31 fichiers car je fais un
bilan tous les mois



J'ai préparé deux fichiers semblables à mes fichiers bruts :



Fichier "01"



http://www.cijoint.fr/cjlink.php?file=cj200912/cij13UwAZT.xls



Fichier "02"



http://www.cijoint.fr/cjlink.php?file=cj200912/cijgKt59dg.xls



Voili voilà, mais là j'ai bien peur que l'on soit aux limites des
possibilités de notre logiciel préféré.



Cordialement.



FdeCourt
Le #20764791
Salut,

Voilà, avec quelques adaptation qui pourrait être nécessaire, un
ensemble de macro qui fonctionne :
(Pour changer le repertoire ou se trouve les fichiers, il faut changer
ce parametre : .LookIn = ThisWorkbook.Path par le repertoire
complet (exemple : "C:Blalablabla").
Je suppose que dans le classeur père, il y a une feuille qui s'appelle
"data" dans laquelle seront compilés toutes les données.
Je colle les cellules dans la colonne 2 de la feuille "data", et je
met dans la colonne 1 le nom du fichier d'origine.

Sub ExtraireMesDonnees()
Dim monResultatTmp() As Variant
Dim monResultat() As Variant
Dim maSh As Worksheet
Dim I As Integer
Application.Calculation = xlCalculationManual

Set maSh = Sheets("data")
maSh.Range("A2:AA1000").ClearContents

With Application.FileSearch
.LookIn = ThisWorkbook.Path
.Filename = "*.*"
If .Execute > 0 Then
For I = 1 To .FoundFiles.Count
monResultatTmp = extractionValeurCelluleClasseurFerme
(.FoundFiles(I), "Feuil1", "B2:F6")

monResultat = Transposer(monResultatTmp)
maLargeur = UBound(monResultat, 2)
maHauteur = UBound(monResultat, 1)
lgnDebut = maSh.Cells(65536, 1).End(xlUp).Row + 1
maSh.Range(maSh.Cells(lgnDebut, 2), maSh.Cells
(lgnDebut, 2)).Resize(maHauteur, maLargeur).Value = monResultat

maHauteur = maSh.Cells(65536, 3).End(xlUp).Row
lgnFin = lgnDebut + maHauteur
maSh.Range(maSh.Cells(lgnDebut, 1), maSh.Cells
(maHauteur, 1)).Value = .FoundFiles(I)
Next I
Else
MsgBox "Pas de fichier"
End If
End With


End Sub
Function Transposer(ByRef monTablo)
ReDim monTabloTmp(1 To UBound(monTablo, 2) + 1, 1 To UBound
(monTablo, 1) + 1)
For x = 0 To UBound(monTablo, 2)
For y = 0 To UBound(monTablo, 1)
test1 = monTablo(0, x)
If Not IsNull(monTablo(0, x)) Or monTablo(0, x) <> "" Then
monTabloTmp(x + 1, y + 1) = monTablo(y, x)
Next
Next
Transposer = monTabloTmp
End Function
Function extractionValeurmonRangeClasseurFerme(monFichier, MaFeuille,
monRange)
Dim Source As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim ADOCommand As ADODB.Command
Dim Fichier As String, monRange As String, Feuille As String

Feuille = MaFeuille & "$"
Fichier = monFichier

Set Source = New ADODB.Connection
Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fichier & ";Extended
Properties=""Excel 8.0;HDR=No;"";"

Set ADOCommand = New ADODB.Command
With ADOCommand
.ActiveConnection = Source
.CommandText = "SELECT * FROM [" & Feuille & monRange & "]"
End With

Set Rst = New ADODB.Recordset
Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic

Set Rst = Source.Execute("[" & Feuille & monRange & "]")

extractionValeurmonRangeClasseurFerme = Rst.GetRows

Rst.Close
Source.Close
Set Source = Nothing
Set Rst = Nothing
Set ADOCommand = Nothing
End Function

Cordialement,

F.
Publicité
Poster une réponse
Anonyme