Suppression de lignes et colonnes

Bsr à tout le Forum,

Je me permets de revenir vers vous car j'aurais besoin d'une mini-codification vba.

Ce code souhaité doit faire les choses suivantes :

Supprime toutes les lignes pairs contenant des informations (ligne 2 ; ligne 4 ; ligne 6...) et supprime les colonnes C, E, G, I et K.

Merci par avance pour votre aide.

Bonne soirée

Vous n'avez pas précisé "les colonnes ayant un contenu", mais ce sera très facile à adapter si c'est le cas.
Proposition:

Sub Macro1()
    Dim wS As Worksheet, i As Long
    Dim row As Range, col As Range

    Set wS = Sheets("Feuil1")

    ' Les lignes impaires ayant un contenu
    For i = wS.UsedRange.Rows.Count To 2 Step -2
        Set row = wS.Rows(i)
        If WorksheetFunction.CountA(row) > 0 Then
            wS.Rows(i).EntireRow.Delete
        End If
    Next i

    ' Les colonnes C, E, G, I et K
    For i = 11 To 3 Step -2
        wS.Columns(i).EntireColumn.Delete
    Next i
    Set row = Nothing
    Set col = Nothing
    Set wS = Nothing
End Sub

Le Top Optimix... Merci à toi

Tu fais partie de ceux qui expliquent en vert chaque action et cela est très appréciable pour ceux qui s'intéressent un peu à la codif.

Ceci étant, la partie de ta codif :

' Les colonnes C, E, G, I et K
For i = 11 To 3 Step -2
wS.Columns(i).EntireColumn.Delete
Next i

va de la colonne 11 à la colonne 3 avec un écart de -2 si je comprends bien, le tout en marche arrière.

Quelle serait donc la codification du For I/Next I, si j'avais voulu supprimer les colonnes A, B, C, G, O, S, T, U, X, Y, Z

Merci de ta réponse

Bonjour,

Il y a de multiples manières, mais à partir du moment ou les numéros de colonne ne suivent plus un ordre répétitif, vous devez passer par un tableau/une liste des numéros de colonnes à traiter. Ci-après deux manières de procéder, en référencant ou bien les lettres, ou bien les numéros, des colonnes en question.

Sub colonnes()
  ' 1. en référencant les noms de colonnes
  For Each i In VBA.Split("A, B, C, G, O, S, T, U, X, Y, Z", ", ")
    Debug.Print ActiveSheet.Columns(Range(i & 1).Column).Address
    'wS.Columns(Range(i & 1).Column).EntireColumn.Delete
  Next i
  ' 2. en référencant les numéros de colonnes
  For Each i In Array(1, 2, 3, 7, 15, 19, 20, 21, 24, 25, 26)
    Debug.Print ActiveSheet.Columns(i).Address
    'wS.Columns(i).EntireColumn.Delete
  Next i

End Sub

Bonjour saboh12617.
#fouggy

Une autre façon de procéder : on définit une plage de plusieurs colonnes et on la détruit. Là aussi, c'est toujours de la droite vers la gauche que ça se passe, mais cette fois c'est transparent pour l'utilisateur ( xlToLeft).

Sub Macro1()
    Dim wS As Worksheet, i As Long

    Set wS = Sheets("Feuil1")

    ' Les colonnes A, B, C, G, O ,S, T, U, X, Y, Z
    Dim Rng As Range
    With wS
        Set Rng = Union(.Columns(1), .Columns(2), .Columns(3), .Columns(7), .Columns(15), .Columns(19), .Columns(20), .Columns(21), .Columns(24), .Columns(25), .Columns(26))
    End With
    Rng.Delete Shift:=xlToLeft

    Set wS = Nothing
End Sub

Bonjour à tous ,

Une autre manière de faire pour supprimer des colonnes en les désignant (par des lettres).

Sub SupprCol()
Const colAsuppr = "A b C G k O S T v Y Z x"
   Sheets("Feuil1").Range(Replace(colAsuppr, " ", "1,") & 1).EntireColumn.Delete
End Sub

Très élégant mafraise

Oupssssssssssssssss,

Un grand merci à vous pour vos réponses techniques qui ne manqueront pas de me faire avancer, évitant ainsi de solliciter le forum pour ce type de détails qui permettent de comprendre un peu plus

Bonne soirée.

Rechercher des sujets similaires à "suppression lignes colonnes"