OVH Cloud OVH Cloud

Supprimer des lignes par une boucle

3 réponses
Avatar
RENAUD Eric
Bonjour,

Je souhaite supprimer des lignes pour lesquelles la valeur est de 99* dans
la colonne A.
Je peux par exemple mettre par VBA un libellé "A sup" dans une colonne,
filtrer les " A sup" puis supprimer ces lignes.

Peut-être exite t'il une solution + simple
J'ai commencé par ce code mais dès qu'il suprime une ligne, le For each
n'est plus d'actualité.

Sub Test()
Range("A1").CurrentRegion.Select
With Selection.CurrentRegion
Intersect(.Cells, .Offset(1)).Select
End With
For Each Cell In Selection
If Left(Cell.Value, 2) = "99" Then
NoLgn = Cell.Row
Cell.Offset(0, 1) = "A sup"
' Rows(NoLgn & ":" & NoLgn).Select ----> C'est ici que le PG perd
le fil
Else
End If
Next Cell
End Sub

D'avance merci

3 réponses

Avatar
benoit.lazzarotto
Il faut que tu privilégies le filtre automatique, car même en sachant
des macros rapidement, ce sera la méthode la plus pratique.

Sinon,
tu peux faire
If ActiveCell = 99 Then
ActiveCell.EntireRow.Select
Selection.delete shift:=xlup
Else: ActiveCell.Offset(1, 0).Select
End If

si tu mets ctrl + m par exemple pour mettre en route la macro, reste
appuyé dessus jusqu'au bout du tableau et voilà
Avatar
MichDenis
Il y a ceci :

Attention si le contenu de tes cellules est numérique
utilise ceci comme critère : Criteria1:=">=" & 99

'-------------------------------
Sub Test()
With Worksheets("Feuil1") ' Nom de la feuille à déterminer
With Range("A1").CurrentRegion
.AutoFilter field:=1, Criteria1:="99*"
.Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
.AutoFilter
End With
End With
End Sub
'-------------------------------



"RENAUD Eric" <erenaud(retirerceci)@fr.fm> a écrit dans le message de news:

Bonjour,

Je souhaite supprimer des lignes pour lesquelles la valeur est de 99* dans
la colonne A.
Je peux par exemple mettre par VBA un libellé "A sup" dans une colonne,
filtrer les " A sup" puis supprimer ces lignes.

Peut-être exite t'il une solution + simple
J'ai commencé par ce code mais dès qu'il suprime une ligne, le For each
n'est plus d'actualité.

Sub Test()
Range("A1").CurrentRegion.Select
With Selection.CurrentRegion
Intersect(.Cells, .Offset(1)).Select
End With
For Each Cell In Selection
If Left(Cell.Value, 2) = "99" Then
NoLgn = Cell.Row
Cell.Offset(0, 1) = "A sup"
' Rows(NoLgn & ":" & NoLgn).Select ----> C'est ici que le PG perd
le fil
Else
End If
Next Cell
End Sub

D'avance merci
Avatar
Daniel
Bonjour.
Si tu ne veux pas de filtre, essaie :

Sub test()
Dim c As Range, x As Range
Set c = Range("A:A").Find("99*", , , xlWhole)
Do While Not c Is Nothing
c.EntireRow.Delete
Set c = Range("A:A").Find("99*", , , xlWhole)
Loop
End Sub

Cordialement.
Daniel

"RENAUD Eric" <erenaud(retirerceci)@fr.fm> a écrit dans le message de news:

Bonjour,

Je souhaite supprimer des lignes pour lesquelles la valeur est de 99* dans
la colonne A.
Je peux par exemple mettre par VBA un libellé "A sup" dans une colonne,
filtrer les " A sup" puis supprimer ces lignes.

Peut-être exite t'il une solution + simple
J'ai commencé par ce code mais dès qu'il suprime une ligne, le For each
n'est plus d'actualité.

Sub Test()
Range("A1").CurrentRegion.Select
With Selection.CurrentRegion
Intersect(.Cells, .Offset(1)).Select
End With
For Each Cell In Selection
If Left(Cell.Value, 2) = "99" Then
NoLgn = Cell.Row
Cell.Offset(0, 1) = "A sup"
' Rows(NoLgn & ":" & NoLgn).Select ----> C'est ici que le PG
perd le fil
Else
End If
Next Cell
End Sub

D'avance merci