Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA Excel : Sélectionner toutes et que les lignes visibles d'une zone filtrée?

6 réponses
Avatar
Jean-Marc
Bonsoir,

en VBA (Excel 2003)
je filtre une zone, puis sélectionne toutes les lignes que je veux supprimer

Exemple : je veux supprimer toutes les références qui commencent par un B :

Selection.AutoFilter Field:=1, Criteria1:="=B*"
Range("A3").Select ' ligne des entetes de colonne

puis, et c'est là mon problème, je veux me positionner sur la première ligne
sélectionnée

ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select ' ne marche que
si la première ligne est sélectionnée, sinon j'efface des lignes bonnes

Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp

Merci d'avance pour vos réponses

Cdt

Jean-Marc

6 réponses

Avatar
LSteph
Bonsoir;

sais-tu que le select n'est pas nécessaire?

Sub virBtruc()

Dim i As Long
Application.ScreenUpdating = False
For i = [a65536].End(xlUp).Row To 3 Step -1
If UCase(Left(Cells(i, 1), 1)) = "B" Then
Rows(i).EntireRow.Delete
End If
Next
End Sub

'lSteph


Jean-Marc a écrit :
Bonsoir,

en VBA (Excel 2003)
je filtre une zone, puis sélectionne toutes les lignes que je veux supprimer

Exemple : je veux supprimer toutes les références qui commencent par un B :

Selection.AutoFilter Field:=1, Criteria1:="=B*"
Range("A3").Select ' ligne des entetes de colonne

puis, et c'est là mon problème, je veux me positionner sur la première ligne
sélectionnée

ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select ' ne marche que
si la première ligne est sélectionnée, sinon j'efface des lignes bonnes

Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp

Merci d'avance pour vos réponses

Cdt

Jean-Marc




Avatar
StDonat
Bonsoir
En effet en vba cela ne fonctionne pas ainsi
essaye cela
Function premiere_ligne()
With ActiveSheet.AutoFilter.Range.Columns(3)
adr = .Cells(3).Address
Set C = .Columns(3).Find("*")
End With
premiere_ligne = C.Row
End Function

"Jean-Marc" wrote:

Bonsoir,

en VBA (Excel 2003)
je filtre une zone, puis sélectionne toutes les lignes que je veux supprimer

Exemple : je veux supprimer toutes les références qui commencent par un B :

Selection.AutoFilter Field:=1, Criteria1:="=B*"
Range("A3").Select ' ligne des entetes de colonne

puis, et c'est là mon problème, je veux me positionner sur la première ligne
sélectionnée

ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select ' ne marche que
si la première ligne est sélectionnée, sinon j'efface des lignes bonnes

Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp

Merci d'avance pour vos réponses

Cdt

Jean-Marc





Avatar
Jean-Marc
Merci beaucoup Steph,
Cela marche, mais j'ai une dizaine de critères.
Cela fait 10 boucles
Alors même avec le ScreenUpdating = False, cela prends du temps
Il n'y a pas un moyen de ne sélectionner que les cellules visibles?

Cdt
Jean-Marc
"LSteph" a écrit dans le message de news:

Bonsoir;

sais-tu que le select n'est pas nécessaire?

Sub virBtruc()

Dim i As Long
Application.ScreenUpdating = False
For i = [a65536].End(xlUp).Row To 3 Step -1
If UCase(Left(Cells(i, 1), 1)) = "B" Then
Rows(i).EntireRow.Delete
End If
Next
End Sub

'lSteph


Jean-Marc a écrit :
Bonsoir,

en VBA (Excel 2003)
je filtre une zone, puis sélectionne toutes les lignes que je veux
supprimer

Exemple : je veux supprimer toutes les références qui commencent par un B
:

Selection.AutoFilter Field:=1, Criteria1:="=B*"
Range("A3").Select ' ligne des entetes de colonne

puis, et c'est là mon problème, je veux me positionner sur la première
ligne sélectionnée

ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select ' ne marche
que si la première ligne est sélectionnée, sinon j'efface des lignes
bonnes

Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp

Merci d'avance pour vos réponses
Cdt
Jean-Marc




Avatar
LSteph
Range("a4",[a65536].End(xlUp).Address).SpecialCells(xlCellTypeVisible).EntireRow.Delete

Jean-Marc a écrit :
Merci beaucoup Steph,
Cela marche, mais j'ai une dizaine de critères.
Cela fait 10 boucles
Alors même avec le ScreenUpdating = False, cela prends du temps
Il n'y a pas un moyen de ne sélectionner que les cellules visibles?

Cdt
Jean-Marc
"LSteph" a écrit dans le message de news:

Bonsoir;

sais-tu que le select n'est pas nécessaire?

Sub virBtruc()

Dim i As Long
Application.ScreenUpdating = False
For i = [a65536].End(xlUp).Row To 3 Step -1
If UCase(Left(Cells(i, 1), 1)) = "B" Then
Rows(i).EntireRow.Delete
End If
Next
End Sub

'lSteph


Jean-Marc a écrit :
Bonsoir,

en VBA (Excel 2003)
je filtre une zone, puis sélectionne toutes les lignes que je veux
supprimer

Exemple : je veux supprimer toutes les références qui commencent par un B
:

Selection.AutoFilter Field:=1, Criteria1:="=B*"
Range("A3").Select ' ligne des entetes de colonne

puis, et c'est là mon problème, je veux me positionner sur la première
ligne sélectionnée

ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select ' ne marche
que si la première ligne est sélectionnée, sinon j'efface des lignes
bonnes

Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp

Merci d'avance pour vos réponses
Cdt
Jean-Marc








Avatar
Jean-Marc
Super,

Merci à Steph et à StDonat pour vos réponses
Comme quoi, plusieurs manières pour arriver au résultat
J Marc

"LSteph" a écrit dans le message de news:


Range("a4",[a65536].End(xlUp).Address).SpecialCells(xlCellTypeVisible).EntireRow.Delete




Jean-Marc a écrit :
Merci beaucoup Steph,
Cela marche, mais j'ai une dizaine de critères.
Cela fait 10 boucles
Alors même avec le ScreenUpdating = False, cela prends du temps
Il n'y a pas un moyen de ne sélectionner que les cellules visibles?

Cdt
Jean-Marc
"LSteph" a écrit dans le message de news:

Bonsoir;

sais-tu que le select n'est pas nécessaire?

Sub virBtruc()

Dim i As Long
Application.ScreenUpdating = False
For i = [a65536].End(xlUp).Row To 3 Step -1
If UCase(Left(Cells(i, 1), 1)) = "B" Then
Rows(i).EntireRow.Delete
End If
Next
End Sub

'lSteph


Jean-Marc a écrit :
Bonsoir,

en VBA (Excel 2003)
je filtre une zone, puis sélectionne toutes les lignes que je veux
supprimer

Exemple : je veux supprimer toutes les références qui commencent par un
B :

Selection.AutoFilter Field:=1, Criteria1:="=B*"
Range("A3").Select ' ligne des entetes de colonne

puis, et c'est là mon problème, je veux me positionner sur la première
ligne sélectionnée

ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select ' ne
marche que si la première ligne est sélectionnée, sinon j'efface des
lignes bonnes

Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp

Merci d'avance pour vos réponses
Cdt
Jean-Marc









Avatar
Hervé
Bonjour à toutes et tous,
Une de plus et assez rapide, à tester.
Le critère est inscrit en cellule B1 (à modifier si nécessaire), un bouton
issus de la barre formulaire et posé sur la feuille facilite la manoeuvre.

Sub Supprimer()
Dim Plage As Range
Dim Cellule As Range
Dim Precedante As Range
Dim Adresse As String

'adapter le nom de la feuille et la plage
'ici colonne A
With Worksheets("Feuil1")
Set Plage = .Range(.[A1], .[A65536].End(xlUp))
End With
'changer B1 (laisser les 2 "[]") si l'adresse
'de la cellule contenant le critère est autre
Set Cellule = Plage.Find([B1], , xlValues)
If Not Cellule Is Nothing Then
Adresse = Cellule.Offset(-1, 0).Address
On Error Resume Next
Do
Set Precedante = Cellule.Offset(-1, 0)
Cellule.EntireRow.Delete
Set Cellule = Plage.FindNext(Precedante)
Loop While Cellule.Address <> Adresse
End If

Set Plage = Nothing
Set Cellule = Nothing
Set Precedante = Nothing
End Sub

Hervé.

"Jean-Marc" a écrit dans le message de
news: 48de9ffa$0$871$
Bonsoir,

en VBA (Excel 2003)
je filtre une zone, puis sélectionne toutes les lignes que je veux
supprimer

Exemple : je veux supprimer toutes les références qui commencent par un B
:

Selection.AutoFilter Field:=1, Criteria1:="=B*"
Range("A3").Select ' ligne des entetes de colonne

puis, et c'est là mon problème, je veux me positionner sur la première
ligne sélectionnée

ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select ' ne marche
que si la première ligne est sélectionnée, sinon j'efface des lignes
bonnes

Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp

Merci d'avance pour vos réponses

Cdt

Jean-Marc