Macro pour supprimer une ligne !

bre 79 -  
 bre79 -
Bonjour,

je débute en VBA sur excel 2007, et je voudrai supprimer toutes les lignes qui ne contiendrai pas un texte connu comme " abc " dans une plage donnée.

j'ai fait ceci mais le problème c'est que ça me supprime la 1ère ligne et non celle qui contient le texte " abc "

sub supprimer()
'
' supprimer Macro
'

'
For Each Cell In Range("C9,C100")
If Cell.Value = " abc " Then ActiveCell.EntireRow.Select
Selection.Delete
Next
Range("A1").Select
End Sub

Merci pour votre aide

A voir également:

3 réponses

michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Bonjour,
remplace
For Each Cell In Range("C9,C100")

par
For Each Cell In Range("C9:C100")
0
bre 79
 
bonjour, avec ta solution, toutes mes lignes sont éffacées alors que moi je souhaite conserver la ou les lignes qui contiennent le texte "abc"

As tu une solution ?
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
re,
dans ta macro, tu veux supprimer les lignes des cellules de valeur " abc " or tu me dis vouloir supprimer celles qui ne contiennent pas " abc "
question dans les cellules peut il y avoir " abc " encadré par d'autres données genre "ssss abc 34zzz" et alors supprimer la ligne correspondante .
0
bre 79
 
non, ce que je veux faire, c'est supprimer toutes les lignes ne contenant pas un texte précis comme "abc" et conserver la ligne contenant ce texte.

j'espère avoir été plus précis!
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Sub supprimer()
For Each cell In Range("C9:C100")
If cell.Value <> " abc " Then Rows(cell.Row).Delete
Next
End Sub
0
bre 79
 
ta proposition m'efface bien les lignes mais plutôt bizarrement ! Et même que si je lance la macro plusieurs fois successivement, alors toutes les lignes disparaissent sans tenir compte de mon texte ???

En fait, la ou les lignes ayant mon texte ( mon texte correspond à des noms de personne comme Dupond, Durand,... ) et moi je veux garder toutes les lignes qui auraient dans la colonne C "Dupond" et supprimer toutes les autres qui auraient dans la colonne C "Durand, Duprés...). Je ne sais pas si je m'explique bien.

Si tu vois une solution, merci de prendre un peu de ton temps.
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
ton lien #1
et je voudrai supprimer toutes les lignes qui ne contiendrai pas un texte connu comme " abc " dans une plage donnée.
ta macro
If Cell.Value = " abc " Then ActiveCell.EntireRow.Select
Selection.Delete
ou tu cherches a éliminer les lignes comprenant " abc " (les espaces avant et après c'est quoi ?)

ton lien #2
moi je souhaite conserver la ou les lignes qui contiennent le texte "abc" (plus d'espace?)

ton lien#6
moi je veux garder toutes les lignes qui auraient dans la colonne C "Dupond" y'a plus d'espace avant et après le mot (hé oui c'est important: " abc " est différend se "abc")?


Je ne sais pas si je m'explique bien. NON
0
bre 79
 
Désolé pour ces explications scabreuses ! Je reprends tout

Sur une feuille, les cellules d'une colonne contiennent que des noms de personne. Il n'y a pas d'espace avant le nom ni après.
Prenons par exemple la colonne C, en C5 elle contient Durant
en C6 elle contient Dupont
en C7 elle contient Duval
en C8 elle contient Dupont ( à nouveau )
en C9 elle contient Duprés
en C10 elle contient Dujardin
en C11 elle contient Dupont ( à nouveau )
Je veux conserver que les lignes dont le nom de la colonne C est Dupont ( lignes 6 ; 8 ; 11 ) et supprimer toutes les autres c.a.d. les lignes 5 ; 7 ; 9

Est-ce possible ?

N.B. : j'espère que tu comprendras bien cette fois ci mon problème.
0
tchernosplif Messages postés 714 Statut Membre 248
 
ça fonctionne très bien, il suffit juste de ne pas laisser d'espace dans "Dupond"

Sub supprimer()
For Each cell In Range("C9:C100")
If cell.Value <> "Dupond" Then Rows(cell.Row).Delete
Next
End Sub
0
bre79
 
La solution ci-dessous ne me supprime pas toutes les lignes souhaitées.

Sub supprimer()
For Each cell In Range("C9:C100")
If cell.Value <> "Dupond" Then Rows(cell.Row).Delete
Next
End Sub

Par contre j'ai écrit cette boucle dans ma macro, et elle répond entièrement à mon problème.

Dim i As Integer
For i = 100 To 10 Step -1
If Cells(i, 6) <> "Dupond" Then
Rows(i).Delete
End If
Next

Merci à tous de votre aide.
0