Hi!Fusionner deux classeurs Excel
Je dispose de deux dossiers. Chaque dossiers contient le même nombre de fichiers (100) avec des noms identiques :
Dossier 1 : abc.xlsx, fgr.xlx,...
Dossier 2: abc.xlsx, fgr.xlx,...
J'aimerais fusionner les fichiers de même nom. (abc.xlsx avec abc.xlsx).
Sub SelectFolder()
Set fso = CreateObject("Scripting.FileSystemObject")
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = -1 Then ' if OK is pressed
folderpath = .SelectedItems(1)
Set sFolder1DB = fso.GetFolder(folderpath)
End If
End With
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = -1 Then ' if OK is pressed
folderpath = .SelectedItems(1)
Set sFolder1TB = fso.GetFolder(folderpath)
End If
End With
If sFolder1DB <> "" And sFolder1TB <> "" Then ' if a file was chosen
For Each DBsheet In sFolder1DB.Files
For Each TBsheet In sFolder1TB.Files
Debug.Print DBsheet
Debug.Print TBsheet
If DBsheet.Name = TBsheet.Name Then
Workbooks.Open FileName:=DBsheet.Path
Workbooks(DBsheet).Sheets("Database").Copy _
Before:=Workbooks(TBsheet).Sheets(1)
Workbooks.Close
End If
Next
Next
End If
End SubJ'obtiens l'erreur "mismatch 13" sur cette ligne. J'imagine que c'est parce que le classeur de destination n'est pas ouvert. Mais comme les noms sont identiques (abc.xlsx et abc.xlsx), je ne peux pas les ouvrir en même temps.
Workbooks(DBsheet).Sheets("Database").Copy _
Before:=Workbooks(TBsheet).Sheets(1)
Pouvez-vous svp m'aider à fusionner ces fichiers?
Merci
Bonjour et
Une idée serait d'utiliser un classeur temporaire pour stocker la feuille en question, tu ouvres ton premier classeur, tu copies la feuille dans un nouveau classeur avec un nom automatique, tu ouvres ton second classeur, et tu copies la feuille dessus, puis tu fermes le classeur temporaire, tu enregistres et tu passes à la suite.
Une piste:
Sub Macro1()
Dim Wkb As Workbook
Dim Wks As Worksheet
Dim nomFichier As String
'ouverture d'un fichier et copie de sa première feuille
nomFichier = Application.GetOpenFilename
Set Wkb = Workbooks.Open(nomFichier)
Wkb.Sheets(1).Copy
'Fermeture du classeur d'origine
Wkb.Close
Set Wkb = Nothing
'copie de la feuille du classeur temporaire
Set Wks = ActiveSheet
Wks.Copy before:=ThisWorkbook.Sheets(1)
'fermeture du fichier temporaire
Application.DisplayAlerts = False
Wks.Parent.Close
Set Wks = Nothing
Application.DisplayAlerts = True
End Subça permet de copier la première feuille d'un classeur Excel que tu choisis, ferme le classeur choisi, copie la feuille dans le classeur temporaire vers ton classeur actif, et ferme le classeur temporaire.
Comme tu passes par un nouveau classeur, tu peux laisser ce classeur ouvert et ouvrir l'autre, les noms ne rentreront plus en collision.