Fusion de fichiers .xlsx en un seul sans la première ligne
Bonjour,
Je travaille sous Excel 2013 et dispose de 40 fichiers sous la même disposition (colonnes identiques).
Je cherche à les fusionner pour obtenir une seule feuille dans un seul fichier avec l'ensemble du contenu des 40 fichiers sans répéter la première ligne (ligne de titre des colonnes).
J'ai compris au travers des infos que j'ai pu glaner sur le web qu'une macro était capable de le faire, mais je suis complètement novice en la matière.
Par ailleurs, j'ai trouvé quelques scripts, mais le fait d'y voir le chiffre 65536 (ancien nombre lignes sur Excel) me laisse à penser que je ne pourrai pas les appliquer sur Excel 2013. De plus, ce que je vois écris par défaut lorsque je créé une macro dans un nouveau fichier puis que je la modifie ressemble à la trame des scripts que je trouve mais ne s'y colle pas parfaitement. Les macros que je trouve ne sont pas faites pour Excel 2013.
N'étant pas du tout habitué par la démarche de création et application de macro, je viens vous demander de l'aide. Mais je pense que je risque de m'intéresser au VBA de plus près.
En vous remerciant d'avance de vos réponses !
Bonjour,
voici une proposition de macro,
Sub fusionclasseur()
set wbf=ThisWorkbook ' wbf reférence le classeur maitre
Set wsc = wbf.Worksheets.Add ' on ajoute une feuille dans le classeur maitre
wsc.Name = "Résultat fusion" ' on nomme la feuille " résultat fusion"
'-------------------------------
' on demande du répertoire qui contient les fichiers à fusionner via dialogue windows
' résultat dans chemin
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
With fd
.Title = "Sélectionner le répertoire contenant les fichiers à fusionner"
.Filters.Clear
.AllowMultiSelect = False
If .Show = -1 Then ' si un répertoire sélectionné
chemin = .SelectedItems(1) & "\" ' on le met dans chemin
Else
Exit Sub 'pas de répertoire sélectionné, on arrête
End If
End With
'---------------------------------
masque = InputBox("introduire le filtre de sélection des classeurs (défaut *.xls*)") ' masque est le filtre des fichiers à sélectionner
wsn = InputBox("Nom de la feuille à copier de chaque classeur (défaut première feuille trouvée)") ' wsn nom de la feuille à copier de chaque classeur à fusionner
If masque = "" Then masque = "*.xls*" ' si masque est vide on attribue le filtre par défaut
f = Dir(chemin & masque) ' f= nom du premier fichier correspondant au critère
ctrf = 0 ' compteur de classeurs fusionnés
pli = 1 'première ligne sur résultat fusion
While f <> "" ' tant qu'il y a des fichiers(classeurs)) à fusionner
ctrf = ctrf + 1 '
Set wbi = Workbooks.Open(chemin & f) ' on ouvre le classeur
If wbi.Name <> wbf.Name Then ' si classeur différent du classeur maitre
If wsn = "" Then Set wsi = wbi.Worksheets(1) Else Set wsi = wbi.Worksheets(wsn) ' on sélectionne la feuille à fusionner =wsi
dli = wsi.Range("A" & Rows.Count).End(xlUp).Row ' dli dernière ligne sur wsi
If dli > 1 Then
If ctrf = 1 Then pl = 1 Else pl = 2 ' si premier classeur à fusionner, il faut copier l'entête
wsi.Rows(pl & ":" & dli).Copy wsc.Range("a" & pli) 'on copie les lignes du classeur à fusionner dans la feuille résultat de fusion
pli = pli + dli + 1 - pl ' on ajuste le nombre de lignes de résultat fusion
End If
End If
wbi.Close 'on ferme le classeur
f = Dir() 'on passe au classeur suivant
Wend
End Sub
Bonjour,
Il faut au préalable que je comprenne quand même ce que je fait en suivant la formation VBA que vous proposez sur le site !
Merci de cette réponse. Je ferai une réponse appliquée à mon cas lorsque j'aurais décortiqué tout ça. Dans l'immédiat, j'ai donc fait du copier-coller basique.
A bientôt !
Bonjour,
je t'ai mis quelques commentaires.
Bonjour,
J'ai enfin testé cette macro et elle fonctionne parfaitement.
Il suffit de donner le bon nom de la feuille à copier et le bonne adresse du répertoire contenant tous les fichiers à fusionner.
Pour les autres éléments en rouge, ils sont redemandés à l'exécution de la macro et il suffit de faire OK à chaque fois.
Merci beaucoup h2so4 !