VBA - Supprimer une colonne si elle est vide

Bonjour,

J'essaie de supprimer une colonne si cette dernière est vide.

L'inconvénient c'est que le nombre de colonnes peut varier, aussi, je ne peux pas désigner une colonne en particulier.

Je m'y suis pris comme ça :

Sub lalala()

Dim z As Long, y As Long, w As Long
Dim lrco as long, lcco as long
lcco = Cells(1, Columns.Count).End(xlToLeft).Column

For y = 1 To lcco Step -1
For w = 2 To lrco Step -1
    z = Application.WorksheetFunction.CountA(Columns(y))
   ' Range("F2") = z
    If z = 0 Then
    Columns(y).Delete
    End If
Next
Next
End Sub

Sauf qu'il ne se passe rien.

En théorie, z doit correspondre au nombre de cellules vides présentes au sein du tableau, colonne après colonne.

Si z est égal à 0 alors la colonne est supprimée.

Mais z n'est jamais égal à 0...

Soit je m'y prend mal dans le code, soit j'ai encore un problème avec les cellules "vides" qui ne le sont pas vraiment.

Je cherche simplement à faire en sorte que si dans mon tableau, dont le nombre de colonnes et de ligne varie, si une colonne n'est pas remplie, alors cette dernière est supprimée.

J'ai mis un tableau en PJ au cas où, sans qu'il ne soit vraiment nécessaire j'imagine.

Vous vous y prendriez comment ?

A plus tard !

Bonne journée

Bonjour,

Essaie ceci :

Public Sub DeleteBlankColumns()
Dim firstColumn As Long, lastColumn As Long, lCol As Long
    Application.ScreenUpdating = False
    With ActiveSheet
        firstColumn = .ListObjects(1).ListColumns.Count + 1
        lastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
        For lCol = lastColumn To firstColumn Step -1
        If Application.CountA(.Columns(lCol)) = 0 Then .Columns(lCol).EntireColumn.Delete
        Next lCol
    End With
End Sub

Bonjour,

J'ai testé le code sur mon document initial en l'adaptant un peu comme ceci :

Public Sub DeleteBlankColumns()
Dim firstColumn As Long, lastColumn As Long, lCol As Long
Set co = Worksheets("Correspondances")

    With co
        firstColumn = .ListObjects(1).ListColumns.Count + 1
        lastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column

        For lCol = lastColumn To firstColumn Step -1
            If Application.CountA(.Columns(lCol)) = 0 Then .Columns(lCol).EntireColumn.Delete
        Next lCol
    End With
End Sub

Mais il apparaît l'erreur '9' "L'indice n'appartient pas à la sélection" sur cette ligne :

firstColumn = .ListObjects(1).ListColumns.Count + 1

co est bien déclaré en début de code :

Option Explicit

Dim n As String, Rep As Byte
Dim lrfb As Long, lrco As Long, lrsa As Long, lrdc As Long, r As Long, lrCBN As Long
Dim lcco As Long
Dim fb As Worksheet, sa As Worksheet, dc As Worksheet, ds As Worksheet, co As Worksheet, CBN As Worksheet
Dim rng As Range, cell As Range, rng2 As Range, Cell2 As Range
Dim i&, derLn&, nb&, derLn2&, nb2&
Dim del As Integer

J'ai pourtant réussi à la faire fonctionner à un moment.

J'ai la même erreur si j'utilise le code initial que vous avez proposé.

Re,

Dans ton fichier, tu avais un tableau (ListObject) !...

Ton vrai fichier comporte t-il un tableau (structuré) ?

Cdlt.

Ah oui !

J'avais copié mes données depuis un tableau structuré en effet.

Mais en l'occurrence, ce traitement doit intervenir avant que le tableau soit structuré, de manière à ce que toutes les colonnes soient prises en compte (et pour avoir un tableau plus clair, sans colonnes vides).

Re,

Essaie donc ainsi :

Public Sub DeleteBlankColumns()
Dim lastColumn As Long, lCol As Long
Set co = Worksheets("Correspondances")
    Application.ScreenUpdating = False
    With co
        lastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
        For lCol = lastColumn To 1 Step -1
            If Application.CountA(.Columns(lCol)) = 0 Then .Columns(lCol).EntireColumn.Delete
        Next lCol
    End With
End Sub

Eh bien voilà, ça marche très bien désormais.

Merci !

Bonne fin de journée.

Rechercher des sujets similaires à "vba supprimer colonne vide"