Fusion n fichiers xls en 1 seul fichier

Fermé
bilbianne - 3 janv. 2011 à 12:44
 bilbianne - 4 janv. 2011 à 13:45
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.

A voir également:

6 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
3 janv. 2011 à 12:57
Moi j'utiliserai LibXls en C++
0
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 :)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
3 janv. 2011 à 13:49
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
0
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 !
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
3 janv. 2011 à 16:04
Ok, merci des renseignements
je considère donc que:
dans le répertoire C:\test tu n'a que les classeurs source
il n'y a pas d'étiquette de champs dans les sources

proposition en fin d'aprem ou demain matin...
0

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...
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
3 janv. 2011 à 17:47
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)

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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
3 janv. 2011 à 17:57
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
0
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.
0