Création de macro supression de ligne

Résolu
r-liam -  
 r-liam -
Bonjour.
J'ai effectué de nombreuses recherches sur le sujet, et j'ai trouvé quelques réponses, mais je n'ai jamais réussi à les comprendre (ni même à les appliquer). C'est vous dire mon niveau.
Voici donc mon problème:
Je travail sous excel 2007 et je souhaite créer une macro me permettant de supprimer les lignes n'ayant pas le bon nombre dans la colonne F.

Voici par exemple ce que j'ai:

A B C D E F
1 xx xx xx xx xx 333
2 xx xx xx xx xx 333
3 xx xx xx xx xx 686
4 xx xx xx xx xx 333
5 xx xx xx xx xx 662

Et voici ce que je voudrais avoir grâce à la macro:

A B C D E F
1 xx xx xx xx xx 333
2 xx xx xx xx xx 333
3 xx xx xx xx xx 333

En gros, supprimer les lignes n'ayant pas le code 333 et faire un tri sur la colonne F.
Comment faire cette macro? (Inutile, je pense, de vous préciser mon faible niveau. Je n'y connais que les bases en macro, en gros, l'utilisation de l'enregistreur.)

Merci de vos réponses


A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,
Effectivement, ce sujet a déjà été abordé.
Pour cela il nous faut tout d'abord une boucle qui va "regarder" dans chaque cellule de ta colonne F.
Boucle que l'on va faire commencer par la dernière ligne pour remonter jusqu"à la 2ème. Pourquoi dans ce sens? Parce que lors de la suppression complète d'une ligne, le num de la ligne ou l'on se trouve "remonte" d'un "cran" et donc en commençant par le début, il va nous en oublier.
Pour une boucle, il faut tout d'abord connaitre la dernière ligne :
Dim derniereligne As Integer
on détermine une variable comme étant un nombre entier (un numéro de ligne est forcément entier)
derniereligne = Sheets("Feuil1").Range("A65536").End(xlUp).Row
on lui affecte ici le numéro de la dernière ligne de la feuille Feuil1 colonne A
Pour la boucle, on a besoin d'une deuxième variable qui va changer à chaque étape et représentera le numéro de la ligne sur laquelle on se situe :
Sub effacelignes()
Dim i As Integer
Dim derniereligne As Integer
derniereligne = Sheets("Feuil1").Range("A65536").End(xlUp).Row
For i = derniereligne To 2 Step -1 'de la dernière à la 2ème ligne (step -1 signifie que l'on enlève 1 à la valeur de i à chaque étape)
If Sheets("Feuil1").Range("F" & i).Value <> 333 Then 'Si F... est différent de 333
Sheets("Feuil1").Range("F" & i).EntireRow.Delete 'alors on supprime la ligne
End If 'fin du test "SI"
Next i 'i suivant (ligne précédente)
End Sub

Pour faire fonctionner ce code :
TESTEZ LE SUR UN FICHIER EXEMPLE à partir du moment ou on "delete", mieux vaux perdre 5 minutes qu'une base de données... Les "manipulations" réalisées par une macro sont définitives (à moins de ne pas enregistrer les modifications)...
Dans votre fichier, taper : ALT+F11
Dans la fenêtre Visual Basic ainsi ouverte : Insertion/Modules.
Copier coller ce code dans la fenêtre du module ainsi créé.
Fermer visual basic puis :
ALT+F8 choisir "effacelignes" et cliquer sur exécuter.
1
r-liam
 
Merci beaucoup de la réponse. Cela fonctionne parfaitement, et les explications sont très bonnes. Merci.
0