Comment supprimer des lignes = à 0 dans une colonne

Bonjour,

je suis bloquée sur Excel depuis 2jours…

S’il vous plait comment supprimer une ligne quand une cellule =0 tout en sachant que j’ai toute la colonne des multiples de 10 (donc 100; 150; 200; 300… qui se terminent par 0)

Merci et excellente journée.

Bonjour!

Je ne suis pas sur d’avoir bien compris ta question.
Pourrais tu nous donner plus de détails stp et si possible inclure un fichier d’exemple?

Merci et à bientôt

Bonjour,

Il est possible de le faire en passant par VBA avec un code. Code ci-joint :

Sub Suppr()
    Dim n%, i%  'Déclaration des variables
    Application.ScreenUpdating = False
    With Worksheets("Feuil1") 'Nom de la feuille à modifier suivant le cas
        n = .Range("A" & .Rows.Count).End(xlUp).Row 'N° de la dernière ligne remplit
          For i = n To 2 Step -1 'Boucle de la dernière ligne remplit vers la ligne 2 (première ligne remplit) par PAS de -1
              If Range("A" & i) = 0 Then .Range("A" & i).EntireRow.Delete 'si la ligne de la colonne A est = à 0 , suppression de la ligne
          Next i
    End With
End Sub

EDIT : Merci à Mimimathy pour la correction

Pour ajouter une macro à votre fichier Excel il faut faire comme suit :
1- Alt + F11
2- Clic droit sur votre fichier dans l’arborescence à gauche de l’écran
3- Insert Module
4- Copier/Coller la macro
5- Remplacer les informations nécessaires (indication en vert lorsque vous avez copié/collé le code dans le module)

A disposition si besoin,

J

Bonjour à tous

Jauster, ta macro est presque bonne, mais il y aura un problème si sur 2 lignes qui se suivent tu as un ZERO.
il faut faire la boucle en partant du bas, d’où le STEP -1

tu aurais du mettre : For i = DernLigne to 1 step -1

supp ligne avec 0.xlsm (15,3 Ko)

Sub Suppr()
    Dim n%, i%  'Déclaration des variables
    Application.ScreenUpdating = False
    With Worksheets("Feuil1") 'Nom de la feuille à modifier suivant le cas
        n = .Range("A" & .Rows.Count).End(xlUp).Row 'N° de la dernière ligne remplit
          For i = n To 2 Step -1 'Boucle de la dernière ligne remplit vers la ligne 2 (première ligne remplit) par PAS de -1
              If Range("A" & i) = 0 Then .Range("A" & i).EntireRow.Delete 'si la ligne de la colonne A est = à 0 , suppression de la ligne
          Next i
    End With
End Sub

Hello,

Effectivement merci pour la correction.

Plusieurs questions concernant ton code (comme je commence le VBA j’ai encore pas mal de chose à apprendre) :

  • Déclarer des variables avec % revient à déclarer un Integer ?
  • Pourquoi n to 2 ? parce que le step -1 va permettre de vérifier aussi la ligne 1 ? Ou parce que tu prends en compte des entêtes ?
  • Pourquoi passer par Range().EntireRow.Delete et non Rows().Delete ?

Merci :slight_smile:

Re,

[quote=“Jauster, post:6, topic:1881”]
Déclarer des variables avec % revient à déclarer un Integer ?

  • Exact, tout comme mettre un $ pour un String, c’est une question de rapidité et de simplification

Pourquoi n to 2 ? parce que le step -1 va permettre de vérifier aussi la ligne 1 ? Ou parce que tu prends en compte des entêtes ?

  • Exact aussi, sur mon exemple, l’entête se trouve sur la première ligne, mais la macro pourrait trés bien être faite de la ligne 50 à la fin, et il pourrait avoir des “0” dans les lignes de 1 à 49

Pourquoi passer par Range().EntireRow.Delete et non Rows().Delete ?

Tu as raison, dans cet exemple cela aurait fonctionné. Ma macro est une de mes macro en stock dans une BDD de module.
La réponse au RANGE : si je ne veut supprimer la ligne de la colonne A à la colonne E, sans toucher au reste de la ligne, cela me permet par une formule un peu plus élaborée de supprimer cette plage vers le haut par exemple, sans toucher au reste
[/quote]

Voilà, j’espère avoir répondu à tes questions très pertinentes

Cordialement

1 J'aime

Yes ! Merci pour les réponses, parfait !

Est-il possible pour toi de partager ta BDD de modules histoire de check un peu ce qui s’y fait ou c’est perso ?

Encore merci

Re,

Eh non, comme tu dis, c’est du perso, de plus cela ne te rendrais pas service.
Il vaut mieux que tu te la fasse toi même en farfouillant dans le forum et en te les appliquant pour connaitre son fonctionnement

Je comprends ^^
Ça va faire bientôt 2 mois que je “bidouille” du VBA, le plus difficile pour moi (pour l’instant) étant d’optimiser les macros (les rendre moins lourdes et plus performantes).

Ex : Je travaille sur un fichier avec une macro, la macro prend environ 30/45 sec à se faire et passe plusieurs fois par le stade “Excel ne répond plus”, mais arrive tout de même à se finir et arriver au bout. Bizarre ^^

Re,
Créé un nouveau post est place ton classeur dessus, je regarderai :wink:

Re bonjour,

Ci joint le document excel ou je veux supprimer toute ligne ou la quantité = 0.

Merci.

DECEMBRE COM.xlsx (236 KB)

Re,

Votre fichier avec le code : DECEMBRE COM.xlsm (235,2 Ko)

J’ai juste ajouté Application.ScreenUpdating = True qui n’était pas dans le code de base.

Il suffit de cliquer sur le bouton >> ATTENTION, pas de retour en arrière possible après.

Bonjour à tous

Application.ScreenUpdating ne sert à rien dans ce cas. C’est simplement pour rafraichir l’écran quand on navigue entre les feuilles.

Sub Suppr()
    Dim n%, i%  'Déclaration des variables
    With Worksheets("DECEMBRE TPE COMMISSION essai") 'Nom de la feuille à modifier suivant le cas
        n = .Range("A" & .Rows.Count).End(xlUp).Row - 2 'N° de la dernière ligne remplit sans le total
          For i = n To 4 Step -1 'Boucle de la dernière ligne remplit vers la ligne 4 (première ligne remplit) par PAS de -1
              If Range("F" & i) = 0 Then .Range("F" & i).EntireRow.Delete 'si la ligne de la colonne F est = à 0 , suppression de la ligne
          Next i
    End With
End Sub
1 J'aime

Bonjour

Si ton problème est résolu, peux-tu stp cocher le petit :white_check_mark: sous le message qui contient la solution stp?

Cela nous aide à déterminer qui a encore besoin d’aide et qui est sauvé!

Merci