Boucle sur cellules filtrées

Le
DoMi
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 !
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
DanielCo
Le #25077762
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 !
Jacquouille
Le #25077892
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 !
DoMi
Le #25078112
On 21 déc, 12:08, 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 !




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
Publicité
Poster une réponse
Anonyme