Aller directement d'une ligne visible à une autre.

Aller directement d'une ligne visible à une autre. - VB/VBA/VBS - Programmation

Marsh Posté le 26-11-2010 à 21:46:39    

Merci Xxxaaavvv pour tes orientations qui m'ont été utiles et m'ont permis d'avancer.
 
Je joins un extrait d'une base de données test que j'ai dans un onglet Excel. Mon tableau est filtré et n'apparaissent à l'écran que les lignes visibles.
Avec ma programmation, le curseur se positionne automatiquement sur la dernière cellule visible de mon tableau (C'est déjà bien !). Mais ensuite, je n'arrive pas à sélectionner directement par programmation la première nouvelle ligne supérieure visible. En effet, les lignes masquées sont lues également ce qui ralentira l'exécution du programme sur un tableau beaucoup plus important.
 
Voici mon extrait de code Vba pour Excel 2003 :
 
Sub SelectionLignesVisiblesUniquement()
 
Dim f As Integer
 
' Retrouve la dernière cellule.
 
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate
 
MsgBox "La sélection en cours correspond à : " & ActiveCell.Value, vbInformation
 
    For f = 1 To 31 'Boucles max dans mon tableau.
         
        If ActiveSheet.Rows(ActiveCell.Row).EntireRow.Hidden = False Then  'Ligne non cachée.
            MsgBox "La ligne active " & ActiveCell.Row & " n'est pas cachée !", vbExclamation
            ActiveCell.Offset(-1, 0).Select
                     
        ElseIf ActiveSheet.Rows(ActiveCell.Row).EntireRow.Hidden = True Then
            'MsgBox "Ligne cachée à ne pas lire !" & Chr(10) & "DECALER VERS LE HAUT !"
            ActiveCell.Offset(-1, 0).Select
             
        End If
         
    Next f
     
End
 
Donc, par quel code je dois remplacer :  
selection.offset(-1,0).select
pour que la prochaine ligne visible soit automatiquement sélectionnée, sans le moindre passage des boucles sur mes lignes masquées ?
 
Merci d'avance.
 
 
 
 

Reply

Marsh Posté le 26-11-2010 à 21:46:39   

Reply

Marsh Posté le 03-12-2010 à 06:48:19    

Bonjour,
tu devrais pouvoir t'inspirer de ceci:
 

Code :
  1. Sub celvid()
  2. Application.ScreenUpdating = False
  3. Range("A1", Range("A65536" ).End(xlUp)).Select
  4. 'on place dans un tableau les N° de lignes visibles
  5. Dim Tablo As New Collection, cellule As Range
  6. For Each cellule In Selection.SpecialCells(xlCellTypeVisible)
  7. On Error Resume Next
  8. Tablo.Add cellule.Row, CStr(cellule.Row)
  9. Next
  10. 'on reprend les N° de lignes depuis la fin du tableau
  11. For i = Tablo.Count To 0 Step -1
  12. 'placer ici le traitement désiré et supprimer le msgbox
  13. MsgBox Tablo(i)
  14. Next
  15. Application.ScreenUpdating = True
  16. End Sub


 
 
 
cordialement


Message édité par seniorpapou le 03-12-2010 à 06:52:07
Reply

Marsh Posté le 04-12-2010 à 12:04:40    

Merci seniorpapou
 
Je vais le tester dans mon application. Dès que possible je te dirai si c'est ok.
Cordialement.
A+.

Reply

Marsh Posté le 13-12-2010 à 22:08:11    

Merci infiniment SeniorPapou.
 
Ton orientation est la bonne. J'ai cherché un peu mais j'ai réussi à n'accéder qu'aux données filtrées, dans un temps d'exécution record ! Quand j'ai réussi à coder les bonnes variables, cela a été ok et je n'ai plus qu'à intégrer mon travail dans un code plus volumineux.
Je devrais y arriver.
 
Merci encore pour ta collaboration.
 
Cordialement.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed