OVH Cloud OVH Cloud

sup ligne par rapport a critere

7 réponses
Avatar
Manu
Bonjour,
C'est fou ce que l'on peu faire comme recherche infructueuses lorsqu'on ne
connait pas.
Je souhaite supprimer les lignes si dans C5 à C500 il y a le mot "toto"
alors apres votre aide j'essai ce genre de chose :
[c15:c500].??????????("toto").EntireRow.Delete
Mais je ne sais pas quoi mettre à la place des ?????

Merci
Manu

7 réponses

Avatar
anonymousA
Bonjour,

2 méthodes possibles au moins (mais il y en a d'autres) , la première
étant plus rapide ( bien que pour 494 lignes seulement, y'aura pas
grande diférence).

1ere méthode.:Il faut que tu aies un filtre actif ( filtre
automatique) sur la colonne C.J'ai supposé qu'il y avait aussi un
filtre sur la colonne A et B auquel cas Field:=3 dans l'instruction
suivante.SI ce n'est pas le cas, il faudra adapter

With Range("_FilterDataBase")
.AutoFilter Field:=3, Criteria1:="=*toto*"
.SpecialCells(xlCellTypeVisible).Offset(1, 0).EntireRow.Delete
End With
ActiveSheet.ShowAllData

2eme méthode

With Range("C2:C500")
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPart)
If Not c Is Nothing Then
firstaddress = c.Address
Set plage = c
Do
Set plage = Union(c, plage)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
plage.EntireRow.Delete

A+

Manu wrote:
Bonjour,
C'est fou ce que l'on peu faire comme recherche infructueuses lorsqu'on ne
connait pas.
Je souhaite supprimer les lignes si dans C5 à C500 il y a le mot "toto"
alors apres votre aide j'essai ce genre de chose :
[c15:c500].??????????("toto").EntireRow.Delete
Mais je ne sais pas quoi mettre à la place des ?????

Merci
Manu


Avatar
Manu
J'ai éssayé cela, et ca m'amene directement au debogueur, qu'ais je manqué
???
Sub test()
With Range("C2:C500")
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPart)
If Not c Is Nothing Then
firstaddress = c.Address
Set plage = c
Do
Set plage = Union(c, plage)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
plage.EntireRow.Delete
End Sub

Manu
"anonymousA" a écrit dans le message de news:

Bonjour,

2 méthodes possibles au moins (mais il y en a d'autres) , la première
étant plus rapide ( bien que pour 494 lignes seulement, y'aura pas
grande diférence).

1ere méthode.:Il faut que tu aies un filtre actif ( filtre
automatique) sur la colonne C.J'ai supposé qu'il y avait aussi un
filtre sur la colonne A et B auquel cas Field:=3 dans l'instruction
suivante.SI ce n'est pas le cas, il faudra adapter

With Range("_FilterDataBase")
.AutoFilter Field:=3, Criteria1:="=*toto*"
.SpecialCells(xlCellTypeVisible).Offset(1, 0).EntireRow.Delete
End With
ActiveSheet.ShowAllData

2eme méthode

With Range("C2:C500")
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPart)
If Not c Is Nothing Then
firstaddress = c.Address
Set plage = c
Do
Set plage = Union(c, plage)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
plage.EntireRow.Delete

A+

Manu wrote:
Bonjour,
C'est fou ce que l'on peu faire comme recherche infructueuses lorsqu'on ne
connait pas.
Je souhaite supprimer les lignes si dans C5 à C500 il y a le mot "toto"
alors apres votre aide j'essai ce genre de chose :
[c15:c500].??????????("toto").EntireRow.Delete
Mais je ne sais pas quoi mettre à la place des ?????

Merci
Manu


Avatar
anonymousA
tu n'as rien manqué. Si dans la plage C2:C500 , il n'y a pas de chaine
de texte contenant toto alors la plage de cellules plage n'est pas
définie. En conséquence, plage.entirerow.delete renvoie une erreur.
J'avais supposé qu'il existerait toujours une occurence avec la valeur
toto.
Pour eviter le plantage

Set plage = Nothing
With Range("C2:C17")
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPart)
If Not c Is Nothing Then
firstaddress = c.Address
Set plage = c
Do
Set plage = Union(c, plage)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
If Not plage Is Nothing Then plage.EntireRow.Delete

A+

Manu wrote:
J'ai éssayé cela, et ca m'amene directement au debogueur, qu'ais je m anqué
???
Sub test()
With Range("C2:C500")
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPa rt)
If Not c Is Nothing Then
firstaddress = c.Address
Set plage = c
Do
Set plage = Union(c, plage)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
plage.EntireRow.Delete
End Sub

Manu
"anonymousA" a écrit dans le message de news:

Bonjour,

2 méthodes possibles au moins (mais il y en a d'autres) , la première
étant plus rapide ( bien que pour 494 lignes seulement, y'aura pas
grande diférence).

1ere méthode.:Il faut que tu aies un filtre actif ( filtre
automatique) sur la colonne C.J'ai supposé qu'il y avait aussi un
filtre sur la colonne A et B auquel cas Field:=3 dans l'instruction
suivante.SI ce n'est pas le cas, il faudra adapter

With Range("_FilterDataBase")
.AutoFilter Field:=3, Criteria1:="=*toto*"
.SpecialCells(xlCellTypeVisible).Offset(1, 0).EntireRow.Delete
End With
ActiveSheet.ShowAllData

2eme méthode

With Range("C2:C500")
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPa rt)
If Not c Is Nothing Then
firstaddress = c.Address
Set plage = c
Do
Set plage = Union(c, plage)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
plage.EntireRow.Delete

A+

Manu wrote:
Bonjour,
C'est fou ce que l'on peu faire comme recherche infructueuses lorsqu'on ne
connait pas.
Je souhaite supprimer les lignes si dans C5 à C500 il y a le mot "tot o"
alors apres votre aide j'essai ce genre de chose :
[c15:c500].??????????("toto").EntireRow.Delete
Mais je ne sais pas quoi mettre à la place des ?????

Merci
Manu




Avatar
Manu
Ca ne fonctionne pas, le debogueur m'emmene direct sur cette ligne
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPart)

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

tu n'as rien manqué. Si dans la plage C2:C500 , il n'y a pas de chaine
de texte contenant toto alors la plage de cellules plage n'est pas
définie. En conséquence, plage.entirerow.delete renvoie une erreur.
J'avais supposé qu'il existerait toujours une occurence avec la valeur
toto.
Pour eviter le plantage

Set plage = Nothing
With Range("C2:C17")
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPart)
If Not c Is Nothing Then
firstaddress = c.Address
Set plage = c
Do
Set plage = Union(c, plage)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
If Not plage Is Nothing Then plage.EntireRow.Delete

A+

Manu wrote:
J'ai éssayé cela, et ca m'amene directement au debogueur, qu'ais je manqué
???
Sub test()
With Range("C2:C500")
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPart)
If Not c Is Nothing Then
firstaddress = c.Address
Set plage = c
Do
Set plage = Union(c, plage)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
plage.EntireRow.Delete
End Sub

Manu
"anonymousA" a écrit dans le message de news:

Bonjour,

2 méthodes possibles au moins (mais il y en a d'autres) , la première
étant plus rapide ( bien que pour 494 lignes seulement, y'aura pas
grande diférence).

1ere méthode.:Il faut que tu aies un filtre actif ( filtre
automatique) sur la colonne C.J'ai supposé qu'il y avait aussi un
filtre sur la colonne A et B auquel cas Field:=3 dans l'instruction
suivante.SI ce n'est pas le cas, il faudra adapter

With Range("_FilterDataBase")
.AutoFilter Field:=3, Criteria1:="=*toto*"
.SpecialCells(xlCellTypeVisible).Offset(1, 0).EntireRow.Delete
End With
ActiveSheet.ShowAllData

2eme méthode

With Range("C2:C500")
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPart)
If Not c Is Nothing Then
firstaddress = c.Address
Set plage = c
Do
Set plage = Union(c, plage)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
plage.EntireRow.Delete

A+

Manu wrote:
Bonjour,
C'est fou ce que l'on peu faire comme recherche infructueuses lorsqu'on
ne
connait pas.
Je souhaite supprimer les lignes si dans C5 à C500 il y a le mot "toto"
alors apres votre aide j'essai ce genre de chose :
[c15:c500].??????????("toto").EntireRow.Delete
Mais je ne sais pas quoi mettre à la place des ?????

Merci
Manu




Avatar
anonymousA
Change LookIn:=xlConstants par LookIn:=xlValues

A+

Manu wrote:
Ca ne fonctionne pas, le debogueur m'emmene direct sur cette ligne
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPart)

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

tu n'as rien manqué. Si dans la plage C2:C500 , il n'y a pas de chaine
de texte contenant toto alors la plage de cellules plage n'est pas
définie. En conséquence, plage.entirerow.delete renvoie une erreur.
J'avais supposé qu'il existerait toujours une occurence avec la valeur
toto.
Pour eviter le plantage

Set plage = Nothing
With Range("C2:C17")
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPa rt)
If Not c Is Nothing Then
firstaddress = c.Address
Set plage = c
Do
Set plage = Union(c, plage)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
If Not plage Is Nothing Then plage.EntireRow.Delete

A+

Manu wrote:
J'ai éssayé cela, et ca m'amene directement au debogueur, qu'ais je manqué
???
Sub test()
With Range("C2:C500")
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xl Part)
If Not c Is Nothing Then
firstaddress = c.Address
Set plage = c
Do
Set plage = Union(c, plage)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
plage.EntireRow.Delete
End Sub

Manu
"anonymousA" a écrit dans le message de news:

Bonjour,

2 méthodes possibles au moins (mais il y en a d'autres) , la premiè re
étant plus rapide ( bien que pour 494 lignes seulement, y'aura pas
grande diférence).

1ere méthode.:Il faut que tu aies un filtre actif ( filtre
automatique) sur la colonne C.J'ai supposé qu'il y avait aussi un
filtre sur la colonne A et B auquel cas Field:=3 dans l'instruction
suivante.SI ce n'est pas le cas, il faudra adapter

With Range("_FilterDataBase")
.AutoFilter Field:=3, Criteria1:="=*toto*"
.SpecialCells(xlCellTypeVisible).Offset(1, 0).EntireRow.Delete
End With
ActiveSheet.ShowAllData

2eme méthode

With Range("C2:C500")
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xl Part)
If Not c Is Nothing Then
firstaddress = c.Address
Set plage = c
Do
Set plage = Union(c, plage)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
plage.EntireRow.Delete

A+

Manu wrote:
Bonjour,
C'est fou ce que l'on peu faire comme recherche infructueuses lorsqu' on
ne
connait pas.
Je souhaite supprimer les lignes si dans C5 à C500 il y a le mot "t oto"
alors apres votre aide j'essai ce genre de chose :
[c15:c500].??????????("toto").EntireRow.Delete
Mais je ne sais pas quoi mettre à la place des ?????

Merci
Manu






Avatar
Jacky
Bonjour,

Je souhaite supprimer les lignes si dans C5 à C500 il y a le mot "toto"
Un peu plus basique ;o(

'----------
Sub jj()
Application.ScreenUpdating = False
For i = 500 To 5 Step -1
If UCase(Range("c" & i)) = "TOTO" Then Range("c" & i).EntireRow.Delete
Next
End Sub
'---------
Salutations
JJ

"Manu" a écrit dans le message de
news:%
Bonjour,
C'est fou ce que l'on peu faire comme recherche infructueuses lorsqu'on ne
connait pas.
Je souhaite supprimer les lignes si dans C5 à C500 il y a le mot "toto"
alors apres votre aide j'essai ce genre de chose :
[c15:c500].??????????("toto").EntireRow.Delete
Mais je ne sais pas quoi mettre à la place des ?????

Merci
Manu




Avatar
Manu
Merci, ca fonctionne nickel
A+
Manu

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

Change LookIn:=xlConstants par LookIn:=xlValues

A+

Manu wrote:
Ca ne fonctionne pas, le debogueur m'emmene direct sur cette ligne
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPart)

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

tu n'as rien manqué. Si dans la plage C2:C500 , il n'y a pas de chaine
de texte contenant toto alors la plage de cellules plage n'est pas
définie. En conséquence, plage.entirerow.delete renvoie une erreur.
J'avais supposé qu'il existerait toujours une occurence avec la valeur
toto.
Pour eviter le plantage

Set plage = Nothing
With Range("C2:C17")
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPart)
If Not c Is Nothing Then
firstaddress = c.Address
Set plage = c
Do
Set plage = Union(c, plage)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
If Not plage Is Nothing Then plage.EntireRow.Delete

A+

Manu wrote:
J'ai éssayé cela, et ca m'amene directement au debogueur, qu'ais je
manqué
???
Sub test()
With Range("C2:C500")
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPart)
If Not c Is Nothing Then
firstaddress = c.Address
Set plage = c
Do
Set plage = Union(c, plage)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
plage.EntireRow.Delete
End Sub

Manu
"anonymousA" a écrit dans le message de news:

Bonjour,

2 méthodes possibles au moins (mais il y en a d'autres) , la première
étant plus rapide ( bien que pour 494 lignes seulement, y'aura pas
grande diférence).

1ere méthode.:Il faut que tu aies un filtre actif ( filtre
automatique) sur la colonne C.J'ai supposé qu'il y avait aussi un
filtre sur la colonne A et B auquel cas Field:=3 dans l'instruction
suivante.SI ce n'est pas le cas, il faudra adapter

With Range("_FilterDataBase")
.AutoFilter Field:=3, Criteria1:="=*toto*"
.SpecialCells(xlCellTypeVisible).Offset(1, 0).EntireRow.Delete
End With
ActiveSheet.ShowAllData

2eme méthode

With Range("C2:C500")
Set c = .Find(What:="toto", LookIn:=xlConstants, Lookat:=xlPart)
If Not c Is Nothing Then
firstaddress = c.Address
Set plage = c
Do
Set plage = Union(c, plage)
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstaddress
End If
End With
plage.EntireRow.Delete

A+

Manu wrote:
Bonjour,
C'est fou ce que l'on peu faire comme recherche infructueuses
lorsqu'on
ne
connait pas.
Je souhaite supprimer les lignes si dans C5 à C500 il y a le mot
"toto"
alors apres votre aide j'essai ce genre de chose :
[c15:c500].??????????("toto").EntireRow.Delete
Mais je ne sais pas quoi mettre à la place des ?????

Merci
Manu