[Excel] Macro pour fusionner des fichiers
Résolu/Fermé
Arn's
Messages postés
23
Date d'inscription
lundi 17 août 2009
Statut
Membre
Dernière intervention
26 août 2009
-
18 août 2009 à 10:56
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 23 oct. 2009 à 15:23
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 23 oct. 2009 à 15:23
A voir également:
- [Excel] Macro pour fusionner des fichiers
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Fusionner des fichiers excel - Guide
- Liste déroulante excel - Guide
- Comment fusionner des pdf sans logiciel - Guide
- Formule excel pour additionner plusieurs cellules - Guide
12 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
18 août 2009 à 13:19
18 août 2009 à 13:19
Bien mangé?
Voici une solution. Si tu veux des détails, je peux répondre à certaines questions. Pas toutes car tout ce code n'est pas de moi... Par contre désolé pour les sources, je ne les ai pas notées.
A placer dans un module :
Sub réunion_fichiers()
Dim ScanFic As Office.FileSearch
Dim NomFic As Variant
Dim Diag As String, fich As String, classeur As String
Dim Nbr As Long
Dim NBlignes As Integer, NBCol As Integer
Dim objShell As Object, objFolder As Object, oFolderItem As Object
Dim Chemin As String
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
On Error Resume Next
Set oFolderItem = objFolder.Items.Item
Chemin = oFolderItem.Path
Set ScanFic = Application.FileSearch
With ScanFic
.NewSearch
.LookIn = Chemin
.SearchSubFolders = True
.Filename = xls
.MatchTextExactly = True
.FileType = msoFileTypeAllFiles
Nbr = .Execute
Application.DisplayAlerts = False
For Each NomFic In .FoundFiles
Workbooks.Open Filename:=NomFic
NBlignes = ActiveSheet.UsedRange.Rows.Count
NBCol = ActiveSheet.UsedRange.Columns.Count - 1
ActiveSheet.Range("A1").Offset(NBlignes, 0).Value = "'"
ActiveSheet.Range("A1").Offset(NBlignes + 1, NBCol).Name = "nom1"
ActiveSheet.Range("A1:nom1").Copy
ActiveWorkbook.Names("nom1").Delete
classeur = ActiveWorkbook.Name
Windows("ouvrir docs.xls").Activate
Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveCell.Value = classeur
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Windows(classeur).Activate
ActiveSheet.Range("A1").Offset(NBlignes, 0).Value = ""
ActiveWindow.Close
Next
End With
End Sub
Un peu brouillon mais efficace, il me semble...
Voici une solution. Si tu veux des détails, je peux répondre à certaines questions. Pas toutes car tout ce code n'est pas de moi... Par contre désolé pour les sources, je ne les ai pas notées.
A placer dans un module :
Sub réunion_fichiers()
Dim ScanFic As Office.FileSearch
Dim NomFic As Variant
Dim Diag As String, fich As String, classeur As String
Dim Nbr As Long
Dim NBlignes As Integer, NBCol As Integer
Dim objShell As Object, objFolder As Object, oFolderItem As Object
Dim Chemin As String
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
On Error Resume Next
Set oFolderItem = objFolder.Items.Item
Chemin = oFolderItem.Path
Set ScanFic = Application.FileSearch
With ScanFic
.NewSearch
.LookIn = Chemin
.SearchSubFolders = True
.Filename = xls
.MatchTextExactly = True
.FileType = msoFileTypeAllFiles
Nbr = .Execute
Application.DisplayAlerts = False
For Each NomFic In .FoundFiles
Workbooks.Open Filename:=NomFic
NBlignes = ActiveSheet.UsedRange.Rows.Count
NBCol = ActiveSheet.UsedRange.Columns.Count - 1
ActiveSheet.Range("A1").Offset(NBlignes, 0).Value = "'"
ActiveSheet.Range("A1").Offset(NBlignes + 1, NBCol).Name = "nom1"
ActiveSheet.Range("A1:nom1").Copy
ActiveWorkbook.Names("nom1").Delete
classeur = ActiveWorkbook.Name
Windows("ouvrir docs.xls").Activate
Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveCell.Value = classeur
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Windows(classeur).Activate
ActiveSheet.Range("A1").Offset(NBlignes, 0).Value = ""
ActiveWindow.Close
Next
End With
End Sub
Un peu brouillon mais efficace, il me semble...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
18 août 2009 à 14:12
18 août 2009 à 14:12
Euh tu peux me traiter d'abruti!!! J'ai cherché 1/4 d'heure pour .... rien. Ton classeur nommé "macro" il faut juste l'appeler ouvrir docs.xls comme indiqué à cette ligne (dans la macro):
Windows("ouvrir docs.xls").Activate
Sinon change cette ligne pour indiquer :
Windows("macro.xls").Activate
Non cette macro ne créée pas de nouveau fichier. Tes fichiers seront tous réunis dans le classer "macro" (ou "ouvrir docs").
Windows("ouvrir docs.xls").Activate
Sinon change cette ligne pour indiquer :
Windows("macro.xls").Activate
Non cette macro ne créée pas de nouveau fichier. Tes fichiers seront tous réunis dans le classer "macro" (ou "ouvrir docs").
Arn's
Messages postés
23
Date d'inscription
lundi 17 août 2009
Statut
Membre
Dernière intervention
26 août 2009
7
18 août 2009 à 11:44
18 août 2009 à 11:44
Je vais manger, je ne pourrai pas vous répondre tout de suite. Bon courage.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
18 août 2009 à 11:48
18 août 2009 à 11:48
Bon appétit...... T'inquiète, je m'occupe de ton cas et je mangerai demain!!
Je plaisante...
Je plaisante...
Arn's
Messages postés
23
Date d'inscription
lundi 17 août 2009
Statut
Membre
Dernière intervention
26 août 2009
7
18 août 2009 à 13:34
18 août 2009 à 13:34
(Oui, bien mangé, merci.)
Wow ! Quelle rapidité ! Je vais tester ça tout de suite.
Wow ! Quelle rapidité ! Je vais tester ça tout de suite.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Arn's
Messages postés
23
Date d'inscription
lundi 17 août 2009
Statut
Membre
Dernière intervention
26 août 2009
7
18 août 2009 à 13:49
18 août 2009 à 13:49
Je dois pas l'utiliser correctement, je crois. Tu l'as testé, toi ? Moi j'ai créé deux fichiers tests ("classeur1" et "classeur2") dans un répertoire "test", et j'ai placé ma macro dans un fichier ("macro") extérieur à ce dossier. La macro est censée créér un nouveau fichier ? Parce que lorsque je l'éxécute, il ne se passe rien.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
18 août 2009 à 13:57
18 août 2009 à 13:57
exact. ca fonctionnait mais là plus rien. je vérifie et te tiens informé
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
18 août 2009 à 11:15
18 août 2009 à 11:15
Bonjour,
Petite question préliminaire : Y a t'il des cellules vides dans les fichiers que vous souhaitez réunir?
Petite question préliminaire : Y a t'il des cellules vides dans les fichiers que vous souhaitez réunir?
Arn's
Messages postés
23
Date d'inscription
lundi 17 août 2009
Statut
Membre
Dernière intervention
26 août 2009
7
18 août 2009 à 11:25
18 août 2009 à 11:25
Eventuellement, oui. (Désolé.)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
18 août 2009 à 11:29
18 août 2009 à 11:29
Et bien entendu tous ne "débutent" pas en A1?
Il faudrait décrire le contenu de vos fichiers un max pour pouvoir réaliser quelque chose de cohérent...
Il faudrait décrire le contenu de vos fichiers un max pour pouvoir réaliser quelque chose de cohérent...
Arn's
Messages postés
23
Date d'inscription
lundi 17 août 2009
Statut
Membre
Dernière intervention
26 août 2009
7
18 août 2009 à 11:36
18 août 2009 à 11:36
Vous avez raison de demander, et d'ailleurs merci de vous pencher sur mon problème. Oui, je peux m'arranger pour que mes fichiers commencent tous en A1.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
18 août 2009 à 11:37
18 août 2009 à 11:37
Possèdent ils un nombre de lignes maxi, nombre de colonnes maxi?
Arn's
Messages postés
23
Date d'inscription
lundi 17 août 2009
Statut
Membre
Dernière intervention
26 août 2009
7
18 août 2009 à 11:39
18 août 2009 à 11:39
Ah par contre, non. (En fait, je peux difficilement décrire l'ensemble de ces fichiers, étant donné qu'ils ont des structures très hétérogènes.)
Arn's
Messages postés
23
Date d'inscription
lundi 17 août 2009
Statut
Membre
Dernière intervention
26 août 2009
7
18 août 2009 à 13:58
18 août 2009 à 13:58
Cool.
Arn's
Messages postés
23
Date d'inscription
lundi 17 août 2009
Statut
Membre
Dernière intervention
26 août 2009
7
18 août 2009 à 14:16
18 août 2009 à 14:16
...
Comment dire ?
...
Ok, je suis un âne.
C'est bon, ça marche. Super, merci beaucoup, ça me sauve la vie.
Comment dire ?
...
Ok, je suis un âne.
C'est bon, ça marche. Super, merci beaucoup, ça me sauve la vie.
Bonjour,
Je débute avec les macro dans excel. Cependant j'ai 300 fichier excel à coller le un après les autres. J'ai cru comprendre que la macro ci dessus permettrait de realiser cela. Lorsque je copie et colle le code ci dessous j'ai un message d'erreur : Erreur de compilation End With attendu. Pourriez vous m'aider?
Sub réunion_fichiers()
Dim ScanFic As Office.FileSearch
Dim NomFic As Variant
Dim Diag As String, fich As String, classeur As String
Dim Nbr As Long
Dim NBlignes As Integer, NBCol As Integer
Dim objShell As Object, objFolder As Object, oFolderItem As Object
Dim Chemin As String
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
On Error Resume Next
Set oFolderItem = objFolder.Items.Item
Chemin = oFolderItem.Path
Set ScanFic = Application.FileSearch
With ScanFic
.NewSearch
End Sub
Windows("macro.xls").Activate
Je débute avec les macro dans excel. Cependant j'ai 300 fichier excel à coller le un après les autres. J'ai cru comprendre que la macro ci dessus permettrait de realiser cela. Lorsque je copie et colle le code ci dessous j'ai un message d'erreur : Erreur de compilation End With attendu. Pourriez vous m'aider?
Sub réunion_fichiers()
Dim ScanFic As Office.FileSearch
Dim NomFic As Variant
Dim Diag As String, fich As String, classeur As String
Dim Nbr As Long
Dim NBlignes As Integer, NBCol As Integer
Dim objShell As Object, objFolder As Object, oFolderItem As Object
Dim Chemin As String
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
On Error Resume Next
Set oFolderItem = objFolder.Items.Item
Chemin = oFolderItem.Path
Set ScanFic = Application.FileSearch
With ScanFic
.NewSearch
End Sub
Windows("macro.xls").Activate
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
23 oct. 2009 à 12:51
23 oct. 2009 à 12:51
Salut,
Oui effectivement. Tu n'as pas pris toute la macro.
1- Créé un classeur Excel vide et appelle le "ouvrir docs"
2- créé dans ce classeur un module (ALT+F11 Insertion/module)
3- copie et colle tout le code contenu dans le post 9 ci dessus dans ce module
4- Ferme la fenêtre Visual Basic et lance la macro par ALT+F8 Exécuter.
Si problème, reviens ici pour poser toutes questions subsidiaires...
Oui effectivement. Tu n'as pas pris toute la macro.
1- Créé un classeur Excel vide et appelle le "ouvrir docs"
2- créé dans ce classeur un module (ALT+F11 Insertion/module)
3- copie et colle tout le code contenu dans le post 9 ci dessus dans ce module
4- Ferme la fenêtre Visual Basic et lance la macro par ALT+F8 Exécuter.
Si problème, reviens ici pour poser toutes questions subsidiaires...
Eorle
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
23 oct. 2009 à 15:03
23 oct. 2009 à 15:03
Salut,
Ok j'avais oublié de copier la moitié de la macro... Cependant je n'ai rien dans le fichier ouvrir docs.xls après l'éxécution de la macro. Une idée? Les fichiers sont tous de la meme forme et on une entête avec des cellules fusionnées peut être que cela empêche la macro d'agir.
Ok j'avais oublié de copier la moitié de la macro... Cependant je n'ai rien dans le fichier ouvrir docs.xls après l'éxécution de la macro. Une idée? Les fichiers sont tous de la meme forme et on une entête avec des cellules fusionnées peut être que cela empêche la macro d'agir.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
>
Eorle
23 oct. 2009 à 15:23
23 oct. 2009 à 15:23
Peu importe les fichiers. Je ne comprends pas, cela fonctionne chez moi sans aucune difficulté.
Au départ, la macro lance une application "parcourir". Il faut que tous tes classeurs excel soient dans le même répertoire, et rechercher ce répertoire en faisant parcourir.
Au départ, la macro lance une application "parcourir". Il faut que tous tes classeurs excel soient dans le même répertoire, et rechercher ce répertoire en faisant parcourir.