Vu le == et ce que tu utilises pour écrire des commentaires, j'ai l'impression que tu as l'habitude de coder dans un autre language 
En VBA, on utilise pas de ==, tout se fait avec =. Les commentaires sont précédés d'un apostrophe.
Tout d'abord, avant de s'embarquer dans une boucle, il y a une façon plus simple de faire des filtres avec Excel : tu peux utiliser les tableaux : URL="http://silkyroad.developpez.com/excel/tableau/"]http://silkyroad.developpez.com/excel/tableau/[/URL]
Le tuto t'indique comment manipuler des tableaux "manuellement", mais tout ceci peut se faire avec Excel. Tu retrouves le code associé grâce à l'enregistreur de macro. Filtrer sur les lignes qui ne contiennent pas le mot et supprimer toutes ces lignes est plus efficace que de faire une boucle pour vérifier à chaque ligne si le mot existe, puis supprimer la ligne.
Néanmoins, si tu ne veux pas passer par un tableau, mais faire une boucle, voici quelques commentaires par rapport au code :
For r = .Rows.Count To 1 Step -1
Rows.Count donne le nombre de lignes de la feuille, or nous voulons seulement le nombre de lignes non vide. Pour cela, on utilise :
Cells(Rows.Count, 1).End(xlUp).Row
Cells(Rows.Count, 1) est la dernière cellule de la colonne A dans la feuille. End(xlUp) permet de remonter vers la première cellule non vide. Row donne le numero de ligne de cette cellule.
( de la fin au debut, mai sbon je vais l'inverser
NOOOOOOON !!!!!!!!! Quand on supprime des lignes on le fait toujours dans l'ordre INVERSE. Pourquoi? Car sinon on loupe des lignes, exemple :
1 - A
2 - B
3 - B
4 - A
On veut supprimer les lignes contenant B en faisant une boucle sur les lignes:
- itération 1 : ligne 1 --> pas de B, on ne supprime pas
- itération 2 : ligne 2 --> un B, on supprime la ligne, la liste devient :
1 - A
2 - B
3 - A
4 -
Il y a décalage des valeurs par rapport aux lignes à cause de la suppression. - iteration 3 : ligne 3 --> pas de B, on ne supprime pas et on continue
Et là... c'est le drame! On a sauté une occurence de B 
En faisant la suppression en ordre inverse, on évite cela : je te laisse refaire le petit exemple avec la boucle en sens inverse pour voir que ça marche 
For Each c In .Rows(r).Cells ' pour chaque colonne ( ici est ce toutes les colonnes ? )
Ici, on fait une boucle sur l'ensemble des cellules de la ligne n° r. Mais d'après ce que tu dis, tu veux seulement vérifier la colonne A? Du coup, pas besoin de cette boucle. Dans la boucle sur les lignes, à l'itération i, il suffit de vérifier si la cellule Ai contient ou pas le mot. Pour rappel : pour obtenir la valeur de la cellule Ai, on écrit :
If InStr(c.Range.Text, "x") > 0 Then fnd = True 'je ne comprends pas
J'utiliserai plutôt l'opérateur Like, comme évoqué dans mon message precedent pour vérifier si le mot est contenu dans la cellule.
Pas besoin de la variable fnd si on regarde que la colonne A. En effet, il suffit de dire que si le mot est contenu dans la cellule, alors on supprime la ligne.
Voici qqs pistes, essaie de travailler avec cela, puis reviens vers nous si tu rencontres encore des problèmes
Partager