OVH Cloud OVH Cloud

Déplacement dans un tableau filtré

3 réponses
Avatar
René Delcourt
Bonjour,

Dans une application, je voyage (par VBA) dans un tableau filtré.
Le no des lignes peut donc être : 1,2,3,6,7,10
La procédure consiste à se déplacer avec un offset...qui tient compte des
lignes non affichées(4,5,8,9).
J'ai essayé application.sendkeys("{UP}") mais sans succès.
Avez-vous une autre solution à ce probléme?
Merci déjà!
--
René Delcourt

3 réponses

Avatar
Daniel
Bonjour.
Il y a sans doute plus malin mais le code suivant fonctionne :

Sub test()
Dim Plage As Range
ActiveCell.Offset(1, 0).Select
Do While ActiveCell.EntireRow.Hidden = True
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Cordialement.
Daniel
"René Delcourt" a écrit dans le message de news:

Bonjour,

Dans une application, je voyage (par VBA) dans un tableau filtré.
Le no des lignes peut donc être : 1,2,3,6,7,10
La procédure consiste à se déplacer avec un offset...qui tient compte des
lignes non affichées(4,5,8,9).
J'ai essayé application.sendkeys("{UP}") mais sans succès.
Avez-vous une autre solution à ce probléme?
Merci déjà!
--
René Delcourt


Avatar
René Delcourt
Personnellement, je trouve cela très malin puisque ça fonctionne.
Merci beaucoup.
--
René Delcourt



Bonjour.
Il y a sans doute plus malin mais le code suivant fonctionne :

Sub test()
Dim Plage As Range
ActiveCell.Offset(1, 0).Select
Do While ActiveCell.EntireRow.Hidden = True
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Cordialement.
Daniel
"René Delcourt" a écrit dans le message de news:

Bonjour,

Dans une application, je voyage (par VBA) dans un tableau filtré.
Le no des lignes peut donc être : 1,2,3,6,7,10
La procédure consiste à se déplacer avec un offset...qui tient compte des
lignes non affichées(4,5,8,9).
J'ai essayé application.sendkeys("{UP}") mais sans succès.
Avez-vous une autre solution à ce probléme?
Merci déjà!
--
René Delcourt







Avatar
anonymousA
Bonjour,

il y a aussi ces 2 possibilités pour descendre directement sur une ligne
affichée d'une plage filtrée. Dans les 2 cas, ces procédures évitent de
devoir parcourir eventuellement une longue palge de ligne cachées par un
do avec un select ce qui selon le nombre d'items peut ralentir le processus.


Sub descendre_dune_ligne_suite_à_filtre()

Dim plagevisible As Range, A As Long, plg As Range

On Error GoTo errhandler
Set plagevisible = Range("_FilterDatabase").SpecialCells(xlCellTypeVisible)
On Error GoTo 0

A = 1

For Each plg In plagevisible.Areas

If Not Intersect(ActiveCell, plg) Is Nothing Then
With plg
If .Rows.Count > 1 Then
If ActiveCell.Row >= .Rows(1).Row And ActiveCell.Row <
.Rows(.Rows.Count).Row Then
ActiveCell.Offset(1, 0).Activate
Exit Sub
ElseIf ActiveCell.Row = .Rows(.Rows.Count).Row Then
On Error Resume Next
plagevisible.Areas(A +
1).Rows(1).Cells(ActiveCell.Column).Activate
If Err Then
Cells(Range("_FilterDatabase").Rows.Count + 1, ActiveCell.Column).Activate
Exit Sub
End If
Else
On Error Resume Next
plagevisible.Areas(A +
1).Rows(1).Cells(ActiveCell.Column).Activate
If Err Then Cells(Range("_FilterDatabase").Rows.Count +
1, ActiveCell.Column).Activate
Exit Sub
End If
End With
End If

A = A + 1
Next

MsgBox "la cellule active n'appartient pas à la plage filtrée"
Exit Sub

errhandler:
MsgBox "Il n'y a pas de résultat au filtre"

End Sub
Sub descendre_dune_ligne_suite_à_filtre_version2()
Dim rng As Range, Rng1 As Range
Dim iCol As Long

iCol = ActiveCell.Column
Set rng = ActiveSheet.AutoFilter.Range
Set rng = Intersect(rng, Columns(iCol))

If rng Is Nothing Then Exit Sub

Set rng = Range(ActiveCell.Offset(1, iCol - ActiveCell.Column),
rng(rng.Count))
rng.Select
On Error Resume Next
Set Rng1 = rng.SpecialCells(xlVisible)
Rng1.Select
On Error GoTo 0

If Not Rng1 Is Nothing Then
Rng1(1).Select
End If
End Sub

A+

Bonjour,

Dans une application, je voyage (par VBA) dans un tableau filtré.
Le no des lignes peut donc être : 1,2,3,6,7,10
La procédure consiste à se déplacer avec un offset...qui tient compte des
lignes non affichées(4,5,8,9).
J'ai essayé application.sendkeys("{UP}") mais sans succès.
Avez-vous une autre solution à ce probléme?
Merci déjà!