Supprimer des cellules d'une ligne en fonction d'un nombre

Bonjour,

après avoir fait un peu l'inverse ici : https://forum.excel-pratique.com/viewtopic.php?f=2&t=125305

c'est-à-dire insérer des cellules pour décaler la ligne vers la droite d'un nombre de cases correspondant à un nombre,

j'aimerais pouvoir cette fois-ci simplifier une macro qui :

1. regarde le nombre contenu en cellule S4

2. Supprime la cellule T4 autant de fois qu'indique le nombre en S4

3. Passe à la cellule S5 et la ligne 5 (supprimer la cellule T5 tant de fois...)

4. et ainsi de suite jusqu'à S11.

Voici la macro qui fonctionne mais qui est pataude :

For a = 1 To Range("S4")
Range("T4").Delete Shift:=xlToLeft
Next a

For b = 1 To Range("S5")
Range("T5").Delete Shift:=xlToLeft
Next b

For c = 1 To Range("S6")
Range("T6").Delete Shift:=xlToLeft
Next c

For d = 1 To Range("S7")
Range("T7").Delete Shift:=xlToLeft
Next d

For e = 1 To Range("S8")
Range("T8").Delete Shift:=xlToLeft
Next e

For f = 1 To Range("S9")
Range("T9").Delete Shift:=xlToLeft
Next f

For g = 1 To Range("S10")
Range("T10").Delete Shift:=xlToLeft
Next g

For h = 1 To Range("S11")
Range("T11").Delete Shift:=xlToLeft
Next h

    End Sub

Peut-on la simplifier avec une autre boucle par exemple ?

Salut Patapin85,

Quant tu dis "Supprimer la cellule T4" cela signifie supprimer le contenu de la cellule ou bien la colonne T4 ?

EDIT : Je viens de regarder ton fichier, c'est bon j'ai compris.

EDIT 2 : Que penses-tu de ce code ?

Private Sub CommandButton1_Click()

Dim i As Byte
Dim j As Byte

    For i = 4 To 11

        For j = 1 To Worksheets(1).Range("S" & i).Value

            Worksheets(1).Range("T" & i).Delete Shift:=xlToLeft

        Next j

    Next i

End Sub

Salut Patapin

Bonjour Baboutz

En ce qui concerne la ' frangine ' ...

Sub PatapinFrangine()
Dim i As Long, x As Long
If [S3] = "X" Then Exit Sub
    For i = 4 To 11
        If Range("S" & i).Value > 0 Then
          x = Range("S" & i).Value
          Range(Cells(i, 20 + x), Cells(i, 20 + x + 6)).Cut Range(Cells(i, 20), Cells(i, 20 + 6))
        End If
    Next i
[S3] = "X"
End Sub

En espèrant que cela corresponde à ton attente ...

Hello James007,

Quel est la différence entre nos deux codes, hormis l'écriture ? Vitesse d’exécution ?

Perso, on m'a toujours dis que le copié/collé en vba, c'était à éviter absolument !

Bonjour,

Pas de raison objective qui conduis à éviter Cut and Paste ...

Si tu as une préférence pour Delete ...tu peux tout de même te passer de la boucle j comme compteur ...

Private Sub CommandButton1_Click()
Dim i As Byte
    For i = 4 To 11
      If Range("S" & i) > 0 Then Range(Cells(i, "T"), Cells(i, "T").Offset(0, Range("S" & i) - 1)).Delete Shift:=xlToLeft
    Next i
End Sub

Formid !

Les trois versions fonctionnent, merci à vous.

Avec néanmoins une énorme différence, celle de Baboutz ne marche que sur la Feuille1 (mais je peux adapter si besoin)

et celles de James007 fonctionnenet quelle que soit la feuille, ce qui me convient parfaitement.

Problème résolu, bonne journée à vous.

Bonjour,

Content que cela puisse t'aider ...

Merci pour tes remerciements ...

Avec les compliments de l'ami de pains !

Avec les compliments de l'ami de pains !

Milles Mercis ... !!!

Ton nouvel avatar est très bien choisi ... ET il ouvre l'appétit ...

Rechercher des sujets similaires à "supprimer ligne fonction nombre"