Fusionner plusieurs fichiers en 1 feuille Excel
Bonjour ,
Voila , je suis désolé de poster ici alors que ce sujet est traité un peu partout sur le net, mais meme si je suis pas "novice" dans excel , les macro , VBA ... ce n'est pas ma tasse de thé
Donc voici mon problème :
Je possède 11 fichiers avec une feuille par fichier avec les memes noms et nombre de colonnes pour l'ensemble des fichiers.
Ce que souhaite faire c'est donc de reunir ces 11 fichiers (donc 11 feuilles) sur un nouveau fichier excel (appelé global) avec l'ensemble des données dans une seul feuille.
Mes 11 fichiers sont tous classé dans un dossier séparé , regrouper dans un dossier unique avec donc 11 sous dossiers.
Mes 11 fichiers sont amené à evoluer , (ils garderont cependant les memes colonnes) , mais de nouvelles lignes seront créé , des anciennes effacées, des données modifiés ...
En Pj , en feuille 1 la forme de des 11 tableau et en feuille 2 la forme de mon tableau final souhaité.
La forme est la meme sauf la première colonne sera supprimé (pictures).
Pouvez vous svp me donner un coup de main pour regrouper tous ces fichiers sous une seul feuille.
J'utilise Excel 2010 en anglais , mais avec les termes francais je devrais m'en sortir
Merci d'avance de votre aide.
Benoit
Salut je n'ai pas compris ton fichier de test , je vais recapituler avec mes mots
Tu as 11 fichier avec une feuille et tu veux les regrouper sur une feuille dans un seul fichier ?
(Tes fichiers auront toujours le meme nom ? )
Si oui avec l'enregistreur de macro tu fait tout simplement des copier coller d'une colonne d'un fichier à l'autre dans ce style la
Columns("A:A").Select
Range("A2").Activate
Selection.Copy
Windows("2007ok.xlsm").Activate
Sheets.Add After:=Sheets(Sheets.Count)
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Windows("cible - Copie2003ok.xlsm").Activate
tu va devoir te débrouille un peu seul car sans les noms de tes 11 fichiers + le nom de ton fichier ou tu compile les données on va pas pouvoir faire ta macro
Bonjour bluestar,
Donc tu as bien compris mon problème
Mes 11 fichiers + le global garderons toujours le meme nom.
Mon fichier test , en page 1 ce sont les noms des colonnes de mes fichiers "sources" et en page 2 ce sont le noms des colonnes du fichier global.
Seul dif la colonne pictures a été supprimé.
Mon fichier final s'appelera Storecheck Global
Si tu peux m'aider un peu plus ce serais génial
Merci beaucoup déjà
bonjour
sans fichier pour tester difficile de faire ....
essaye de me mettre ce fichier dans le dossier parent de tes 11 sous dossiers...
et faire des tests...
les noms de fichiers n'ont pas d'importance. mais dans tous tes fichiers les données doivent être dans l'onglet 1... et aucun autre fichier doit etre dans ce dossier parent
Fred
Edit : j'avais pas mis le bon fichier a re-telechager
Edit 2 : Quand on veux aller trop vite petite coquille qui supprimait l'entete de la feuille corriger
Merci fred.
Cependant quand je lance la Macro , j'ai un message d'erreur et dans la macro une phrase est souligné en jaune :
Sub ouverture_copie_donnees(fichier_source As String, fichier_a_ouvrir As String, der_ligne As Integer)
Peux tu me dire ce que je dois modifier ?
Merci d'avance
oups erreur(s) de frappe
rempalce le tout c'est plus simple :
Sub ouverture_copie_donnees(fichier_source As String, fichier_a_ouvrir As String, der_ligne As Integer)
Workbooks.OpenText Filename:=(fichier_a_ouvrir), DataType:=xlDelimited, Tab:=True
ActiveWorkbook.Sheets(1).Range("B2:O" & Sheets(1).Range("B65536").End(xlUp).Row).Copy Workbooks(fichier_source).Sheets(1).Range("A" & der_ligne)
ActiveWorkbook.Close False
End Sub
toujours vouloir aller trop vite.....
fred
Merci beaucoup Fred
Il me reste un dernier petit soucis sur cette Macro avant que ce sois PARFAIT
J'espere que tu pourras me donner un dernier coup de main.
Voila , la macro colle en effet chacune de mes colonnes ... Sauf ... (helas ^^) la dernière colonne "Actual Supplier"
J'avou avoir fait une erreur car le nom de la colonne dans mes 11 fichiers respectif était "Fournisseur actuel" et non "actual supplier " comme dans mon fichier test en Pj.
Du coup j'ai fait 2 variante pour fixer ce problème:
- changé le nom de la colonne dans la macro pour avoir identique au 11 fichiers -> Ca ne marche pas
- Changé le nom de la colonne dans mes 11 fichiers respectif pour que ce sois identique à la Macro -> Ca ne marche pas (Helas encore :'( )
Le message d'erreur qui s'affiche est :
"Run Time error 1004"
"Unspecified error"
MErci beaucoup d'avance pour ce dernier petit conseil qui devrait me faciliter enormement la vie
Benoit
désolé , je vais encore t'embeter fred je suis désolé , j'aimerais aussi si possible ajouter une colonne à mon tableau Global ,
le nom de cette colonne serait "Customer", bien sur j'ajouterais cette même colonne à l'ensemble de mes 11 "sous fichiers" .
Cette colonne se trouverais en cellule A pour mon fichier global ainsi que pour mes 11 "sous fichiers"
merci beaucoup d'avance
Benoit
bonjour
Bon résumons : pour savoir si j'ai bien compris ...
je ne test pas les nom des colonnes donc même si tu renom les entêtes des colonnes cela ne change rien pour la macro.
dans ta nouvelle configuration tu veux que les colonnes B à P de ton fichier source soient copiées dans les colonnes A a O dans ton fichier de synthèse c'est bien cela ???? si oui le fichier est en pièce jointe... sinon Dis moi ce que tu veux précisement comme je viens de l'expliquer précédemment.
maintenant concernant l'erreur je ne le reproduit pas avec les fichiers test que j'ai fait chez moi... et il faudrait etre plus précis dans tes explications :
c'est sur tous tes fichiers que ce produit cette erreur ? ou sur un en particulier ?
sur quelle ligne du code cela se produit exactement ?
tu es bien sous Windows ?
Donc deux possibilités :
Soit tu arrives à debugger la chose toi même
Soit j'aurais besoin de tes fichiers pour tester chez moi. si tu ne veux pas que tes fichiers soient téléchargeable par tout le monde tu peux me les envoyer par MP
Fred
Bonjour Fred,
Donc en fait j'ai ajouté une colonne à chacun de mes fichiers donc maintenant Je copie mes colonnes BQ vers mes colonnes AP.
Ca c’est ok j’ai modifié moi-même la macro.
Par contre j’ai toujours un Bug qui s’affiche ( voir Pj).
L‘ensemble de mes fichiers sont bien copié dans mon fichier global mais le bug s’affiche toujours …
Aurais tu un moyen de supprimer ce message d’erreur ?
Merci d’avance
bonjour
comme ça je ne peux pas dire ....
il faudrait faire debug et me dire sur qu'elle ligne il coince ... et sur quel fichiers fichiers sont ouverts a ce moment là....
sans tes fichiers je ne peux pas te dire ce qui cloche
Fred
Bonjour voici la ligne "Bug" en jaune dans la macro :
Workbooks.OpenText Filename:=(fichier_a_ouvrir), DataType:=xlDelimited, Tab:=True
Aucun de mes fichiers sont ouvert lorque je lance l'actualisation de mon fichier global
Merci d'avance
Bonjour alors on avance un petit peu...
Maintenant toujours en mode debug. Regarde la valeur de la variable fichier_a_ouvrir ....
Il suffit de se placer dessus avec la souris ou tu selectionne la variable et clique droit ajouter un espion...
Donne moi la valeur d cette variable.
fred
Re-bonjour Fred,
J'ai fait ce que tu as demandé et paf je vois le nom d'un de mes 11 fichiers apparaitre du coup je le vire , et la ca marche parfait.
Du coup j'ai refait mon fichier qui buggé sur un nouveau fichier excel et la paf ca fonctionne parfaitement
Merci beaucoup de ton aide
Vive Excel Pratique
Bonne journée !
Bon alors content que cela marche pour toi
a plus fred
Bonjour Cher excel "pratiqueur",
Je reviens vers vous après quelques mois de non action concernant ce sujet.
J'aimerais si possible changer une petite chose par rapport à ma demande précédente qui avait reussi.
Pour rapelle je voulais fusionner 11 fichier en un seul pour faire un fichier global -> c'est ok.
J'avais donc copier depuis mes fichiers sources : colonnes B à X vers mon fichier global A à W (grace à une VBA )
le nom des colonnes est en ligne 1 puis mes infos suive en dessous.
Maintenant voici le changement que je souhaite apporter :
dans mes fichiers sources j'ai une colonne (colonne A) avec des photos je souhaites les inclures dans mon fichier global :
je dois donc copier les colonnes A à X vers mon fichier sources en AàX ais attention en colonnes 1 ce sont des photos à déplacer , j'aimerais si possible qu'elle garde le format (taille) du fichier sources
Aussi un dernier détails je souhaiterais creer un ligne, la ligne n°1 qui serait vide afin de mettre monbouton d emacro sans empieter sur mon tableau
ci-joint dessous ma macro actuel merci de me conseiller sur les choses à changer afin de copier les photos en colonnes A et d'y ajouter une ligne (ligne n°1) qui sera vide de tout texte.
Merci beaucoup d'avance
Benoit
Macro :
Option Explicit
Sub lire_les_donnees()
If Sheets(1).Range("A65536").End(xlUp).Row > 1 Then Sheets(1).Range("A2:W" & Sheets(1).Range("A65536").End(xlUp).Row).Delete
Parcourir_dossiers_recup_donnees (ActiveWorkbook.Path), (ActiveWorkbook.Name)
End Sub
Sub Parcourir_dossiers_recup_donnees(chemin As String, fichier_source As String)
'Déclaration des variables
Dim Fso As Scripting.FileSystemObject
Dim SourceFolder As Scripting.Folder
Dim SubFolder As Scripting.Folder
Dim FileItem As Scripting.File
Dim i As Integer
Dim fichier_en_traitement As String
Dim fichier_sourcebis As String
fichier_sourcebis = "~$" & fichier_source
Set Fso = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = Fso.GetFolder(chemin)
'Récupère le numéro de la dernière ligne vide dans la colonne A.
'Boucle sur tous les fichiers du répertoire
For Each FileItem In SourceFolder.Files
'recupere la deniere ligne occupée +1
i = Sheets(1).Range("A65536").End(xlUp).Row + 1 ' Récupère le numéro de la dernière ligne vide dans la colonne B dans le fichier ctx.
' on recupere le nom du fichier
fichier_en_traitement = FileItem.Name
' on verifie que c'est pas le fichier sur lequel on est, si c'est OK lecture des données
' mettre l'envoi au bon format pour l'execution instruction excel 4 avec les "[" "]")
' If fichier_en_traitement <> fichier_source And fichier_en_traitement <> nom_sauvegarde_fichier And fichier_en_traitement <> fichier_sourcebis Then: lire_donnees (fichier_source), ("'" & chemin & "\[" & fichier_en_traitement & "]"), (i)
If fichier_en_traitement <> fichier_source And fichier_en_traitement <> fichier_sourcebis Then: ouverture_copie_donnees (fichier_source), (chemin & "\" & fichier_en_traitement), (i)
Next FileItem 'fichier suivant
'--- Appel récursif pour lister les fichier dans les sous-dossiers du dossier indiquer par la boite de dialogue ---.
For Each SubFolder In SourceFolder.SubFolders
Parcourir_dossiers_recup_donnees SubFolder.Path, (fichier_source)
Next SubFolder
End Sub
Sub ouverture_copie_donnees(fichier_source As String, fichier_a_ouvrir As String, der_ligne As Integer)
Workbooks.OpenText Filename:=(fichier_a_ouvrir), DataType:=xlDelimited, Tab:=True
ActiveWorkbook.Sheets(1).Range("B2:X" & Sheets(1).Range("B65536").End(xlUp).Row).Copy Workbooks(fichier_source).Sheets(1).Range("A" & der_ligne)
ActiveWorkbook.Close False
End Sub
bonjour
ouvre un nouveau post et joint au moins un fichier source avec des photos pour faire des essais
fred