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

macro supp

16 réponses
Avatar
zimou
Bonjour,
je suis =E0 la recherche d'une macro pour supprimer toutes les lignes
qui ne conti=E8nnent pas un crit=E8re exp; je veux suuprimer toutes les
lignes dont la colone D< 900
merci

10 réponses

1 2
Avatar
Philippe.R
Bonjour,

sub suplignes()
'MPFE le 12/08/2007
'Supprime toutes les lignes de la feuille active si le contenu de la colonne
d
' en regard est numérique et <900
dim zLiG as long
zLiG=range("a2345").end(xlup).row
for each c in range("a1:a"&zlig)
if isnumeric (cells(c.row,4).value) and cells(c.row,4).value<900 then
c.entirerow.delete
endif
next c

à tester sur une copie de la feuille
--
Avec plaisir
Philippe.R
"zimou" a écrit dans le message de
news:
Bonjour,
je suis à la recherche d'une macro pour supprimer toutes les lignes
qui ne contiènnent pas un critère exp; je veux suuprimer toutes les
lignes dont la colone D< 900
merci
Avatar
R1
"Philippe.R" <AS_rauphil_at_wanadoo.fr> wrote:

Bonjour,

sub suplignes()
'MPFE le 12/08/2007
'Supprime toutes les lignes de la feuille active si le contenu de la
colonne d
' en regard est numérique et <900
dim zLiG as long
zLiG=range("a2345").end(xlup).row
for each c in range("a1:a"&zlig)
if isnumeric (cells(c.row,4).value) and cells(c.row,4).value<900 then
c.entirerow.delete
endif
next c

à tester sur une copie de la feuille


On m'avait suggéré, en pareille situation, pour gagner du temps, de
parcourir la boucle for à l'envers (du bas vers le haut). Qu'en
pensez-vous? Comment adapter cela au "for each in"?

Avatar
Philippe.R
Bonjour,
Très juste, R1

sub suplignes()
'MPFE le 12/08/2007
'Supprime toutes les lignes de la feuille active si le contenu de la colonne
' D en regard est numérique et <900
'Suppose que la colonne A soit la plus longue
dim zLiG as long
zLiG=range("a2345").end(xlup).row
for i= zlig to 1 step -1
if isnumeric (cells(i,4).value) and cells(i,4).value<900 then
c.entirerow.delete
endif
next c

sera mieux
--
Avec plaisir
Philippe.R
"R1" a écrit dans le message de
news:%
"Philippe.R" <AS_rauphil_at_wanadoo.fr> wrote:

Bonjour,

sub suplignes()
'MPFE le 12/08/2007
'Supprime toutes les lignes de la feuille active si le contenu de la
colonne d
' en regard est numérique et <900
dim zLiG as long
zLiG=range("a2345").end(xlup).row
for each c in range("a1:a"&zlig)
if isnumeric (cells(c.row,4).value) and cells(c.row,4).value<900 then
c.entirerow.delete
endif
next c

à tester sur une copie de la feuille


On m'avait suggéré, en pareille situation, pour gagner du temps, de
parcourir la boucle for à l'envers (du bas vers le haut). Qu'en
pensez-vous? Comment adapter cela au "for each in"?



Avatar
Trirème
On m'avait suggéré, en pareille situation, pour gagner du temps, de
parcourir la boucle for à l'envers (du bas vers le haut). Qu'en
pensez-vous? Comment adapter cela au "for each in"?


C'est surtout que lorsqu'on supprime une ligne, la ligne suivante "remonte". Dans ce cas
il ne faut pas que l'algorithme incrémente en plus à la ligne suivante comme le fait le
1er code de Philippe, au risque de rater une ligne.
Pour s'en convaincre il faut le tester avec plusieurs lignes contigües répondant au
critère de suppression.
J'ai l'impression également que le 1er code de Philippe devait boucler sans fin.

Il me semble après essais que le gain de temps ne doit s'apprécier que pour plusieurs
milliers de lignes.

Cordialement,
Trirème

Avatar
Philippe.R
Bonsoir Trirème,
J'ai écris le 1er code à la volée dans le message, sans prendre le soin de
le tester
Il ne supprimait effectivement pas toutes les lignes concernées puisque,
comme tu l'expliques, il sautait des lignes pour peu qu'elles soient
consécutives.
En revanche, il ne boucle pas sans fin !
Le prétendre frise la diffamation ! ;-O
;o)))
Ca m'apprendra à vouloir aller trop vite (on en oubli les règles
élémentaires)
;o)))
--
Avec plaisir
Philippe.R
"Trirème" a écrit dans le message de
news:
On m'avait suggéré, en pareille situation, pour gagner du temps, de
parcourir la boucle for à l'envers (du bas vers le haut). Qu'en
pensez-vous? Comment adapter cela au "for each in"?


C'est surtout que lorsqu'on supprime une ligne, la ligne suivante
"remonte". Dans ce cas il ne faut pas que l'algorithme incrémente en plus
à la ligne suivante comme le fait le 1er code de Philippe, au risque de
rater une ligne.
Pour s'en convaincre il faut le tester avec plusieurs lignes contigües
répondant au critère de suppression.
J'ai l'impression également que le 1er code de Philippe devait boucler
sans fin.

Il me semble après essais que le gain de temps ne doit s'apprécier que
pour plusieurs milliers de lignes.

Cordialement,
Trirème



Avatar
Trirème
J'ai écris le 1er code à la volée dans le message, sans prendre le soin
de le tester
Je comprends mieux tous ces mots clés en minuscule.


...
En revanche, il ne boucle pas sans fin !
Le prétendre frise la diffamation ! ;-O
;o)))
Intente moi un procès :-P


Ca m'apprendra à vouloir aller trop vite (on en oubli les règles
élémentaires)
;o)))
ALors, as-tu testé ton second code ? ;-)

(For i .... Next c)

Cordialement,
Trirème

Avatar
Philippe.R
OK Chef, OK !
(c'était encore directement dans le message pour le 2ème)
Après test :

Sub suplignesB()
'MPFE le 12/08/2007
'Supprime toutes les lignes de la feuille active si le contenu de la colonne
' D en regard est numérique et <900
'Suppose que la colonne A soit la plus longue
Dim zLiG As Long
zLiG = Range("a2345").End(xlUp).Row
For i = zLiG To 1 Step -1
If IsNumeric(Cells(i, 4).Value) And Cells(i, 4).Value < 900 Then
Cells(i, 4).EntireRow.Delete
End If
Next i
End Sub

J'ai bon, Chef ?
--
Avec plaisir
Philippe.R
"Trirème" a écrit dans le message de
news:
J'ai écris le 1er code à la volée dans le message, sans prendre le soin
de le tester
Je comprends mieux tous ces mots clés en minuscule.


...
En revanche, il ne boucle pas sans fin !
Le prétendre frise la diffamation ! ;-O
;o)))
Intente moi un procès :-P


Ca m'apprendra à vouloir aller trop vite (on en oubli les règles
élémentaires)
;o)))
ALors, as-tu testé ton second code ? ;-)

(For i .... Next c)

Cordialement,
Trirème



Avatar
Trirème
OK Chef, OK !
(c'était encore directement dans le message pour le 2ème)
Après test :

Sub suplignesB()
'MPFE le 12/08/2007
'Supprime toutes les lignes de la feuille active si le contenu de la
colonne
' D en regard est numérique et <900
'Suppose que la colonne A soit la plus longue
Dim zLiG As Long
zLiG = Range("a2345").End(xlUp).Row
For i = zLiG To 1 Step -1
If IsNumeric(Cells(i, 4).Value) And Cells(i, 4).Value < 900 Then
Cells(i, 4).EntireRow.Delete
End If
Next i
End Sub

J'ai bon, Chef ?


Ben elle supprime aussi les lignes si la cellules Dx est vide. Il faudrait voir avec zimou
ce qu'il y a lieu de faire mais il ne donne pas signe de vie. Ça va zimou ?
Sinon :
If Not IsEmpty(Cells(i, 4)) And IsNumeric(Cells(i, 4).Value) And Cells(i, 4).Value < 900 Then

Allez, maintenant file dans ta chambre, c'est bientôt l'heure des hommes en nuisette ;-)

Avatar
Philippe.R
Avant coucher, quand même juste préciser qu'on peut comprendre qu'une
cellule vide a une valeur inférieure à 900
Et bonne nuit( Zette ) à toi aussi
;o))))
--
Avec plaisir
Philippe.R
"Trirème" a écrit dans le message de
news:
OK Chef, OK !
(c'était encore directement dans le message pour le 2ème)
Après test :

Sub suplignesB()
'MPFE le 12/08/2007
'Supprime toutes les lignes de la feuille active si le contenu de la
colonne
' D en regard est numérique et <900
'Suppose que la colonne A soit la plus longue
Dim zLiG As Long
zLiG = Range("a2345").End(xlUp).Row
For i = zLiG To 1 Step -1
If IsNumeric(Cells(i, 4).Value) And Cells(i, 4).Value < 900 Then
Cells(i, 4).EntireRow.Delete
End If
Next i
End Sub

J'ai bon, Chef ?


Ben elle supprime aussi les lignes si la cellules Dx est vide. Il faudrait
voir avec zimou ce qu'il y a lieu de faire mais il ne donne pas signe de
vie. Ça va zimou ?
Sinon :
If Not IsEmpty(Cells(i, 4)) And IsNumeric(Cells(i, 4).Value) And Cells(i,
4).Value < 900 Then

Allez, maintenant file dans ta chambre, c'est bientôt l'heure des hommes
en nuisette ;-)



Avatar
zimou
On 12 août, 22:40, "Philippe.R" <AS_rauphil_at_wanadoo.fr> wrote:
Avant coucher, quand même juste préciser qu'on peut comprendre qu'une
cellule vide a une valeur inférieure à 900
Et bonne nuit( Zette ) à toi aussi
;o))))
--
Avec plaisir
Philippe.R
"Trirème" a écrit dans le message denews:OUyNRWS3



OK Chef, OK !
(c'était encore directement dans le message pour le 2ème)
Après test :

Sub suplignesB()
'MPFE le 12/08/2007
'Supprime toutes les lignes de la feuille active si le contenu de la
colonne
' D en regard est numérique et <900
'Suppose que la colonne A soit la plus longue
Dim zLiG As Long
zLiG = Range("a2345").End(xlUp).Row
For i = zLiG To 1 Step -1
If IsNumeric(Cells(i, 4).Value) And Cells(i, 4).Value < 900 Then
Cells(i, 4).EntireRow.Delete
End If
Next i
End Sub

J'ai bon, Chef ?


Ben elle supprime aussi les lignes si la cellules Dx est vide. Il faudr ait
voir avec zimou ce qu'il y a lieu de faire mais il ne donne pas signe de
vie. Ça va zimou ?
Sinon :
If Not IsEmpty(Cells(i, 4)) And IsNumeric(Cells(i, 4).Value) And Cells( i,
4).Value < 900 Then

Allez, maintenant file dans ta chambre, c'est bientôt l'heure des hom mes
en nuisette ;-)- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -


bonjour et merci pour l'aide,
j'ai copier coller les codes telquels, mais le suis désolé de dire que
sa marche pas, en plus lorsque je redémarre ma feuille de calcule
excel "2007" m'affiche un méssage "présence d'une boucle circulaire
etc....." ou quelque chose comme ça.
merci



1 2