Supprimer des colonnes entières si vides (avec conditions)

Aurelie12345 -  
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

J'ai trouvé 1000 explications pour supprimer les colonnes mais comme j'y rajoute plusieurs variables rien n'y fait ça ne va pas...

Donc j'ai un tableau de la ligne 11 à 700

J'aimerais une macro qui va regarder les colonnes de U12 à BM700 et si la colonne est vide : supprimer la colonne entière (titre ligne 11 compris)

J'ai actuellement ce code :

Sub SupprimerColonnesVides()

'Étape 1: Déclaration des variables
Dim MyRange As Range
Dim iCounter As Long

'Étape 2: Définir la plage de cellules
Set MyRange = ActiveSheet.Range("U12:BM700")

'Étape 3: Commencez la boucle avec le compte à rebours
For iCounter = MyRange.Columns.Count To 1 Step -1

'Étape 4: Si la colonne entière est vide, supprimez-la
If Application.CountA(Columns(iCounter).EntireColumn) = 0 Then
Columns(iCounter).Select
'Le problème est ici avec la ligne ci dessous qui coince...
Columns(iCounter).EntireColumn.Delete
End If

'Étape 5: Réduisez la valeur du compteur
Next iCounter
End Sub

Donc c'est au moment de supprimer que ça saute, "Columns(iCounter).EntireColumn.Delete" ne va pas...

Auriez-vous une solution ?

Merci beaucoup d'avance :)

Aurélie

Windows / Edge 108.0.1462.54

6 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 

Bonjour,

titre ligne 11 compris

Vous ne pouvez pas trouver une colonne vide s'il a un titre!

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

bonjour,

moi j'essaierais 

Columns(iCounter).Delete

"ça saute", "ne va pas...": un message d'erreur?

0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 

Bonjour yg_be,

Son code fonctionne cote instruction delete.

Mais ne peut pas passer dans la boucle, la colonne n'etant pas vide puisque en ligne 11 il y a un titre par colonne

0
Aurelie12345
 

Bonjour, 

En réalité le code comprend bien que le titre ne doit pas être pris en considération car je défini la plage sur 

ActiveSheet.Range("U12:BM700")

Le soucis c'est que le code fonctionne pour 3-4 colonnes puis s'arrête, et ça me souligne en jaune dans vba la ligne

Columns(iCounter).EntireColumn.Delete

En faite je réalise qu'il s'arrête quand il trouve une colonne avec des données entre la ligne 12 et 700. Mais j'aimerais qu'il continue jusque la colonne BM...

Merci pour votre aide :)

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

Souvent, il affiche un message d'erreur qui explique pourquoi il s'arrête, avant d'afficher une ligne en jaune.

0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 

Re,

Aurélie:

Votre code ne peut pas faire ce que vous voulez.

Le contrôle colonne vide est pour une colonne partant de la ligne 1 pas 12 ou vous ne nous dites pas  tout.

Mettez votre fichier à dispo sur ci-joint

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 

Je suis étonné de voir, dans le code, d'abord 

For iCounter = MyRange.Columns.Count To 1 Step -1

ensuite, plusieurs fois, "Columns(iCounter)"

Je pense qu'il est nécessaire, chaque fois, d'écrire "MyRange.Columns(iCounter)".

0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 

Bonjour,

Il faut coder par rapport aux colonnes de la Plage:

Sub SupprimerColonnesVides()
    Dim MyRange As Range
    Dim iCounter As Long
    
    Set MyRange = ActiveSheet.Range("U12:BM700")
    With MyRange
        NbC = .Columns.Count        'nombre de colonnes de la Plage
        'Boucle inverse sur les colonnes Plage
        For iCounter = NbC To 1 Step -1
            If Application.CountA(.Columns(iCounter)) = 0 Then  'test colonne Plage
                .Columns(iCounter).EntireColumn.Delete               'Delete colonne entiere feuille
            End If
        Next iCounter
    End With
    Set MyPlage = Nothing
End Sub
0