Sub Macro1() Cells.Clear ' Vide la feuille Dim plage As Range, plage_a_supp As Range Dim nb As Long, n As Long, i As Long, j As Long Dim t, ii As Byte t = Split("1 11 21 31") 'Permet de créer une petite table pour exemple For ii = 0 To 3 Cells(t(ii), 1).Resize(10) = ii Cells(t(ii), 2).Resize(10) = [=TRANSPOSE({1,2,3,4,5,6,7,8,9,10})] Next ii n = ActiveSheet.UsedRange.Rows.Count 'Compte le nombre de lignes dynamiques nb = 4 'pour ôter 4 lignes en bas et 4 en haut If nb = 0 Then Exit Sub For i = 2 To n + 1 If Range("A" & i).Value = Range("A" & i - 1).Value Then If plage Is Nothing Then Set plage = Union(Range("A" & i - 1), Range("A" & i)) Else Set plage = Union(plage, Range("A" & i)) End If Else If plage.Rows.Count >= nb * 2 Then For j = 1 To nb If plage_a_supp Is Nothing Then Set plage_a_supp = Union(plage(1, 1), plage(plage.Rows.Count, 1)) Else Set plage_a_supp = Union(plage_a_supp, plage(j, 1), plage(plage.Rows.Count + 1 - j, 1)) End If Next Set plage = Range("A" & i) If Range("A" & i).Value = "" Then Exit For Else Set plage = Nothing If Range("A" & i).Value = "" Then Exit For End If End If Next plage_a_supp.Rows.EntireRow.Delete End Sub
Sub Macro1() Cells.Clear ' Vide la feuille Dim plage As Range, plage_a_supp As Range Dim nb As Long, n As Long, i As Long, j As Long, msg As String Dim t, ii As Byte t = Split("1 11 21 31") 'Permet de créer une petite table pour exemple For ii = 0 To 3 Cells(t(ii), 1).Resize(10) = ii Cells(t(ii), 2).Resize(10) = [=TRANSPOSE({1,2,3,4,5,6,7,8,9,10})] Next ii n = ActiveSheet.UsedRange.Rows.Count 'Compte le nombre de lignes dynamiques nb = 4 'pour ôter 4 lignes en bas et 4 en haut If nb = 0 Then Exit Sub msg = "" For i = 2 To n + 1 If Range("A" & i).Value = Range("A" & i - 1).Value Then If plage Is Nothing Then Set plage = Union(Range("A" & i - 1), Range("A" & i)) Else Set plage = Union(plage, Range("A" & i)) End If Else If plage.Rows.Count >= nb * 2 Then For j = 1 To nb If plage_a_supp Is Nothing Then Set plage_a_supp = Union(plage(1, 1), plage(plage.Rows.Count, 1)) Else Set plage_a_supp = Union(plage_a_supp, plage(j, 1), plage(plage.Rows.Count + 1 - j, 1)) End If Next Set plage = Range("A" & i) If Range("A" & i).Value = "" Then Exit For Else msg = msg & " - " & plage(1, 1).Value Set plage = Nothing If Range("A" & i).Value = "" Then Exit For End If End If Next If Not plage_a_supp Is Nothing Then plage_a_supp.Rows.EntireRow.Delete End If If msg <> "" Then MsgBox "les groupes suivants, d'un nombre non suffisant, " & _ "n'ont pas été traités " & vbCrLf & Mid(msg, 3) End If End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionDo while i>0 If Cells(i,1).Value<>Cells(i+1,1).Value Then 'Changement End If i=i-1 Loop
For i=Max to 1 Step -1
Voila, pour résumer je cherche à épurer une liste de valeurs identiques par ses extrêmes en supprimant les 2 premières et 2 dernières lignes.
Private Sub CommandButton1_Click() epure End Sub Private Sub epure() Dim plage As Range, plage_a_supp As Range If plage Is Nothing Then Set plage = Range("B1") Set plage_a_supp = plage End If For i = 2 To Rows.Count ' je me moque même de déterminer la dernière ligne remplie If Range("B" & i).Value = Range("B" & i - 1).Value Then Set plage = Union(plage, Range("B" & i)) Else If plage.Rows.Count >= 4 Then Set plage_a_supp = Union(plage_a_supp, plage(1, 1), plage(2, 1), plage(plage.Rows.Count - 1, 1), plage(plage.Rows.Count)) Set plage = Range("B" & i) If Range("B" & i).Value = "" Then Exit For End If End If Next plage_a_supp.EntireRow.Delete End Sub
...... Dim nb As Integer nb 8 '>> pour en oter 8 à chaque extrémité. ........ ........ Else If plage.Rows.Count >= nb Then For i = 1 To nb Set plage_a_supp = Union(plage_a_supp, plage(nb, 1), plage(plage.Rows.Count + 1 - nb, 1)) Next Set plage = Range("B" & i) If Range("B" & i).Value = "" Then Exit For End If End If ....... .......
Étant débutant, je ne maitrise pas la fonction union
If plage.Rows.Count >= nb Then
If plage.Rows.Count >= nb * 2 Then
c'est assez simple à mettre en oeuvre dès lors que la colonne qui contient ces valeurs est triée (est-ce bien le cas ?), que dans chaque groupe, le nombre de valeurs est > 4 (est-ce toujours le cas ?)