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

[VBA] supprimer une ligne en fonction de la valeur de la colonne A

13 réponses
Avatar
XLnoob
Bonjour,

Je suis encore (et toujours?) débutant sous VBA, et je cherche la méthode
pour supprimer une ligne si la valeur inscrite dans la colonne "A" est "zaza".

D'avance, merci!

10 réponses

1 2
Avatar
Daniel
Bonjour.
Essaie :

Sub test()
Dim c As Range
Do
Set c = Columns(1).Find("zaza", , , xlWhole)
If c Is Nothing Then Exit Sub
c.EntireRow.Delete
Loop
End Sub

Cordialement.
Daniel
"XLnoob" a écrit dans le message de news:

Bonjour,

Je suis encore (et toujours?) débutant sous VBA, et je cherche la méthode
pour supprimer une ligne si la valeur inscrite dans la colonne "A" est
"zaza".

D'avance, merci!


Avatar
Romain
Salut

essaye ça

Dim i As Integer
i = 0
With Worksheets("nomDeFeuille")
While Not (.Range("A1").Offset(i).Value = "")
If (StrComp(.Range("A1").Offset(i).Value, "zaza", 1) = 0) Then
.Rows(i).Delete
Else
i = i + 1
End If
Wend
End With

A+
Avatar
XLnoob
Merci à tous les 2 d'avoir pris le temps de répondre,

malheureusement, pour l'instant ca n'a pas l'air de fonctionner.
Peut-être est-ce du au fait que "zaza" est généré par une fonction???
(ex: SI(C2>C3;"zaza";"blablabla")

J'ai pourtant essayé d'adapter vos codes respectifs à mon problème

Romain, la macro se bloque à la ligne:
While Not (.Range("A1").Offset(i).Value = "")


Je vais ré-essayer....




Bonjour,

Je suis encore (et toujours?) débutant sous VBA, et je cherche la méthode
pour supprimer une ligne si la valeur inscrite dans la colonne "A" est "zaza".

D'avance, merci!


Avatar
anonymousA
Bonjour,

pour la réponse de Daniel , il te suffit d'écrire Set c =
Columns(1).Find("zaza", , xlValues, xlWhole)
au lieu de
Set c = Columns(1).Find("zaza", , , xlWhole)

et ca roulera.

Pour la solution de Romain, elle est un peu alambiquée et ne fonctionne
pas p.e si la valeur zaza est sur la 1ere ligne car alors Rows(0)
n'existe pas. Je ne prétends pas qu'on ne puisse pas la faire
fonctionner mais j'ai peu cherché, je l'avoue.
De toute façon, dans ce genre d'affaire impliquant delete, il vaut
toujours mieux partir du bas que du haut. ca evite bien des soucis.

A+

Merci à tous les 2 d'avoir pris le temps de répondre,

malheureusement, pour l'instant ca n'a pas l'air de fonctionner.
Peut-être est-ce du au fait que "zaza" est généré par une fonction???
(ex: SI(C2>C3;"zaza";"blablabla")

J'ai pourtant essayé d'adapter vos codes respectifs à mon problème

Romain, la macro se bloque à la ligne:
While Not (.Range("A1").Offset(i).Value = "")


Je vais ré-essayer....




Bonjour,

Je suis encore (et toujours?) débutant sous VBA, et je cherche la méthode
pour supprimer une ligne si la valeur inscrite dans la colonne "A" est "zaza".

D'avance, merci!




Avatar
XLnoob
Salut anonymousA,
et merci, car effectivement l'ajout de l'argument "xlValues" rend la réponse
de Daniel opérationnelle (j'ai pu apercevoir des lignes contenant "zaza"
disparaitre)

... sauf...

que la macro tourne depuis 15 minutes et elle a pas l'air de vouloir
s'arreter (!).
Je ne pense pas que le code soit particulièrement lourd pourtant, alors
peut-être est-ce du au fait que ma feuille contient environ 2000 lignes?

ps : le temps que j'écrive ce message, la macro s'est arrêtée!
Mais il me reste des lignes avec "zaza".

Hum, je pense que j'aurais du être plus exhaustif lors de la première
formulation de ma question. En fait zaza représente un doublon, que je trouve
avec la formule suivante en collonne A:
=+SI(NB.SI($K$2:K2;K2)>1;"zaza";"")



Bonjour,

pour la réponse de Daniel , il te suffit d'écrire Set c =
Columns(1).Find("zaza", , xlValues, xlWhole)
au lieu de
Set c = Columns(1).Find("zaza", , , xlWhole)

et ca roulera.

Pour la solution de Romain, elle est un peu alambiquée et ne fonctionne
pas p.e si la valeur zaza est sur la 1ere ligne car alors Rows(0)
n'existe pas. Je ne prétends pas qu'on ne puisse pas la faire
fonctionner mais j'ai peu cherché, je l'avoue.
De toute façon, dans ce genre d'affaire impliquant delete, il vaut
toujours mieux partir du bas que du haut. ca evite bien des soucis.

A+

Merci à tous les 2 d'avoir pris le temps de répondre,

malheureusement, pour l'instant ca n'a pas l'air de fonctionner.
Peut-être est-ce du au fait que "zaza" est généré par une fonction???
(ex: SI(C2>C3;"zaza";"blablabla")

J'ai pourtant essayé d'adapter vos codes respectifs à mon problème

Romain, la macro se bloque à la ligne:
While Not (.Range("A1").Offset(i).Value = "")


Je vais ré-essayer....




Bonjour,

Je suis encore (et toujours?) débutant sous VBA, et je cherche la méthode
pour supprimer une ligne si la valeur inscrite dans la colonne "A" est "zaza".

D'avance, merci!







Avatar
XLnoob
Bon, j'ai relancé une 2e fois la macro, (du coup c'était plus rapide), et là
le fichier semble clean!

Encore un grand MERCI à tous les 3!
Allez, je retourne faire bosser mon ordi ;)




Salut anonymousA,
et merci, car effectivement l'ajout de l'argument "xlValues" rend la réponse
de Daniel opérationnelle (j'ai pu apercevoir des lignes contenant "zaza"
disparaitre)

... sauf...

que la macro tourne depuis 15 minutes et elle a pas l'air de vouloir
s'arreter (!).
Je ne pense pas que le code soit particulièrement lourd pourtant, alors
peut-être est-ce du au fait que ma feuille contient environ 2000 lignes?

ps : le temps que j'écrive ce message, la macro s'est arrêtée!
Mais il me reste des lignes avec "zaza".

Hum, je pense que j'aurais du être plus exhaustif lors de la première
formulation de ma question. En fait zaza représente un doublon, que je trouve
avec la formule suivante en collonne A:
=+SI(NB.SI($K$2:K2;K2)>1;"zaza";"")



Bonjour,

pour la réponse de Daniel , il te suffit d'écrire Set c =
Columns(1).Find("zaza", , xlValues, xlWhole)
au lieu de
Set c = Columns(1).Find("zaza", , , xlWhole)

et ca roulera.

Pour la solution de Romain, elle est un peu alambiquée et ne fonctionne
pas p.e si la valeur zaza est sur la 1ere ligne car alors Rows(0)
n'existe pas. Je ne prétends pas qu'on ne puisse pas la faire
fonctionner mais j'ai peu cherché, je l'avoue.
De toute façon, dans ce genre d'affaire impliquant delete, il vaut
toujours mieux partir du bas que du haut. ca evite bien des soucis.

A+

Merci à tous les 2 d'avoir pris le temps de répondre,

malheureusement, pour l'instant ca n'a pas l'air de fonctionner.
Peut-être est-ce du au fait que "zaza" est généré par une fonction???
(ex: SI(C2>C3;"zaza";"blablabla")

J'ai pourtant essayé d'adapter vos codes respectifs à mon problème

Romain, la macro se bloque à la ligne:
While Not (.Range("A1").Offset(i).Value = "")


Je vais ré-essayer....




Bonjour,

Je suis encore (et toujours?) débutant sous VBA, et je cherche la méthode
pour supprimer une ligne si la valeur inscrite dans la colonne "A" est "zaza".

D'avance, merci!









Avatar
anonymousA
Je pense que ca tient au fait que tes formules calculent à chque fois
sur des bases nouvelles puisque tu supprimes des lignes et que donc les
références de comparaison evoluent.
En conséquence,
Dim c As Range
Application.Calculation = xlCalculationManual
Do
Set c = Columns(1).Find("zaza", , xlValues, xlWhole)
If c Is Nothing Then Exit Sub
c.EntireRow.Delete
Loop
Application.Calculation = xlCalculationAutomatic

devrait fonctionner

A+


XLnoob wrote:
Salut anonymousA,
et merci, car effectivement l'ajout de l'argument "xlValues" rend la ré ponse
de Daniel opérationnelle (j'ai pu apercevoir des lignes contenant "zaza"
disparaitre)

... sauf...

que la macro tourne depuis 15 minutes et elle a pas l'air de vouloir
s'arreter (!).
Je ne pense pas que le code soit particulièrement lourd pourtant, alors
peut-être est-ce du au fait que ma feuille contient environ 2000 lignes?

ps : le temps que j'écrive ce message, la macro s'est arrêtée!
Mais il me reste des lignes avec "zaza".

Hum, je pense que j'aurais du être plus exhaustif lors de la première
formulation de ma question. En fait zaza représente un doublon, que je trouve
avec la formule suivante en collonne A:
=+SI(NB.SI($K$2:K2;K2)>1;"zaza";"")



Bonjour,

pour la réponse de Daniel , il te suffit d'écrire Set c =
Columns(1).Find("zaza", , xlValues, xlWhole)
au lieu de
Set c = Columns(1).Find("zaza", , , xlWhole)

et ca roulera.

Pour la solution de Romain, elle est un peu alambiquée et ne fonction ne
pas p.e si la valeur zaza est sur la 1ere ligne car alors Rows(0)
n'existe pas. Je ne prétends pas qu'on ne puisse pas la faire
fonctionner mais j'ai peu cherché, je l'avoue.
De toute façon, dans ce genre d'affaire impliquant delete, il vaut
toujours mieux partir du bas que du haut. ca evite bien des soucis.

A+

Merci à tous les 2 d'avoir pris le temps de répondre,

malheureusement, pour l'instant ca n'a pas l'air de fonctionner.
Peut-être est-ce du au fait que "zaza" est généré par une fon ction???
(ex: SI(C2>C3;"zaza";"blablabla")

J'ai pourtant essayé d'adapter vos codes respectifs à mon probl ème

Romain, la macro se bloque à la ligne:
While Not (.Range("A1").Offset(i).Value = "")


Je vais ré-essayer....




Bonjour,

Je suis encore (et toujours?) débutant sous VBA, et je cherche la méthode
pour supprimer une ligne si la valeur inscrite dans la colonne "A" e st "zaza".

D'avance, merci!









Avatar
XLnoob
Oui, c'est magique, ca prend 3 secondes maintenant! :)
Mais ca a l'air de poser un autre problème que je trouve super bizarre :
dans ma colonne K, j'ai
±&C1&D1
²&C2&D2
etc.

Et là, mes valeurs étant pourtant différentes en {B1,C1,D1} et {B2,C2,D2},
en K2 (et K3, etc), j'obtiens excatment la même valeur qu'en K1 !!
Si je ferme mon classeur et que je le ré-ouvre, là ca redevient correct
(c'est à dire valeurs différentes en K1, K2, K3). Mais si je duplique de
nouveau la formule, disons en K22 ca recommence! C'est à, dire K23=K22=K21.

Je soupconne que ca vienne du mode de calcul, mais je n'y connais rien...
SemiManual, Manual, Automatic??





Je pense que ca tient au fait que tes formules calculent à chque fois
sur des bases nouvelles puisque tu supprimes des lignes et que donc les
références de comparaison evoluent.
En conséquence,
Dim c As Range
Application.Calculation = xlCalculationManual
Do
Set c = Columns(1).Find("zaza", , xlValues, xlWhole)
If c Is Nothing Then Exit Sub
c.EntireRow.Delete
Loop
Application.Calculation = xlCalculationAutomatic

devrait fonctionner

A+


XLnoob wrote:
Salut anonymousA,
et merci, car effectivement l'ajout de l'argument "xlValues" rend la réponse
de Daniel opérationnelle (j'ai pu apercevoir des lignes contenant "zaza"
disparaitre)

... sauf...

que la macro tourne depuis 15 minutes et elle a pas l'air de vouloir
s'arreter (!).
Je ne pense pas que le code soit particulièrement lourd pourtant, alors
peut-être est-ce du au fait que ma feuille contient environ 2000 lignes?

ps : le temps que j'écrive ce message, la macro s'est arrêtée!
Mais il me reste des lignes avec "zaza".

Hum, je pense que j'aurais du être plus exhaustif lors de la première
formulation de ma question. En fait zaza représente un doublon, que je trouve
avec la formule suivante en collonne A:
=+SI(NB.SI($K$2:K2;K2)>1;"zaza";"")



Bonjour,

pour la réponse de Daniel , il te suffit d'écrire Set c > > > Columns(1).Find("zaza", , xlValues, xlWhole)
au lieu de
Set c = Columns(1).Find("zaza", , , xlWhole)

et ca roulera.

Pour la solution de Romain, elle est un peu alambiquée et ne fonctionne
pas p.e si la valeur zaza est sur la 1ere ligne car alors Rows(0)
n'existe pas. Je ne prétends pas qu'on ne puisse pas la faire
fonctionner mais j'ai peu cherché, je l'avoue.
De toute façon, dans ce genre d'affaire impliquant delete, il vaut
toujours mieux partir du bas que du haut. ca evite bien des soucis.

A+

Merci à tous les 2 d'avoir pris le temps de répondre,

malheureusement, pour l'instant ca n'a pas l'air de fonctionner.
Peut-être est-ce du au fait que "zaza" est généré par une fonction???
(ex: SI(C2>C3;"zaza";"blablabla")

J'ai pourtant essayé d'adapter vos codes respectifs à mon problème

Romain, la macro se bloque à la ligne:
While Not (.Range("A1").Offset(i).Value = "")


Je vais ré-essayer....




Bonjour,

Je suis encore (et toujours?) débutant sous VBA, et je cherche la méthode
pour supprimer une ligne si la valeur inscrite dans la colonne "A" est "zaza".

D'avance, merci!













Avatar
XLnoob
Bon j'aurai du réfléchir un peu + avant de poster mon dernier message.
J'ai résolu le pb à l'aide d'un petit GoTo bien placé.

Maintenant c'est parfait!
Encore merci.


Sub éliminator()

Dim c As Range
Application.Calculation = xlCalculationManual
Do
Set c = Columns(1).Find("zaza", , xlValues, xlWhole)
If c Is Nothing Then GoTo fin
c.EntireRow.Delete
Loop

fin:
Application.Calculation = xlCalculationAutomatic
End Sub
Avatar
anonymousA
ne constate pas ce phénomène.
Par ailleurs, le recalcul automatique est remis par défaut à la
réouverture d'Excel , mais pas à la fermeture d'un classeur.
Une fois passé la macro, regarde du coté de Outils/Options/calcul
:quel bouton radio est coché ?

A+

XLnoob wrote:
Oui, c'est magique, ca prend 3 secondes maintenant! :)
Mais ca a l'air de poser un autre problème que je trouve super bizarre :
dans ma colonne K, j'ai
±&C1&D1
²&C2&D2
etc.

Et là, mes valeurs étant pourtant différentes en {B1,C1,D1} et {B2, C2,D2},
en K2 (et K3, etc), j'obtiens excatment la même valeur qu'en K1 !!
Si je ferme mon classeur et que je le ré-ouvre, là ca redevient corre ct
(c'est à dire valeurs différentes en K1, K2, K3). Mais si je duplique de
nouveau la formule, disons en K22 ca recommence! C'est à, dire K23=K 22=K21.

Je soupconne que ca vienne du mode de calcul, mais je n'y connais rien...
SemiManual, Manual, Automatic??





Je pense que ca tient au fait que tes formules calculent à chque fois
sur des bases nouvelles puisque tu supprimes des lignes et que donc les
références de comparaison evoluent.
En conséquence,
Dim c As Range
Application.Calculation = xlCalculationManual
Do
Set c = Columns(1).Find("zaza", , xlValues, xlWhole)
If c Is Nothing Then Exit Sub
c.EntireRow.Delete
Loop
Application.Calculation = xlCalculationAutomatic

devrait fonctionner

A+


XLnoob wrote:
Salut anonymousA,
et merci, car effectivement l'ajout de l'argument "xlValues" rend la réponse
de Daniel opérationnelle (j'ai pu apercevoir des lignes contenant " zaza"
disparaitre)

... sauf...

que la macro tourne depuis 15 minutes et elle a pas l'air de vouloir
s'arreter (!).
Je ne pense pas que le code soit particulièrement lourd pourtant, a lors
peut-être est-ce du au fait que ma feuille contient environ 2000 li gnes?

ps : le temps que j'écrive ce message, la macro s'est arrêtée!
Mais il me reste des lignes avec "zaza".

Hum, je pense que j'aurais du être plus exhaustif lors de la premi ère
formulation de ma question. En fait zaza représente un doublon, que je trouve
avec la formule suivante en collonne A:
=+SI(NB.SI($K$2:K2;K2)>1;"zaza";"")



Bonjour,

pour la réponse de Daniel , il te suffit d'écrire Set c =
Columns(1).Find("zaza", , xlValues, xlWhole)
au lieu de
Set c = Columns(1).Find("zaza", , , xlWhole)

et ca roulera.

Pour la solution de Romain, elle est un peu alambiquée et ne fonc tionne
pas p.e si la valeur zaza est sur la 1ere ligne car alors Rows(0)
n'existe pas. Je ne prétends pas qu'on ne puisse pas la faire
fonctionner mais j'ai peu cherché, je l'avoue.
De toute façon, dans ce genre d'affaire impliquant delete, il vaut
toujours mieux partir du bas que du haut. ca evite bien des soucis.

A+

Merci à tous les 2 d'avoir pris le temps de répondre,

malheureusement, pour l'instant ca n'a pas l'air de fonctionner.
Peut-être est-ce du au fait que "zaza" est généré par une fonction???
(ex: SI(C2>C3;"zaza";"blablabla")

J'ai pourtant essayé d'adapter vos codes respectifs à mon pro blème

Romain, la macro se bloque à la ligne:
While Not (.Range("A1").Offset(i).Value = "")


Je vais ré-essayer....




Bonjour,

Je suis encore (et toujours?) débutant sous VBA, et je cherche la méthode
pour supprimer une ligne si la valeur inscrite dans la colonne " A" est "zaza".

D'avance, merci!















1 2