Supprimer les feuilles de calcul vides dans un classeur Excel, Excel VBA

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 et lastCol : 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 et lastCol 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.

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.

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x