Comment supprimer par lots des colonnes dans plusieurs classeurs Excel

Partage maintenant:

Il est très courant de voir des personnes enregistrer des données confidentielles dans des classeurs Excel. Lorsque ces classeurs doivent être partagés avec d'autres collègues ou amis, la suppression manuelle est la seule option disponible. Cependant, avec cet article, vous apprendrez à supprimer rapidement des colonnes confidentielles ou des colonnes indésirables de plusieurs classeurs.

Téléchargez

Si vous souhaitez commencer à utiliser le logiciel dès que possible, vous pouvez :

Téléchargez le logiciel maintenant

Sinon, si vous voulez bricoler, vous pouvez lire le contenu ci-dessous.

Préparons l'interface graphique

Comme indiqué dans l'image, renommez la feuille 1 en "ControlPanel". En utilisant des formes, nous ajouterions des boutons sur cette feuille pour la faire apparaître comme GUI (interface utilisateur graphique) pour cet outil. Nous avons besoin de trois champs sur cette interface graphique. Le champ 1 sert à afficher le classeur sélectionné par l'utilisateur. Le champ 2 sert à afficher les colonnes du classeur sélectionné sous forme de liste déroulante. Le champ 3 est une liste de colonnes qui doivent être supprimées du classeur.Préparer l'interface graphique

Un service innovant

Code VBALa procédure p_fpick permettrait à l'utilisateur de parcourir et de sélectionner des fichiers Excel. Dès qu'un fichier Excel est sélectionné, le script lit les noms de colonne de Sheet1 et ces noms sont affichés sous forme de liste déroulante. La procédure "Add_Column" permettra à l'utilisateur d'ajouter le nom de la colonne sélectionnée dans la liste déroulante pour l'ajouter à la liste des colonnes à supprimer. La procédure finale "Delete_Columns" ouvrirait le classeur répertorié sous le champ "Sélectionner le classeur" et supprimerait toutes les colonnes sélectionnées. Après la suppression, le classeur serait enregistré et fermé.

Sub P_fpick()
    Dim v_fd As Office.FileDialog
    Set v_fd = Application.FileDialog(msoFileDialogFilePicker)
    With v_fd
        .AllowMultiSelect = False
        .Title = "Please select the Excel workbook"
        .Filters.Clear
        .Filters.Add "Excel", "*.xls*"
        If .Show = True Then
            cp.Range("B4").Value = .SelectedItems(1)
        End If
    End With
    
    Dim wb As Workbook
    Dim ab As Workbook
    
    Set ab = ThisWorkbook
    Set wb = Workbooks.Open(cp.Range("B4").Value)
    
    Dim v_sheets As String
    v_sheets = ""
    
    Dim lc As Long
    lc = wb.Sheets(1).Range("AZ1").End(xlToLeft).Column
    Dim c As Long
    For c = 1 To lc
        If v_sheets = "" Then
            v_sheets = wb.Sheets(1).Cells(1, c).Value
        Else
            v_sheets = v_sheets & "," & wb.Sheets(1).Cells(1, c).Value
        End If
    Next
    
    wb.Close False
    ab.Activate
    
    With ab.Sheets(1).Range("N4:O5").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=v_sheets
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With    
    
End Sub

Sub Add_Column()
    If Range("Q4").Value = "" Then
        Range("Q4").Value = Range("N4").Value
    Else
        Range("Q4").Value = Range("Q4").Value & "," & Range("N4").Value
    End If
End Sub

Sub Delete_Columns()
    Dim v_sheets() As String
    Dim ab As Workbook
    Dim wb As Workbook
    Set ab = ThisWorkbook
    Set wb = Workbooks.Open(Sheets(1).Range("B4").Text)
    Dim lc As Long
    lc = wb.Sheets(1).Range("AZ1").End(xlToLeft).Column
    Dim c As Long
    
    v_sheets = Split(ab.Sheets(1).Range("Q4").Text, ",")
    Dim intcount As Long
    For intcount = LBound(v_sheets) To UBound(v_sheets)
        For c = 1 To lc
            If wb.Sheets(1).Cells(1, c).Value = v_sheets(intcount) Then
                wb.Sheets(1).Columns(c).Delete Shift:=xlToLeft
            End If
        Next c
    Next intcount
    wb.Close True
    ab.Activate
End Sub

Ajustez-le

Pour l'instant, ce script ne gère qu'un seul classeur. Mais en utilisant la dernière méthode de ligne utilisée, vous pouvez faire en sorte que la macro gère plusieurs classeurs en mode batch. Cependant, le script ne peut pas ouvrir un Excel corrompu classeur.

Introduction de l'auteur:

Nick Vipond est un expert en récupération de données dans DataNumen, Inc., qui est le leader mondial des technologies de récupération de données, y compris récupération de mots et produits logiciels de récupération Outlook. Pour plus d'informations, visitez www.datanumen.com.

Partage maintenant:

Les commentaires sont fermés.