Menu

Macro excel et suppression de ligne [Fermé]

- - Dernière réponse :  Aussie44 - 17 juin 2013 à 05:35
Bonjour à tous

Je souhaite supprimer par macro toutes les lignes dont la valeur est différente de 800 dans la colonne E (de E2 à la fin du champ)
Mais ma macro me laisse des lignes qu'elle aurait due supprimer.
Ou est donc l'erreur ?
Merci pour votre aide
Mimi

Range("E2").Select
Range(Selection, Selection.End(xlDown)).Select
Dim vCellule As Object
For Each vCellule In Selection
If vCellule.Value <> 800 Then
vCellule.EntireRow.Delete
End If
Next
Afficher la suite 

7 réponses

Meilleure réponse
15
Merci
Bonjour,

Si ta première condition est fausse ta boucle s'arrête! 2 solutions possible soit tu veux que toutes des condition soit vrai dans ce cas
(principe du AND)
if cells(ligne, colonne).text(ou value) = XX then
if cells(ligne, colonne).text(ou value) = XX then
if cells(ligne, colonne).text(ou value) = XX then
rows(ligne).delete
ligne = ligne -1
end if
end if
end if

plus simplement

if cells(ligne, colonne).text(ou value) = XX then AND cells(ligne, colonne).text(ou value) AND cells(ligne, colonne).text(ou value)
rows(ligne).delete
ligne = ligne -1
end if


si tu veu que dès qu'une de tes condition soit vrai la ligne est supprimée (principe du OR)

if cells(ligne, colonne).text(ou value) = XX then
rows(ligne).delete
ligne = ligne -1
end if
if cells(ligne, colonne).text(ou value) = XX then
rows(ligne).delete
ligne = ligne -1
end if
if cells(ligne, colonne).text(ou value) = XX then
rows(ligne).delete
ligne = ligne -1
end if

ou plus simplement

if cells(ligne, colonne).text(ou value) = XX then or cells(ligne, colonne).text(ou value) or cells(ligne, colonne).text(ou value)
rows(ligne).delete
ligne = ligne -1
end if

Dire « Merci » 15

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 45560 internautes nous ont dit merci ce mois-ci

Messages postés
1855
Date d'inscription
mercredi 19 janvier 2005
Statut
Membre
Dernière intervention
1 décembre 2018
1219
2
Merci
Bonsoir mimi,

Le problème est que, quand tu supprimes une ligne, celle d'en dessous remonte à l'adresse de celle que tu viens de supprimer. A la boucle suivante, on passe à la ligne suivante, et donc on ne traite pas celle qui vient de remonter.

Prends le problème à rebrousse poil :
Dim I     As Long
Dim Plage As Range
Set Plage = Range("E2:E" & Range("E2").End(xlDown).Row)
For I = Plage.Cells.Count To 1 Step -1
  If Plage.Cells(I).Value <> 800 Then
    Plage.Cells(I).EntireRow.Delete
  End If
Next
Super ces lignes de codes, merci.

Est ce que quelqu'un pourrait m'aider à corriger le code pour changer la condition de suppresion.

J'aimerais supprimer les lignes dont la somme de la colonne C + D = 0.

Je suis trèsnovice en VBA, et j'aimerais arriver à automatiser un travail récurrent d'importation et de mise en forme des données.

Merci tout plein à qui veut bien m'aider ;)
Je m'excuse de vous demander cela mais j'ai la meme chose a faire que mimi la seul difference c que moi je dois comparer la cellule avec celle d'en dessous et ce sont des caractères dedans (des mots).

j'ai esssayer d'appliquer la même formule mais cela ne marche pas??

Merci

Luy
change le cells(ligne,colonne).value par un .text
bonjour vu tes connaissances les miennes étant proches du néant en macro voilà le souci que je cherche à régler via une macro:
j'ai créé un graphique qui permet de visualiser des dépenses mensuelles cumulées tout au long de l'année
les dépenses sont récupérées via une liaison dans un autre fichier à l'aide d'une fonction = cellule
mon problème est que le montant cumulé évolue bien sûr mais étant donné que le résultat est lié à une cellule soit toujours la même quelque soit le mois considéré je ne visualise pas une courbe qui progresse tous les mois mais donc une droite
il faudrait que je crée une macro lié au graphique qui précise de ne plus toucher à un total dès le mois fini par exemple
merci pour tes précieux conseils
Bonjour Armojax,

Merci pour ta macro elle fonctionne parfaitement.
Tout nouvelle sur le forum et débutante en vba, j'aimerais l'étendre non pas à une colonne mais à plusieurs colonnes, mais je n'arrive pas à trouver le bon codage. Pourrais-tu m'aider, stp ?
1
Merci
Bonjour,
Très interessante votre discussion et c'est vrai j'arrive en retard. Bien contente de trouver ce code pour mon compte et me suis empressée de le recopier or les lignes peuvent être supprimer par un choix de conditions. Ex : si la condition 1 n'est pas remplie, la condition 2 s'applique t'elle? ou peut être la 3 sinon ben la ligne n'est pas supprimée. J'ai bien tenté de rajouté, après avoir tranformé l'opérateur en = par ma propre condition suivi d'un ; suivi de la seconde condition (rien) - Deuxième tentative : rajouter une ligne If : rien non + . Un coup de main s'il vous plaît?
Enfin si quelqu'un passe encore par là
1
Merci
bonjrs tt le monde
je voudrai savoir est ke il a ya une possiblité de faire une alerte par mail lié a un dépassement de seuil dans une cellule excel
merci par avance
1
Merci
Bonjour à tous,

Je suis complètement novice dans l'utilisation des macro excel, et je voudrais faire un programme qui me permette de supprimer automatiquement des colonnes. Je vois comment faire pour simplement éliminer une colonne mais je voudrais que cette suppression se fasse suite à une comparaison entre cellules.

Je vous donne un exemple.


A C D E G H I J
A B C D E F G H I J
1 8 7 1 1 3 7 5 1 7
0 5 2 1 4 2 3 5 8 7
3 6 3 0 1 5 4 8 9 4
4 4 1 9 2 4 7 2 6 0

Voilà mon tableau de valeurs.
La première ligne est ma référence fixe.
Je voudrais comparer la 2ème ligne à la 1ère et éliminer la colonne quand le texte de la cellule de la ligne 2 ne correspond pas à la cellule du dessus.

Dans mon exemple, dans la première ligne, j'ai pas de B, ni de F. Je voudrais donc éliminer la colonne correspondant à B, décaler de façon à ce que la colonne C soit sous le C de la première ligne et faire pareil pour F.
Je ne sais pas si c'est très clair !

Qui peut m'aider ????
Salut Luna.

J'espere qu'il n'est pas trop tard pour repondre a ton probleme, mais j'ai comme l'impression qu'il y a plus de questions que de réponses sur ce topic... alors je poste quand meme ma reponse.

En fait, je suis aussi debutant en programmation, mais on apprend pas mal de choses en se baladant sur les forums, et avec un peu de logique, on arrive a ca :

'i est la colonne sur laquelle on effectue la comparaison. On part a priori de la colonne 1 jusqu'a ce qu'il n'y ai plus rien dans la ligne A
For i = 1 To Range("A1").End(xlToRight).Column
'Tant que les cellules des ligne 1 et 2 (A et B) de la colonne i sont differentes...
While Cells(2, i) <> Cells(1, i)
'... on selection les cellules à supprimer (ici de la ligne 2 à 6 (soit B à F) de la i eme colonne)
Range(Cells(2, i), Cells(6, i)).Select
' et on les supprime
Selection.Delete Shift:=xlToLeft
Wend
Next

En supprimant mes commentaires, ca donne quelque chose d'assez simple...

En esperant avoir repondu a ton probleme.
Messages postés
15
Date d'inscription
mercredi 27 février 2008
Statut
Membre
Dernière intervention
18 juin 2008
1
1
Merci
Bonjour à tous,

je suis plus que débutant en prog mais bon!!

j'importe des données en continue sur un fichier Excel. le tableau se présente sous forme de 2 colonnes et une multitude de lignes puisque la saisie est en continue!!!
j'aimerai savoir comment je peux faire pour supprimer les cellules A1 et B1 quand les cellules A10 et B10 se remplissent.
en fait je veux faire glisser les cellules, d'une cellule vers le haut dès que la lignes 10(par exemple) se remplis..

Merci d'avance pour votre aide!!!!
Messages postés
7
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
18 mai 2007
9
0
Merci
Bonjour,

Je souhaiterais avoir la syntaxe macro pour l'algorithme suivant:

SI chaque cellule de la colonne "C" vaut "toto" ALORS
de la première ligne à la dernière ligne:
supprimer une ligne entière sur deux

Et une fois la macro faite, comment l'insérer dans un bouton Excel?

Merci infiniment, c'est très important!