Rechercher : dans
Par :

Macro pour fusion de plusieurs fichier dans 1

Dernière réponse le 1 jui 2009 à 08:18:38 benben82, le 7 aoû 2008 à 11:56:31 
 Signaler ce message aux modérateurs

Bonjour,

j'ai 16 fichiers excel est il possible via une macro de copier toutes les lignes des 16 fichiers et les copiers les une en dessous des autres dans un seul fichier.

Merci pour votre aide.

Configuration: Windows 2000
Internet Explorer 6.0

Meilleures réponses pour « macro pour fusion de plusieurs fichier dans 1 » dans :
Réunir plusieurs fichiers PDF en un seul VoirPour réunir plusieurs fichiers PDF en un seul, on peut utiliser PDFCreator (gratuit) qui s'utilise comme une imprimante. Pour ce faire : Ouvrir tous les fichiers PDF que l'on veut réunir Puis, pour le premier fichier, faire Fichier/Imprimer,...
Excel - Convertir fichier(s) CSV / XLS VoirComme dit dans le titre, cette application convertit des fichiers CSV en fichiers XLS N’est pas nécessaire pour Excel 2007, ce dernier faisant la conversion automatiquement La conversion n’ayant pas de mise en forme, en cas de modification...
Ouverture d'un fichier VoirOuverture d'un fichier existant crée avec le même logiciel Il existe fondamentalement deux méthodes pour ouvrir un fichier sous Windows : Choisissez dans le menu du logiciel concerné Fichier > Ouvrir et naviguez jusqu’au fichier concerné dans la...

1

m@rina, le 7 aoû 2008 à 17:32:44
  • +1

Bonjour,

Si tous tes classeurs ont la même structure, oui ce n'est pas très compliqué. La macro va ouvrir chaque classeur puis copier-coller... Il y a une solution qui permet d'aller directement dans les classeurs sans les ouvrir et qui passe par ADO, mais c'est prise de tête et ça fonctionne... moyen... en fonction des types de données.

Tu peux essayer cette macro toute simple, tu verras, c'est très rapide. Tes fichiers source doivent être fermés et tous dans le même dossiers, la macro doit se trouver dans le fichier destination.

Sub recup()
Range("A1").Select 'sélectionner la cellule de début
Chemin = "c:\Mes documents\..." 'saisir le chemin complet du dossier où se trouvent les fichiers
Fichier = Dir(Chemin & "*.xls") ' Premier fichier
Do While Fichier <> ""
Workbooks.Open Filename:=Chemin & Fichier
Range("bd_export").Copy
ThisWorkbook.Activate
ActiveSheet.Paste
Windows(Fichier).Activate
Application.CutCopyMode = False
ActiveWorkbook.Close savechanges:=False
ThisWorkbook.Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
Fichier = Dir ' Fichier suivant
Loop
End Sub

Répondre à m@rina

2

m@rina, le 7 aoû 2008 à 17:32:43

Bonjour,

Si tous tes classeurs ont la même structure, oui ce n'est pas très compliqué. La macro va ouvrir chaque classeur puis copier-coller... Il y a une solution qui permet d'aller directement dans les classeurs sans les ouvrir et qui passe par ADO, mais c'est prise de tête et ça fonctionne... moyen... en fonction des types de données.

Tu peux essayer cette macro toute simple, tu verras, c'est très rapide. Tes fichiers source doivent être fermés et tous dans le même dossiers, la macro doit se trouver dans le fichier destination.

Sub recup()
Range("A1").Select 'sélectionner la cellule de début
Chemin = "c:\Mes documents\..." 'saisir le chemin complet du dossier où se trouvent les fichiers
Fichier = Dir(Chemin & "*.xls") ' Premier fichier
Do While Fichier <> ""
Workbooks.Open Filename:=Chemin & Fichier
Range("bd_export").Copy
ThisWorkbook.Activate
ActiveSheet.Paste
Windows(Fichier).Activate
Application.CutCopyMode = False
ActiveWorkbook.Close savechanges:=False
ThisWorkbook.Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
Fichier = Dir ' Fichier suivant
Loop
End Sub

Répondre à m@rina

3

m@rina, le 7 aoû 2008 à 17:32:44

Bonjour,

Si tous tes classeurs ont la même structure, oui ce n'est pas très compliqué. La macro va ouvrir chaque classeur puis copier-coller... Il y a une solution qui permet d'aller directement dans les classeurs sans les ouvrir et qui passe par ADO, mais c'est prise de tête et ça fonctionne... moyen... en fonction des types de données.

Tu peux essayer cette macro toute simple, tu verras, c'est très rapide. Tes fichiers source doivent être fermés et tous dans le même dossier, la macro doit se trouver dans le fichier destination.
Les plages à exporter doivent être nommées dans chaque fichier source.

Sub recup()
Range("A1").Select 'sélectionner la cellule de début
Chemin = "c:\Mes documents\..." 'saisir le chemin complet du dossier où se trouvent les fichiers
Fichier = Dir(Chemin & "*.xls") ' Premier fichier
Do While Fichier <> ""
Workbooks.Open Filename:=Chemin & Fichier
Range("plage_nommee").Copy
ThisWorkbook.Activate
ActiveSheet.Paste
Windows(Fichier).Activate
Application.CutCopyMode = False
ActiveWorkbook.Close savechanges:=False
ThisWorkbook.Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
Fichier = Dir ' Fichier suivant
Loop
End Sub

m@rina

Répondre à m@rina

4

benben82, le 8 aoû 2008 à 10:32:56

Salut marina,

merci pour le temps que tu m'accordes,

J'ai essayé ton code et rien ne se passe quand je l'exécute, j'ai fais les modifs des chemin de mes fichiers mais toujours rien.
De plus d'un mois à l'autres je n'ai pas le même nombre de ligne alors est il possible de copier les données sans nommer la zone à exporter et pour les coller dans le fichier de destination coller le 2 ème fichier a la première ligne vide du 1er fichie.

Voila pour mes interrogations et merci pour tes idées...

Répondre à benben82

5

m@rina, le 8 aoû 2008 à 11:00:21

Bonjour,

Il n'y a aucune raison que cette macro ne fonctionne pas... Testé...

As-tu nommé les plages dans tes fichiers ?

Si le nombre de lignes changent régulièrement, ce qui me paraît normal, il suffit de mettre des noms avec la formule DECALER. Ainsi peu importe le nbre de lignes, la plage sera toujours OK.

m@rina

Répondre à m@rina

6

benben82, le 8 aoû 2008 à 11:35:33

Salut,

maintenant le code s'exécute mais il ne m'ouvre pas tous les fichiers du dossier.
j'ai pas nommé les plages je vais le faire mais je ne comprend pas comment utiliser la formule DECALER ou je dois la mettre?
et est ce qu'ensuite les fichier se colleront les un en dessous des autres.


Sub recup()
Range("A1").Select 'sélectionner la cellule de début
Chemin = "K:\1- EPC\BUDGETS\BUDGET 2008\Retours marges\07 NS\" 'saisir le chemin complet du dossier où se trouvent les fichiers
Fichier = Dir(Chemin & "04848 marge.xls") ' Premier fichier
Do While Fichier <> ""
Workbooks.Open Filename:=Chemin & Fichier
Rows("1:25").Select
Selection.Delete Shift:=xlUp
Range("A1").Select
Range("plage_nommee").Copy <-------- je vais nommer les plages
ThisWorkbook.Activate
ActiveSheet.Paste
Windows(Fichier).Activate
Application.CutCopyMode = False
ActiveWorkbook.Close savechanges:=False
ThisWorkbook.Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
Fichier = Dir ' Fichier suivant
Loop
End Sub

Répondre à benben82

7

m@rina, le 8 aoû 2008 à 13:50:43

Bonjour,

Faut pas modifier la macro, à part donner le nom du chemin complet et le nom de la plage.

Supprime :
Fichier = Dir(Chemin & "04848 marge.xls") ' Premier fichier

et remets ce que j'ai mis à l'origine :
Fichier = Dir(Chemin & "*.xls") '

sinon, ça t'ouvre juste le premier fichier dont tu as mis le nom en dur !

Pourquoi veux tu supprimer ces lignes ?
Rows("1:25").Select
Selection.Delete Shift:=xlUp

pour mettre une formule DECALER pour nommer les noms, voici ce que tu peux mettre, supposant que
- il y ait 10 colonnes et que ce nombre ne changera pas
- la feuilles où se trouvent les données se nomme BASE
- les données commencent en ligne 2 (en effet, on ne veut pas récupérer les lignes d'entêtes des 20 classeurs)

=DECALER(BASE!$A$2;;;(NBVAL(BASE!$A:$A)-1);10)

Juste une précision importante : prend pour calcul NBVAL la colonne qui sera forcément remplie et pas une colonne qui peut avoir des cellules vides. Ici j'ai mis par défaut la première $A:$A mais ce peut etre n'importe quelle autre.

m@rina

Répondre à m@rina

9

benben82, le 8 aoû 2008 à 15:13:22

Salut,

alors j'avais sali ton code, j'ai remi en place ton code et il fonctionne très bien, je t'en remercie
Pourquoi veux tu supprimer ces lignes ? car j'ai seulement besoin des données sans les entêtes

j'ai une interrogations je ne comprend pas l'utilité de =DECALER avec ce code les données des différents fichiers se mettent automatiquement à la suite (je crois!!!) , et si j'en ai besoin il faut la mettre ou dans quelle cellule?

merci beaucoup marina tu m'as très bien assisté dans mes galère.

Range("A1").Select 'sélectionner la cellule de début
Chemin = "K:\1- EPC\BUDGETS\BUDGET 2008\Retours marges\07 NS\" 'saisir le chemin complet du dossier où se trouvent les fichiers
Fichier = Dir(Chemin & "*") ' Premier fichier
Do While Fichier <> ""
Workbooks.Open Filename:=Chemin & Fichier
Rows("1:25").Select
Selection.Delete Shift:=xlUp
Range("Zone_d_impression").Copy
ThisWorkbook.Activate
ActiveSheet.Paste
Windows(Fichier).Activate
Application.CutCopyMode = False
ActiveWorkbook.Close savechanges:=False
ThisWorkbook.Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
Fichier = Dir ' Fichier suivant
Loop
'nommer onglet
Sheets("Feuil1").Name = "retour marge DMEI"

'enregistrement du fichier
ChDir "K:\1- EPC\BUDGETS\BUDGET 2008\Retours marges\07 NS\marge DMEI"
ActiveWorkbook.SaveAs Filename:= _
"K:\1- EPC\BUDGETS\BUDGET 2008\Retours marges\07 NS\marge DMEI\marge DMEI.xls" _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

End Sub

Répondre à benben82

10

benben82, le 11 aoû 2008 à 18:10:38

Salut marina,

tu as résolu mon problème de fusion mais j'ai un autre souci, je voudrai une ligne de code qui me permet de coller une données tant que la cellule (colonne C) d'après n'est pas vide.

voici le code

Sub recup()
Range("A26").Select
Chemin = "K:\1- EPC\BUDGETS\BUDGET 2008\Retours marges\07 NS\copie fichier retour marge\" 'saisir le chemin complet du dossier où se trouvent les fichiers
Fichier = Dir(Chemin & "*.xls") ' Premier fichier
Do While Fichier <> ""
Workbooks.Open Filename:=Chemin & Fichier
Range("IV1").Select
Selection.ClearContents
Columns("B:B").Select
Selection.Insert Shift:=xlToRight

'trouver boucle pour pouvoir le faire tant qu'il n'y a pas de cellule vide
Range("C1").Select
Selection.Copy
Range("B26").Select '
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


Rows("1:25").Select
Selection.Delete Shift:=xlUp
Range("Zone_d_impression").Copy
ThisWorkbook.Activate
ActiveSheet.Paste
Windows(Fichier).Activate
Application.CutCopyMode = False
ActiveWorkbook.Close savechanges:=False
ThisWorkbook.Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
Fichier = Dir ' Fichier suivant
Loop

End Sub

Répondre à benben82

8

lermite222, le 8 aoû 2008 à 14:21:03

Bonjour,
Marina, si tu permet une alternative ?

Sub CopieClasseur()
Dim fs, F, f1, s, sf
Dim Ext As String, Chemin As String
Dim T As String, Fin As Long
Dim FL1 As Worksheet
Dim FL2 As Worksheet
    Ext = "xls" :   Chemin = "G:\" 'à adapter
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set F = fs.GetFolder(Chemin)
    Set sf = F.Files
    Set FL1 = Workbooks("Classeur2").Sheets("Feuil1") 'à adapter
    Fin = 1
    For Each f1 In sf
        If Right(f1.Name, 3) = Ext Then 'pour être certain que c'est un classeur
            Workbooks.Open Chemin & f1.Name
            Set FL2 = ActiveWorkbook.Sheets("Feuil1")
            T = FL2.Range("A1").SpecialCells(xlCellTypeLastCell).Address
            FL2.Range("A1:" & T).Copy
            FL1.Activate
            Cells(Fin, 1).Activate
            ActiveSheet.Paste
            Fin = Fin + FL2.Range(T).Row
            Workbooks(f1.Name).Close SaveChanges:=False
            Set FL2 = Nothing
        End If
    Next
    FL1 = Nothing
End Sub

'ATTENTION Il faudra peut-être trouver un autre moyen pour
'trouver la dernière ligne pour T
'Si données toujours renseignées dans une colonne fixe changer par
'Range("A65536").End(xlUp).Row > avec A la lettre de la colonne.
A+ L'expérience instruit plus sûrement que le conseil. (André Gide)  

Répondre à lermite222

11

angby, le 23 jan 2009 à 11:50:43

Fusion de plusieurs fichiers excel en un seul

Bonjour,
Je dois moi aussi faire une fusion de données en un seul fichier.
En effet je suis en stage chez un operateur mobile et on me demande de créer un fichier excel a partir des differentes transactions .csv (plus de 1000).
j' ai bau appliqué le code de Marina, mais voila rien ne se passe et en mode debogage la compilation reste bloquée à la 3 eme ligne. Aidez moi a trouver le probleme de plus j ai des contraintes de temps :-(
Merciiiii.

Répondre à angby

12

angby, le 23 jan 2009 à 11:50:57

Fusion de plusieurs fichiers excel en un seul

Bonjour,
Je dois moi aussi faire une fusion de données en un seul fichier.
En effet je suis en stage chez un operateur mobile et on me demande de créer un fichier excel a partir des differentes transactions .csv (plus de 1000).
j' ai bau appliqué le code de Marina, mais voila rien ne se passe et en mode debogage la compilation reste bloquée à la 3 eme ligne. Aidez moi a trouver le probleme de plus j ai des contraintes de temps :-(
Merciiiii.

Répondre à angby

13

ben, le 23 jan 2009 à 16:46:07

Bonjour,

peut être que l'erreur vient de l'extension de tes fichier (.csv)

il faudrai que tu modifis tes fichiers csv en fichier xls et ensuite tu pourra te servir du code ci-dessus et l'adapter à ta guise.

ou autrement comme extenssion csv il y a une solution pour les exporter avec la commande Dos je m'en souvien pas exactement mais j'avais vu sa sur un forum

A bientot

Répondre à ben

14

lermite222, le 23 jan 2009 à 17:16:23

Bonjour tous et toutes,
Attention.. Fusion ne veux pas dire copier, ont ne peut faire de fusion que sur un classeur partagé, chacun travail sur sa copie et au final, la fusion fait que le "VRAI" classeur recoit les modifications faites sur toutes les copies. Mais je ne maitrise pas cette fonction n'ayant pas de réseau chez moi.
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

15

cymaral007, le 30 jun 2009 à 14:20:44

Bonjour,

j'ai fait à peu près la même macro que celle décrite précédement et je souhaite que cette macro retienne le nombre de lignes copiées à chaque fichier pris pour qu'elle m'affiche le total à la fin.

Merci beaucoup de votre aide

Répondre à cymaral007

16

 lermite222, le 1 jui 2009 à 08:18:38

Bonjour,
Ca ne me paraîs pas bien compliquer !
en début de macro (1ère ligne) tu met..

dim DebutLigne as long, NBlignes as long
DebutLigne = Range("A65536").End(xlUp).Row

et en fin de macros (dernière ligne)
NBlignes = Range("A65536").End(xlUp).Row - DebutLigne 

A+
L'expérience instruit plus sûrement que le conseil. (André Gide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222