Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

extraction de données sur de multiples fichiers

3 réponses
Avatar
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.

3 réponses

Avatar
michdenis
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" a écrit dans le message de 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.
Avatar
Vince SR
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" a écrit dans le message de
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" a écrit dans le message de
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.



Avatar
FdeCourt
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.