Supprimer les feuilles de calcul vides dans un classeur Excel, Excel VBA
Voici un code VBA détaillé pour supprimer les feuilles de calcul vides dans un classeur Excel, avec une explication complète.
Code VBA : Supprimer les Feuilles de Calcul Vides
Sub DeleteEmptyWorksheets() Dim ws As Worksheet Dim wsCount As Integer Dim i As Integer Dim lastRow As Long, lastCol As Long Dim wsToDelete As Collection Dim wsName As String Dim response As VbMsgBoxResult ' Initialiser une collection pour stocker les noms des feuilles vides Set wsToDelete = New Collection ' Compter le nombre total de feuilles de calcul wsCount = ThisWorkbook.Worksheets.Count ' Empêcher la suppression si une seule feuille reste If wsCount = 1 Then MsgBox "Impossible de supprimer la seule feuille du classeur !", vbExclamation, "Supprimer les Feuilles Vides" Exit Sub End If ' Boucle sur chaque feuille de calcul du classeur For Each ws In ThisWorkbook.Worksheets ' Trouver la dernière ligne et colonne utilisée lastRow = ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row lastCol = ws.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column ' Si aucune plage utilisée n'est trouvée, la feuille est vide If lastRow = 1 And lastCol = 1 Then If Application.WorksheetFunction.CountA(ws.Cells) = 0 Then ' Ajouter le nom de la feuille à la collection wsToDelete.Add ws.Name End If End If Next ws ' Confirmer la suppression si des feuilles vides sont trouvées If wsToDelete.Count > 0 Then wsName = "Les feuilles suivantes seront supprimées :" & vbNewLine & vbNewLine For i = 1 To wsToDelete.Count wsName = wsName & wsToDelete(i) & vbNewLine Next i response = MsgBox(wsName & vbNewLine & "Voulez-vous continuer ?", vbYesNo + vbQuestion, "Confirmer la Suppression") If response = vbYes Then Application.DisplayAlerts = False For i = 1 To wsToDelete.Count ThisWorkbook.Worksheets(wsToDelete(i)).Delete Next i Application.DisplayAlerts = True MsgBox "Les feuilles vides ont été supprimées avec succès.", vbInformation, "Supprimer les Feuilles Vides" Else MsgBox "Aucune feuille n'a été supprimée.", vbInformation, "Supprimer les Feuilles Vides" End If Else MsgBox "Aucune feuille vide trouvée.", vbInformation, "Supprimer les Feuilles Vides" End If End Sub
Explication Détailée
Ce macro VBA parcourt toutes les feuilles de calcul d’un classeur actif et supprime celles qui sont vides. Voici une explication étape par étape du code :
1. Initialisation des Variables
ws
: Utilisé pour parcourir chaque feuille de calcul.wsCount
: Stocke le nombre total de feuilles de calcul.i
: Compteur utilisé dans les boucles.lastRow
etlastCol
: Permettent de déterminer la dernière ligne et colonne utilisées.wsToDelete
: Collection qui stocke les noms des feuilles vides.wsName
: Stocke les noms des feuilles à supprimer pour la confirmation.response
: Capture la réponse de l’utilisateur dans la boîte de message de confirmation.
2. Vérification Si Il Ne Reste Qu’une Feuille
- Si le classeur contient uniquement une feuille, le macro affiche un message et s’arrête, car il n’est pas possible de supprimer la dernière feuille.
3. Boucle à Travers Toutes les Feuilles de Calcul
- Le macro vérifie chaque feuille pour déterminer si elle est vide.
ws.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
: Trouve la dernière ligne utilisée.ws.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
: Trouve la dernière colonne utilisée.- Si
lastRow
etlastCol
sont tous deux égaux à 1 et qu’aucune cellule non vide n’est trouvée (Application.WorksheetFunction.CountA(ws.Cells) = 0
), la feuille est considérée comme vide. - Le nom de la feuille vide est ajouté à la collection
wsToDelete
.
4. Confirmation de la Suppression avec l’Utilisateur
- Si des feuilles vides sont trouvées, une boîte de message s’affiche, listant les feuilles à supprimer et demandant à l’utilisateur de confirmer la suppression.
5. Suppression des Feuilles Vides
-
- Si l’utilisateur confirme, le macro :
- Désactive temporairement
Application.DisplayAlerts
pour éviter les alertes de suppression. - Supprime chaque feuille de la collection
wsToDelete
. - Réactive
Application.DisplayAlerts
. - Affiche un message confirmant la suppression.
- Désactive temporairement
- Si l’utilisateur confirme, le macro :
6. Gestion des Cas Où Aucune Feuille N’est Vide
- Si aucune feuille vide n’est trouvée, le macro affiche un message informant l’utilisateur.
Pourquoi ce Code est Efficace ?
✔ Empêche la Suppression de la Dernière Feuille : Assure qu’il reste au moins une feuille dans le classeur.
✔ Détection Précise des Feuilles Vides : Utilise les fonctions .Find
et CountA
pour confirmer qu’une feuille est vide.
✔ Confirmation de Suppression Avant Exécution : Prévient toute suppression accidentelle.
✔ Suppression par Lot en Utilisant une Collection : Identifie d’abord toutes les feuilles vides avant de les supprimer pour plus d’efficacité.
✔ Gestion Correcte des Alertes : Évite les alertes inutiles pendant la suppression des feuilles.