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.lastRowetlastCol: 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
lastRowetlastColsont 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.DisplayAlertspour é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.