Microsoft 365 next cell dans une zone filtrée

thenesol

XLDnaute Junior
bonjour à tous

dans cet extrait de code, avec un tableau filtré
je n'arrive pas à écrire string2 pour qu'il prenne la même chose que string1, avec la ligne "suivante" du tableau mais en restant dans la zone filtrée

je suppose qu'il faut utiliser "SpecialCells(xlCellTypeVisible)" pour string2, mais je ne sais pas où le caser.


VB:
Set rng = tbl.ListColumns("date").DataBodyRange.SpecialCells(xlCellTypeVisible)
For Each cell In rng
            string1 = cell.Value
            string2 = cell.Offset(1, 0).Value
 Next cell

quelqu'un peut m'aider ?
merci...
 
Dernière édition:

crocrocro

XLDnaute Occasionnel
bonjour thenesol,
voici ma proposition, ici pour un tableau nommé "Tableau1". Il y a probablement des solutions plus élégantes.
Le debug.print pour visualiser le résultat.
Une remarque : d'après votre code, vous souhaitez valoriser string2 juste après string1, ce qui laisse supposer que vous avez ducode (non présenté ici) qui "joue" avec string 1 et string 2)
VB:
Sub test()
    Set Rng = ActiveSheet.ListObjects("Tableau1").DataBodyRange.SpecialCells(xlCellTypeVisible)
    PremLig = ActiveSheet.ListObjects("Tableau1").DataBodyRange.Row
    DernLig = ActiveSheet.ListObjects("Tableau1").DataBodyRange.Rows.Count + PremLig - 1

    For Each cell In Rng
        string1 = cell.Value
        Debug.Print "string1 " & string1
        string2 = ""
        fin = False
        i = 1
        While Not fin
            If Rows(cell.Offset(i, 0).Row).Hidden = False Then
                fin = True
                string2 = cell.Offset(i, 0).Value
            End If
            i = i + 1
            If i > DernLig Then
                fin = True
            End If
        Wend
        Debug.Print "string2 " & string2

     Next cell

End Sub
 

ChTi160

XLDnaute Barbatruc
Bonjour le Fil
Pas sûr d'avoir compris Lol
Mais si le but est de récupérer les données des Lignes Visibles !
Alors après avoir vérifié qu'il y a des données visibles
ex : avec
Code:
If TableauStructure.DataBodyRange.SpecialCells(xlCellTypeVisible).Areas.Count >= 1 Then
ou
Code:
If Not TableauStructure.DataBodyRange.Height = 0 Then
il y a d'autres méthodes.
VB:
Dim VisibleRange As Range
Dim area
x=0
 Set VisibleRange = TableauStructure.DataBodyRange.SpecialCells(xlCellTypeVisible)
For Each area In visibleRange.Areas 'On boucle sur les zones du Filtre
    For Each Ligne In area.Rows 'On boucle sur les Lignes de chaque Zone du Filtre
          x = x + 1
         For Col = 1 To 4 'On va récupérer dans l'exemple les 4 valeurs des Quatre colonnes de la Ligne visible
              TabRecup(1 + Col, x) = Ligne.Cells(1, Col).Value
    Next
Next
N'hésite pas si besoin !
Bonne fin de Journée
Jean marie
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 241
Membres
103 162
dernier inscrit
fcfg