Fusionner des dizaines voire des centaines de feuilles Excel en une seule est une tâche fastidieuse si elle est effectuée manuellement. Heureusement, en exploitant la puissance des macros VBA, ce processus complexe peut être automatisé en un seul clic, vous faisant gagner un temps et des efforts considérables.
Pour les professionnels qui gèrent fréquemment la consolidation de données provenant de divers services ou de rapports périodiques, cette technique est essentielle. Utiliser une macro VBA pour fusionner des feuilles Excel est non seulement efficace mais minimise également le risque d’erreur humaine courant lors de la copie manuelle des données.
Avantages de l’utilisation des macros VBA
Comparée aux méthodes conventionnelles de copier-coller, l’automatisation avec VBA offre plusieurs avantages. Premièrement, le processus d’exécution est très rapide. Deuxièmement, la cohérence des données est garantie car elle est gérée par le script. De plus, vous pouvez personnaliser le code selon des besoins spécifiques, comme fusionner des données sans répéter les en-têtes.
Script VBA pour fusionner toutes les feuilles
Voici un script VBA fiable et testé. Ce code fusionnera les données de toutes les feuilles d’un classeur, à l’exception de la feuille de résultat fusionnée elle-même, dans une nouvelle feuille nommée « RDBMergeSheet.
Sub CopyDataWithoutHeaders()
Dim sh As Worksheet
Dim DestSh As Worksheet
Dim Last As Long
Dim shLast As Long
Dim CopyRng As Range
Dim StartRow As Long
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
'Supprimer la feuille "RDBMergeSheet" si elle existe
Application.DisplayAlerts = False
On Error Resume Next
ActiveWorkbook.Worksheets("RDBMergeSheet").Delete
On Error GoTo 0
Application.DisplayAlerts = True
'Créer une nouvelle feuille nommée "RDBMergeSheet"
Set DestSh = ActiveWorkbook.Worksheets.Add
DestSh.Name = "RDBMergeSheet"
StartRow = 2
'Parcourir toutes les feuilles et copier les données vers DestSh
For Each sh In ActiveWorkbook.Worksheets
If IsError(Application.Match(sh.Name, _
Array(DestSh.Name, "Information"), 0)) Then
Last = LastRow(DestSh)
shLast = LastRow(sh)
If shLast > 0 And shLast >= StartRow Then
Set CopyRng = sh.Range(sh.Rows(StartRow), sh.Rows(shLast))
If Last + CopyRng.Rows.Count > DestSh.Rows.Count Then
MsgBox "Espace insuffisant dans la feuille de destination"
GoTo ExitTheSub
End If
CopyRng.Copy
With DestSh.Cells(Last + 1, "A")
.PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End With
End If
End If
Next
ExitTheSub:
Application.GoTo DestSh.Cells(1)
DestSh.Columns.AutoFit
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
'Fonction de support pour trouver la dernière ligne
Function LastRow(sh As Worksheet)
On Error Resume Next
LastRow = sh.Cells.Find(What:="*", _
After:=sh.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
On Error GoTo 0
End FunctionNotez que ce script nécessite la fonction de support LastRow, qui a été incluse pour détecter avec précision la dernière ligne contenant des données.

Comment utiliser ce script
- Ouvrez votre classeur Excel.
- Appuyez sur ALT + F11 pour ouvrir l’éditeur VBA.
- Dans l’Explorateur de projets, faites un clic droit sur votre classeur, sélectionnez Insérer > Module.
- Copiez et collez l’intégralité du code ci-dessus dans la fenêtre du module vide.
- Fermez l’éditeur VBA et retournez dans Excel.
- Exécutez la macro en appuyant sur ALT + F8, sélectionnez CopyDataWithoutHeaders, puis cliquez sur Exécuter.
De cette manière, toutes les données des différentes feuilles seront fusionnées proprement dans une nouvelle feuille. Par conséquent, vous pouvez vous concentrer sur l’analyse des données plutôt que sur le processus de collecte.

