Fusion n fichiers xls en 1 seul fichier
bilbianne
-
bilbianne -
bilbianne -
Bonjour,
Pour commencer, je vous souhaite une Trés bonne année avec tout mes voeux de bonheurs!
Pour bien commencer 2011 voici un petit problème.
Je dispose de 300 fichiers xls ayant le même format, 1 seul onglet et se trouvant tous dans le même répertoire.
Je souhaiterai prendre chaque information de ces fichiers et les mettre dans un unique fichier xls. En gros dans le fichier xls 1 ligne correspondra aux informations prises dans chaque fichier source excel.
Exemple de fichiers sources :
C:\Test\blabla01.xls
Pays : France
Nom--------------Age----------NbDeVoiture--------Lieu
Dupin------------18------------------4-----------------Versailles
Bardou-----------24-----------------3-----------------Buc
C:\Test\blabla02.xls
Pays : espagne
Nom--------------Age----------NbDeVoiture--------Lieu
Vyvin--------------32------------------1-----------------Madrid
Fourtache--------52------------------8-----------------Madrid
Exemple du fichier excel final :
Pays----------Nom------------Age-------------NbDeVoiture---------------lieu
France--------Dupin------------18------------------4---------------------Versailles
France--------Bardou-----------24-----------------3------------------------Buc
espagne-----Vyvin--------------32------------------1----------------------Madrid
espagne----Fourtache--------52------------------8-----------------------Madrid
Voila en espérant trouver une solution adaptée :)
Merci d'avance.
Pour commencer, je vous souhaite une Trés bonne année avec tout mes voeux de bonheurs!
Pour bien commencer 2011 voici un petit problème.
Je dispose de 300 fichiers xls ayant le même format, 1 seul onglet et se trouvant tous dans le même répertoire.
Je souhaiterai prendre chaque information de ces fichiers et les mettre dans un unique fichier xls. En gros dans le fichier xls 1 ligne correspondra aux informations prises dans chaque fichier source excel.
Exemple de fichiers sources :
C:\Test\blabla01.xls
Pays : France
Nom--------------Age----------NbDeVoiture--------Lieu
Dupin------------18------------------4-----------------Versailles
Bardou-----------24-----------------3-----------------Buc
C:\Test\blabla02.xls
Pays : espagne
Nom--------------Age----------NbDeVoiture--------Lieu
Vyvin--------------32------------------1-----------------Madrid
Fourtache--------52------------------8-----------------Madrid
Exemple du fichier excel final :
Pays----------Nom------------Age-------------NbDeVoiture---------------lieu
France--------Dupin------------18------------------4---------------------Versailles
France--------Bardou-----------24-----------------3------------------------Buc
espagne-----Vyvin--------------32------------------1----------------------Madrid
espagne----Fourtache--------52------------------8-----------------------Madrid
Voila en espérant trouver une solution adaptée :)
Merci d'avance.
A voir également:
- Fusion n fichiers xls en 1 seul fichier
- Fichier bin - Guide
- Fichier epub - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
6 réponses
En faite cela doit passer par une macro xls se trouvant dans le fichier final.
Une macro du type :
Chemin fichier source = "c:\test\*.xls"
'test avec 2 champs
Dim debut, ligne, lNomPrenom, cNomPrenom, lPrint, cPrint As Integer
'position de chaque champ
lNomPrenom = 2
cNomPrenom = 2
lPrint = 2
cPrint = 5
'Une boucle qui ouvre fichier par fichier
Copier donner en position "lNomPrenom" et cNomPrenom
Puis "lPrint" "cPrint"
Fermer fichier
saut de ligne
et on recommence la boucle
Mais bon je ne suis pas un expert de la macro xls,
Alors si une ame généreuse se sent d'attaque :) cela m'aiderai Enormément.
En vous remerciant d'avance :)
Une macro du type :
Chemin fichier source = "c:\test\*.xls"
'test avec 2 champs
Dim debut, ligne, lNomPrenom, cNomPrenom, lPrint, cPrint As Integer
'position de chaque champ
lNomPrenom = 2
cNomPrenom = 2
lPrint = 2
cPrint = 5
'Une boucle qui ouvre fichier par fichier
Copier donner en position "lNomPrenom" et cNomPrenom
Puis "lPrint" "cPrint"
Fermer fichier
saut de ligne
et on recommence la boucle
Mais bon je ne suis pas un expert de la macro xls,
Alors si une ame généreuse se sent d'attaque :) cela m'aiderai Enormément.
En vous remerciant d'avance :)
Bonjour
C'est possible mais il faudrait que tu donnes des renseignement précis
- Tes classeurs source ont ils une partie générique ?
- Nom de l'onglet
- emplacement et taille maxi des tes données avec les étiquettes d'ent^te (par ex; A1:C1000)
Au besoin, mettre un classeur source sans données confidentielles en pièce jointe (format XL97-2003) sur
http://cijoint.fr/ ou https://www.cjoint.com/
et coller le lien proposé dans le message de réponse
C'est possible mais il faudrait que tu donnes des renseignement précis
- Tes classeurs source ont ils une partie générique ?
- Nom de l'onglet
- emplacement et taille maxi des tes données avec les étiquettes d'ent^te (par ex; A1:C1000)
Au besoin, mettre un classeur source sans données confidentielles en pièce jointe (format XL97-2003) sur
http://cijoint.fr/ ou https://www.cjoint.com/
et coller le lien proposé dans le message de réponse
Bonjour,
Concernant le fichier Final, il peut être vierge et l'ajout ligne par ligne peut se faire en début de feuille (A1).
Il ne comporte qu'un seul onglet (feuille) nommé "bureau"
Concernant les fichiers sources, ils ont tous le meme format et comporte uniquement un seul onglet (feuille) nommé : "bureau"
Exemple de contenu des fichers sources:
chaque fichier comporte uniquement que 5 informations a copier :
"France" (en C17)
BenoitDupin (en C39)-------18 (en D39)-----4 (en E39)------Versailles (en F39)
HenriBardou (en C40)-------24(en D40)-----3 (en E40) -----Buc (en F40)
Information : dans chaque fiche seul le nombre de nom peut etre variable. Certaines fiches contiendront 2 noms et d'autres fiches 5 noms)
Exemple du fichier final :
France (A1)-----BenoitDupin (en B1)----18 (en C1)---- 4 (en D1)---Versailles (en E1)
France (A2)-----HenriBardou (en B2)---24 (en C2)----3 (en D2)----Buc (en E2)
etc jusqu'a ce que tout les noms se trouvant dans le fichiers sources soient traités. Ensuite la boucle ouvre le fichier suivant en continuant d'incrémenter les information ligne par ligne pour obtenir :
France (A1)-----BenoitDupin (en B1)----18 (en C1)---- 4 (en D1)---Versailles (en E1)
France (A2)-----HenriBardou (en B2)---24 (en C2)----3 (en D2)----Buc (en E2)
Espagne (A3)---DoSantos (en B3)----5 (en C3)---- 12 (en D3)---Madrid (en E3)
Espagne (A4)---HenriBardou (en B4)---62 (en C4)----7 (en D4)----Madrid (en E4)
Etc
Etc
Etc
Merci d'avance
Edit : petite correction pour position cellules !
Concernant le fichier Final, il peut être vierge et l'ajout ligne par ligne peut se faire en début de feuille (A1).
Il ne comporte qu'un seul onglet (feuille) nommé "bureau"
Concernant les fichiers sources, ils ont tous le meme format et comporte uniquement un seul onglet (feuille) nommé : "bureau"
Exemple de contenu des fichers sources:
chaque fichier comporte uniquement que 5 informations a copier :
"France" (en C17)
BenoitDupin (en C39)-------18 (en D39)-----4 (en E39)------Versailles (en F39)
HenriBardou (en C40)-------24(en D40)-----3 (en E40) -----Buc (en F40)
Information : dans chaque fiche seul le nombre de nom peut etre variable. Certaines fiches contiendront 2 noms et d'autres fiches 5 noms)
Exemple du fichier final :
France (A1)-----BenoitDupin (en B1)----18 (en C1)---- 4 (en D1)---Versailles (en E1)
France (A2)-----HenriBardou (en B2)---24 (en C2)----3 (en D2)----Buc (en E2)
etc jusqu'a ce que tout les noms se trouvant dans le fichiers sources soient traités. Ensuite la boucle ouvre le fichier suivant en continuant d'incrémenter les information ligne par ligne pour obtenir :
France (A1)-----BenoitDupin (en B1)----18 (en C1)---- 4 (en D1)---Versailles (en E1)
France (A2)-----HenriBardou (en B2)---24 (en C2)----3 (en D2)----Buc (en E2)
Espagne (A3)---DoSantos (en B3)----5 (en C3)---- 12 (en D3)---Madrid (en E3)
Espagne (A4)---HenriBardou (en B4)---62 (en C4)----7 (en D4)----Madrid (en E4)
Etc
Etc
Etc
Merci d'avance
Edit : petite correction pour position cellules !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Oui effectivement en gros il y a dans c:\Test
- blabla01.xls
- blabla02.xls
- blabla03.xls
etc
etc
ceux sont tous de simple fichier xls contenant des informations uniquement dans le premier onglet (feuille) et portant toujours le même nom d'onglet : bureau
Merci d'avance. Je continue a essayer de la faire mais pour le moment j'arrive a faire une boucle sur tout les fichiers et a copier 1 seule information mais je n'arrive pas a mettre d'incrémentation pour une nouvelle ligne a chaque changement de fichier...
Oui effectivement en gros il y a dans c:\Test
- blabla01.xls
- blabla02.xls
- blabla03.xls
etc
etc
ceux sont tous de simple fichier xls contenant des informations uniquement dans le premier onglet (feuille) et portant toujours le même nom d'onglet : bureau
Merci d'avance. Je continue a essayer de la faire mais pour le moment j'arrive a faire une boucle sur tout les fichiers et a copier 1 seule information mais je n'arrive pas a mettre d'incrémentation pour une nouvelle ligne a chaque changement de fichier...
re
proposition
mettre le chemin réel!
on boucle sur les sources restant fermées, on alimente un array -tampon et on restitue
je t'envoie la maquette de travail (un truc à faire avant zurgent commed'hab)
proposition
mettre le chemin réel!
on boucle sur les sources restant fermées, on alimente un array -tampon et on restitue
je t'envoie la maquette de travail (un truc à faire avant zurgent commed'hab)
Const chemin As String = "D:\documents\bilbiane" 'à adapter au projet Const Onglet As String * 6 = "bureau" Const Plage As String * 9 = "B34:F1000" Dim T_out, cptr As Integer Function FichOuvert(F As String) As Boolean 'Auteur: Didier_mdf (merci) :http://www.mdf-xlpages.com/ Dim Wk As Workbook On Error Resume Next Set Wk = Workbooks(F) On Error GoTo 0 FichOuvert = Not Wk Is Nothing End Function Sub regrouper_pays() Dim Fich As String ReDim T_out(4, 0) ChDir chemin Fich = Dir("*.xls") While Fich <> "" 'teste si une source est ouverte et si oui, sauvegarde et ferme If FichOuvert(Fich) Then With Workbooks(Fich) If Not .Saved Then .Save End If .Close End With End If '------extraction des données pays, nom, voiture.... extraire Fich Fich = Dir Wend '-----Restitution With Sheets(1) .Range("A2:E10000").Clear With .Range("A2").Resize(cptr, 5) .Value = Application.Transpose(T_out) .Borders.Weight = xlThin End With End With End Sub Sub extraire(Fichier As String) Dim Pays As String Dim Source As Object, Requete As Object Dim feuille As String * 7 Dim Texte_SQL As String 'extraction cellule C17 Pays = ExecuteExcel4Macro("'" & chemin & "\[" & Fichier & "]" & Onglet & "'!R17C3") 'connexion ADO au fichier-source Set Source = CreateObject("ADODB.Connection") Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & chemin & "\" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";" feuille = Onglet & "$" Texte_SQL = "SELECT * FROM [" & feuille & Plage & "];" Set Requete = CreateObject("ADODB.Recordset") Set Requete = Source.Execute(Texte_SQL) 'affectation des données au tableau de restitution With Requete .MoveFirst Do While Not .EOF ReDim Preserve T_out(4, cptr) T_out(0, cptr) = Pays T_out(1, cptr) = .Fields(0) T_out(2, cptr) = .Fields(1) T_out(3, cptr) = .Fields(2) T_out(4, cptr) = .Fields(3) cptr = cptr + 1 .MoveNext Loop End With 'libère la mémoire Requete.Close Set Requete = Nothing Source.Close Set Source = Nothing End Sub
et voici la maquette de travail
https://www.cjoint.com/?0bdr64fFlWe
dans ton projet et dans la maquette, Le classeur cible ne doit pas être dans le même répertoire que les sources
https://www.cjoint.com/?0bdr64fFlWe
dans ton projet et dans la maquette, Le classeur cible ne doit pas être dans le même répertoire que les sources
Bonjour,
Désolé pour cette réponse tardive mais réunion réunion réunion réunion grrrrrrrrr
Je vais regarder tout ca et je t en remercie d'avance.
La solution que j'avais trouvé de mon coté mais non viable car trop d'étape est un script qui prends l'ensemble de fichier xls pour les mettre dans un csv puis retransforme le tout dans un fichier xls.... Bcp trop d'étape et non viable pour des personnes hors informatique.
J'analyse ton retour :)
A toute.
Désolé pour cette réponse tardive mais réunion réunion réunion réunion grrrrrrrrr
Je vais regarder tout ca et je t en remercie d'avance.
La solution que j'avais trouvé de mon coté mais non viable car trop d'étape est un script qui prends l'ensemble de fichier xls pour les mettre dans un csv puis retransforme le tout dans un fichier xls.... Bcp trop d'étape et non viable pour des personnes hors informatique.
J'analyse ton retour :)
A toute.