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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <rde@intras.ch> a écrit dans le message de news:
EEE4C363-8E5A-4910-9E2D-C8998A8D0D7B@microsoft.com...
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
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
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
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" <rde@intras.ch> a écrit dans le message de news:
EEE4C363-8E5A-4910-9E2D-C8998A8D0D7B@microsoft.com...
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
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
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à!
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à!
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à!