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

Boucle sur cellules filtrées

3 réponses
Avatar
DoMi
Bonjour,

Je fais un traitement sur une plage de cellules filtr=E9es par une
boucle :

For Each c In Columns("A").Rows
If Not c.EntireRow.Hidden Then

' ici mon traitement

Or le traitement peut d=E9truire la ligne.
Dans ce cas le curseur se retrouve sur la ligne suivante, et la boucle
fait passer =E0 la suivante. Donc si 2 lignes qui se suivent ne sont
pas cach=E9es, la 2e n'est pas trait=E9e.
Comment faire ?

Merci pour votre aide !
DoMi

PS : en faisant une recherhe sur "cellules filtr=E9es" je tombe sur des
demandes similaires que j'ai faites... en 2003 ! J'ai de la suite dans
les id=E9es !

3 réponses

Avatar
DanielCo
Bonjour,

For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
If Cells(i, 1).hiddden Then
'ton traitement
End If
Next i

Cordialement.
Daniel


Bonjour,

Je fais un traitement sur une plage de cellules filtrées par une
boucle :

For Each c In Columns("A").Rows
If Not c.EntireRow.Hidden Then

' ici mon traitement

Or le traitement peut détruire la ligne.
Dans ce cas le curseur se retrouve sur la ligne suivante, et la boucle
fait passer à la suivante. Donc si 2 lignes qui se suivent ne sont
pas cachées, la 2e n'est pas traitée.
Comment faire ?

Merci pour votre aide !
DoMi

PS : en faisant une recherhe sur "cellules filtrées" je tombe sur des
demandes similaires que j'ai faites... en 2003 ! J'ai de la suite dans
les idées !
Avatar
Jacquouille
Bonjour
Daniel a été plus rapide que moi (et meilleur)
Dans ce genre de situation, lorsque l'on fait une boucle et que l'on
"détruit" une ligne, Excel passe à la suivante... ce qui est logique. Donc,
la 5 devient la 4. Or, la 4 vient d'être traitée ...
Donc, Excel a un raté bien logique.
C'est en fonction de cela que les "Grands" (ils me l'ont appris) prônent de
commencer le test par la dernière ligne et de remonter la colonne avec le
Step -1; tout cela, illustré par cette ligne de Daniel:
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1




Bonne journée

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"DoMi" a écrit dans le message de groupe de discussion :


Bonjour,

Je fais un traitement sur une plage de cellules filtrées par une
boucle :

For Each c In Columns("A").Rows
If Not c.EntireRow.Hidden Then

' ici mon traitement

Or le traitement peut détruire la ligne.
Dans ce cas le curseur se retrouve sur la ligne suivante, et la boucle
fait passer à la suivante. Donc si 2 lignes qui se suivent ne sont
pas cachées, la 2e n'est pas traitée.
Comment faire ?

Merci pour votre aide !
DoMi

PS : en faisant une recherhe sur "cellules filtrées" je tombe sur des
demandes similaires que j'ai faites... en 2003 ! J'ai de la suite dans
les idées !
Avatar
DoMi
On 21 déc, 12:08, DanielCo wrote:
Bonjour,

For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Cells(i, 1).hiddden Then
        'ton traitement
    End If
Next i

Cordialement.
Daniel



> Bonjour,

> Je fais un traitement sur une plage de cellules filtrées par une
> boucle :

> For Each c In Columns("A").Rows
>     If Not c.EntireRow.Hidden Then

> ' ici mon traitement

> Or le traitement peut détruire la ligne.
> Dans ce cas le curseur se retrouve sur la ligne suivante, et la boucle
> fait  passer à la suivante. Donc si 2 lignes qui se suivent ne sont
> pas cachées, la 2e n'est pas traitée.
> Comment faire ?

> Merci pour votre aide !
> DoMi

> PS : en faisant une recherhe sur "cellules filtrées" je tombe sur des
> demandes similaires que j'ai faites... en 2003 ! J'ai de la suite dans
> les idées !




En fait, il faut traiter le problème à l'envers ! ;-)
Mais comme je traite les cellules non cachées, il faut:
If Not Cell(i, 1).Hidden then
...

Merci !
DoMi