OVH Cloud OVH Cloud

Compteur dans boucle FOR...NEXT

7 réponses
Avatar
JF
Bonjour

Je souhaite dans une feuille EXCEL supprimer toutes les lignes qui
comprennent en colonne C l'occurence "toto":

Voici ce que j'ai =E9crit:

For i =3D 2 To c
Cells(i, 3).Select

If Selection =3D "toto" Then
ActiveCell.EntireRow.Select
Selection.delete Shift:=3DxlUp
Else: ActiveCell.Offset(1, 0).Select
End If
Next i

Mon probl=E8me, c'est que lorsque la macro trouve "toto" en C4 par
exemple, elle supprime toute la ligne et passe ensuite =E0 la ligne 5.
Or avec la suppression, toute les lignes en dessous remontent d'un
cran, donc finalement la cellule C4 peut une fois encore comprendre
"toto", mais avec la boucle, je suis d=E9j=E0 pass=E9e =E0 la ligne 5.
Et ainsi, beaucoup de lignes "toto" restent dans le fichier au lieu
d'=EAtre supprim=E9es.

Merci de votre aide

7 réponses

Avatar
Pounet95
Bonsoir,
Sans voir plus loin ce que fait le code joint, je dirai que dans un tel cas
de figure,
faire la boucle à l'envers

For i = c to 2 step-1

Bonne soirée
--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"JF" a écrit dans le message de news:

Bonjour

Je souhaite dans une feuille EXCEL supprimer toutes les lignes qui
comprennent en colonne C l'occurence "toto":

Voici ce que j'ai écrit:

For i = 2 To c
Cells(i, 3).Select

If Selection = "toto" Then
ActiveCell.EntireRow.Select
Selection.delete Shift:=xlUp
Else: ActiveCell.Offset(1, 0).Select
End If
Next i

Mon problème, c'est que lorsque la macro trouve "toto" en C4 par
exemple, elle supprime toute la ligne et passe ensuite à la ligne 5.
Or avec la suppression, toute les lignes en dessous remontent d'un
cran, donc finalement la cellule C4 peut une fois encore comprendre
"toto", mais avec la boucle, je suis déjà passée à la ligne 5.
Et ainsi, beaucoup de lignes "toto" restent dans le fichier au lieu
d'être supprimées.

Merci de votre aide
Avatar
Michel Gaboly
Bien sûr ;-))

En commençant par la dernière ligne, les lignes supprimées n'ont + d'incidence sur les numéros des lignes restantes.


Cependant, pour le cas où il y a beaucoup de lignes, on peut envisager une autre méthode :

1 - On insére une colonne dans laquelle sur toute la plage utile on num érote les lignes (avec Edition/Recopier/Série),
pas avec la formule =LIGNE(), ou alors il faut faire ensuite un Copier/ Collage spécial Valeurs.

2 - On trie avec comme clef la colonne contenant les "Toto".

3 - Toutes les lignes à supprimer étant groupées puisque contenant toutes "Toto" dans la colonne sur laquelle le tri a
été basé, il est facile de toutes les supprimer à la fois.

4 - On refait un tri sur la colonne ajoutée (c'est pourquoi il ne faut pas avoir des =LIGNE(), car le résultat aurait
été recalculé lors du tri. Cela rétablit l'ordre initial.

5 - On supprime la colonne insérée.


Si l'opération est ponctuelle, il n'est même + nécessaire d'écrir e une macro, car faire manuellement les 5 opérations
décrites prend moins de temps que l'écriture de la macro et son exé cution.



Bonsoir,
Sans voir plus loin ce que fait le code joint, je dirai que dans un tel
cas de figure,
faire la boucle à l'envers

For i = c to 2 step-1

Bonne soirée



--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
Pounet95
Bonsoir Michel,

A la façon de Dupont et Dupond, je dirai même plus :
Peut-être qu'un filtre élaboré du genre "contient toto" puis suppression
des lignes affichées devrait aussi convenir, non ?
En deux temps, trois mouvements, sans VBA, ça marche.

Qu'en penses-tu ?

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Michel Gaboly" a écrit dans le message de news:

Bien sûr ;-))

En commençant par la dernière ligne, les lignes supprimées n'ont +
d'incidence sur les numéros des lignes restantes.


Cependant, pour le cas où il y a beaucoup de lignes, on peut envisager une
autre méthode :

1 - On insére une colonne dans laquelle sur toute la plage utile on numérote
les lignes (avec Edition/Recopier/Série),
pas avec la formule =LIGNE(), ou alors il faut faire ensuite un
Copier/Collage spécial Valeurs.

2 - On trie avec comme clef la colonne contenant les "Toto".

3 - Toutes les lignes à supprimer étant groupées puisque contenant toutes
"Toto" dans la colonne sur laquelle le tri a
été basé, il est facile de toutes les supprimer à la fois.

4 - On refait un tri sur la colonne ajoutée (c'est pourquoi il ne faut pas
avoir des =LIGNE(), car le résultat aurait
été recalculé lors du tri. Cela rétablit l'ordre initial.

5 - On supprime la colonne insérée.


Si l'opération est ponctuelle, il n'est même + nécessaire d'écrire une
macro, car faire manuellement les 5 opérations
décrites prend moins de temps que l'écriture de la macro et son exécution.



Bonsoir,
Sans voir plus loin ce que fait le code joint, je dirai que dans un tel
cas de figure,
faire la boucle à l'envers

For i = c to 2 step-1

Bonne soirée



--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
JB
Bonjour,


Range("C2").Select
Do While ActiveCell <> ""
If ActiveCell = "toto" Then
ActiveCell.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Loop

JB
Avatar
Michel Gaboly
Tu as raison ;-))

Bonsoir Michel,

A la façon de Dupont et Dupond, je dirai même plus :
Peut-être qu'un filtre élaboré du genre "contient toto" puis supp ression
des lignes affichées devrait aussi convenir, non ?
En deux temps, trois mouvements, sans VBA, ça marche.

Qu'en penses-tu ?




--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
Pounet95
Bonjour,
... et je dirais même plus encore car je viens de me rendre compte que
c'était d'un filtre automatique
( donc plus aisé à mettre en oeuvre ! ) dont je voulais parler.

Bonne journée

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Pounet95" a écrit dans le message de news:
%
Bonsoir Michel,

A la façon de Dupont et Dupond, je dirai même plus :
Peut-être qu'un filtre élaboré du genre "contient toto" puis suppression
des lignes affichées devrait aussi convenir, non ?
En deux temps, trois mouvements, sans VBA, ça marche.

Qu'en penses-tu ?

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"Michel Gaboly" a écrit dans le message de
news:
Bien sûr ;-))

En commençant par la dernière ligne, les lignes supprimées n'ont +
d'incidence sur les numéros des lignes restantes.


Cependant, pour le cas où il y a beaucoup de lignes, on peut envisager une
autre méthode :

1 - On insére une colonne dans laquelle sur toute la plage utile on
numérote les lignes (avec Edition/Recopier/Série),
pas avec la formule =LIGNE(), ou alors il faut faire ensuite un
Copier/Collage spécial Valeurs.

2 - On trie avec comme clef la colonne contenant les "Toto".

3 - Toutes les lignes à supprimer étant groupées puisque contenant toutes
"Toto" dans la colonne sur laquelle le tri a
été basé, il est facile de toutes les supprimer à la fois.

4 - On refait un tri sur la colonne ajoutée (c'est pourquoi il ne faut pas
avoir des =LIGNE(), car le résultat aurait
été recalculé lors du tri. Cela rétablit l'ordre initial.

5 - On supprime la colonne insérée.


Si l'opération est ponctuelle, il n'est même + nécessaire d'écrire une
macro, car faire manuellement les 5 opérations
décrites prend moins de temps que l'écriture de la macro et son exécution.



Bonsoir,
Sans voir plus loin ce que fait le code joint, je dirai que dans un tel
cas de figure,
faire la boucle à l'envers

For i = c to 2 step-1

Bonne soirée



--
Cordialement,

Michel Gaboly
www.gaboly.com



Avatar
JF
merci à tous