Suppression de ligne si une cellule = 0
steph_gdp
Messages postés
35
Statut
Membre
-
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je cherche à faire ceci:
si M2=0 alors supprimer ligne 11
si N2=0 alors supprimer ligne 12
si O2=0 alors supprimer ligne 13
si P2=0 alors supprimer ligne 14
....
etc jusqu'a :
si AC2=0 alors supprimer ligne 27
soit 17 suppression de ligne possible sur un bouton macro
Quelqu'un serait t'il succeptible de réaliser cela pour moi?
Merci
Je cherche à faire ceci:
si M2=0 alors supprimer ligne 11
si N2=0 alors supprimer ligne 12
si O2=0 alors supprimer ligne 13
si P2=0 alors supprimer ligne 14
....
etc jusqu'a :
si AC2=0 alors supprimer ligne 27
soit 17 suppression de ligne possible sur un bouton macro
Quelqu'un serait t'il succeptible de réaliser cela pour moi?
Merci
4 réponses
-
Bonjour
Alt F11 pour ouverture editeur VBA
Insertion
Module
Dans le module mettre le code suivant
Sub Efface()
For n = 1 To 17
y = n + 12
x = n + 10
If Cells(2, y) = 0 Then
Rows(x).Select
Selection.Delete Shift:=xlUp
End If
Next n
End Sub
Fermer l'éditeur
Créer le bouton et mettre dans son code le nom de la macro
Cdlmnt-
-
-
Bonsoir
Je rentre et je découvre le message
Oui Chossete a raison il faut partir de la fin
Je viens d'essayer ça fonctionne parfaitement sii les indications que tu as données au début n'ont pas changé colonne M à AC et suppression de 11 à 27,
Sinon évidement il faut changer les valeurs dans la macro
A suivre
-
-
bin, essaies un peu de coder et si si tu y arrives pas, quelqu'un t'aideras
C'est pas vrai de lire des trucs comme ca -
desolé via55 je comprends pas trop les macros,
1/ si je commence a P2 jusqu'a AF2 je change quel valeur?
2/si par la suite je dois supprimer une ligne supplementaire de 11 à 28, soit P2 jusqu'a AG2 je change quel valeur?
Merci de ta comprehension :)-
Bonjour
J'adapte la macro pour des cas variables Remplacer la précédente par :
Sub efface()
d = InputBox("Colonne de départ")
f = InputBox("Colonne de fin")
a = Range(d & "2").Column
b = Range(f & "2").Column
x = 11 + b - a
For n = b To a Step -1
If Cells(2, n).Value = 0 Then
Rows(x).Select:
Selection.Delete Shift:=xlUp
End If
x = x - 1
Next n
End Sub
:Il suffit de rentrer P et AF ou AG lorsque te sera demandé les colonnes de debut et de fin, la macro fait le reste
Les lignes à effacer commencent en ligne 11 comme voulu , c'est la ligne x = 11 + b - a dans la macro
Si tu veux changer cette ligne de départ il faut modifier le 11 dans la macro
Me dire si tout fonctionne comme tu veux
Cdlmnt -
oui ca va, ca fonctionne mais comme j'ai rajouter des choses sur ma page avec une partie a supprimer en haut et une partie en bas j'ai du creer 2 macros comme ceci :
y'a t'il moyen de fussionner les 2 en 1?
1ere macro:
Sub Efface()
For n = 18 To 1 Step -1
y = n + 12
x = n + 10
If Cells(2, y) = 0 Then
Rows(x).Select
Selection.Delete Shift:=xlUp
End If
Next n
End Sub
2eme macro:
ub Efface2()
For n = 19 To 1 Step -1
y = n + 30
x = n + 67
If Cells(2, y) = 0 Then
Rows(x).Select
Selection.Delete Shift:=xlUp
End If
Next n
End Sub
merci -
Si tu veux que les 2 macros s'executent l'une apres l'autre :
Sub Efface()
For n = 18 To 1 Step -1
y = n + 12
x = n + 10
If Cells(2, y) = 0 Then
Rows(x).Select
Selection.Delete Shift:=xlUp
End If
Next n
For n = 19 To 1 Step -1
y = n + 30
x = n + 67
If Cells(2, y) = 0 Then
Rows(x).Select
Selection.Delete Shift:=xlUp
End If
Next n
End Sub
-
-
bonjour,
une alternative pour éviter cette histoire de remonter les lignes et en réduisant le nombre de boucles aux seules valeurs zéro et sans select-selection
Option Explicit Sub supprimer_si_zero() Dim Nbre_z As Byte, Col As Byte, Cptr As Byte, Ligne As Byte, Supprim As String Application.ScreenUpdating = False Nbre_z = Application.CountIf(Range("M2:AC2"), 0) Col = 12 For Cptr = 1 To Nbre_z Col = Rows(2).Find(0, Cells(2, Col), xlValues).Column Ligne = Col - 2 Supprim = Supprim & Ligne & ":" & Ligne & "," Next Supprim = Left(Supprim, Len(Supprim) - 1) Range(Supprim).EntireRow.Delete End Sub