VBA : Sélection et suppression de plages discontinues

Anonyme
2020-07-02T08:46:24+00:00

Bonjour à tous,

Je bloque sur un problème de sélection multiple avant effacement.

J'ai un tableau qui commence en [B10] de largeur et de longueur variable dans lequel je viens faire des calculs.

La colonne A et la ligne 10 contiennent des titres.

Sous la dernière ligne du tableau je fais par macro la somme des valeurs de chaque colonne,  à partir de la ligne 11 jusqu'à la dernière ligne

    colfin = Range("KX10").End(xlToLeft).Column

    lgnfin = Range("A1000").End(xlUp).Row + 1

    nblgn = lgnfin - 10

    Range(Cells(lgnfin, 2), Cells(lgnfin, colfin)).Select

    With Selection

        .NumberFormat = "general"

        .FormulaR1C1 = "=SUM(R11C:R[-1]C)"

        .Value = .Value

    End With

    Je souhaiterai supprimer les plages (de la ligne de titre jusqu'à la dernière ligne du tableau) dont la somme des valeurs = 0

J'ai fait un fichier exemple pour vous montrer à quoi ça ressemble et ce que je souhaite supprimer.

Attention, je ne souhaite pas supprimer les colonne entières mais uniquement les plages du tableau (titres compris) en décalant les cellules vers la gauche.

Quelqu'un pourrait-il me filer un coup de pouce pour finaliser cela ?

Merci

Domi

Voir exemple sur ci-joint : https://www.cjoint.com/c/JGciPyDo3vW

Microsoft 365 et Office | Excel | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire
Réponse acceptée par l’auteur de la question
DanielCo 107.7K Points de réputation
2020-07-02T09:38:42+00:00

Bonjour,

Essaie :

Sub test()

  Dim C As Range, I As Long

  colfin = Range("KX10").End(xlToLeft).Column

  lgnfin = Range("A1000").End(xlUp).Row + 1

  nblgn = lgnfin - 10

  For I = colfin To 2 Step -1

    If Application.Sum(Range(Cells(11, I), Cells(lgnfin - 1, I))) = 0 Then

      Columns(I).Delete

    End If

  Next I

End Sub

Daniel

Cette réponse a-t-elle été utile ?

0 commentaires Aucun commentaire

3 réponses supplémentaires

  1. Anonyme
    2020-07-02T11:38:52+00:00

    problème réglé en remplaçant :

    Columns(I).Delete

    par : 

    Range(Cells(10, I), Cells(lgnfin, I)).Delete Shift:=xlToLeft

    Merci ;o)))))))))))

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. DanielCo 107.7K Points de réputation
    2020-07-02T11:36:45+00:00

    C'est vrai, mais, comme les colonnes étaient vides par ailleurs.. C'est rectifié :

    Sub test()

      Dim C As Range, I As Long

      colfin = Range("KX10").End(xlToLeft).Column

      lgnfin = Range("A1000").End(xlUp).Row + 1

      nblgn = lgnfin - 10

      For I = colfin To 2 Step -1

        If Application.Sum(Range(Cells(11, I), Cells(lgnfin - 1, I))) = 0 Then

          Range(Cells(10, I), Cells(lgnfin - 1, I)).Delete xlToLeft

        End If

      Next I

    End Sub

    Daniel

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. Anonyme
    2020-07-02T11:19:25+00:00

    Merci Daniel,

    Ta macro fait le job mais Trop !

    Comme je l'ai précisé ,je ne souhaite pas supprimer les colonne entières mais uniquement les plages du tableau (titres compris) en décalant les cellules vers la gauche.

    j'ai dans les lignes 1 à 10 des données qui ne doivent pas disparaitre....

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire