Supprimer plusieurs ligne par macro [Résolu/Fermé]

Signaler
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018
-
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018
-
Bonjour,
je cherche une seconde macro qui supprime les lignes a partir de la ligne 14 jusqu'à la ligne où dans la colonne H il y a la valeur la plus proche de -180; puis en faire une seconde supprimant les lignes à partir de la colonne H indiquant un nombre supérieur a 540 jusqu'à la fin.
mon tableau s'étant sur 10 colonnes et un nombre de lignes supérieur a 12000.
pour plus de renseignement ou avoir le fichier. demandez moi, j'espère m'être bien exprimé.
merci d'avance.
cdlt


A voir également:

13 réponses

Bonjour jof.27,

Voilà une petite Macro qui devrait résoudre ton problème

Sub Suppr_Inf180_Sup540()
NB_Debut = Sheets(1).Cells(65536, 8).End(xlUp).End(xlUp).Row + 1
Nb_Ligne = Sheets(1).Cells(65536, 8).End(xlUp).Row
    
For i = NB_Debut To Nb_Ligne
    Valeur = Sheets(1).Cells(i, 8)
    
    If Valeur < -180 Then
        GoTo Fin
    Else
        Range(Rows(NB_Debut), Rows(i - 1)).Select
        Selection.Delete
        Exit For
    End If
Fin:
Next i

Sheets(1).Cells(NB_Debut, 1).FormulaR1C1 = "=R[-10]C[7]-R[-10]C[6]"
Sheets(1).Cells(NB_Debut, 12) = ""

Nb_Ligne = Sheets(1).Cells(65536, 8).End(xlUp).Row

For i = NB_Debut To Nb_Ligne
    Valeur = Sheets(1).Cells(i, 8)
    
    If Valeur > 540 Then
        Range(Rows(i), Rows(Nb_Ligne)).Select
        Selection.Delete
        Exit For
    End If
Next i
End Sub
1
Merci

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

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

la macro fonctionne que pour tout ce qui est supérieur a 540 mais pour ce qui est inférieur a -180 elle ne marche pas.
merci pour le temps que tu passes pour essayer de résoudre mon problème
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

problème sur cette ligne apparemment
Range(Rows(NB_Debut), Rows(i - 1)).Select
merci de votre aide
C'est bizarre ça fonctionnait quand je la'i testé ?
J'ai remarqué que les montants étaient classé dans l'ordre croissant en colonne H,
C'est toujours le cas, ou parfois les montants sont mélangés ?

Qu'est ce qui ce passe avec la ligne il fait un débug ?
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

oui c'est toujours le cas. en fait devait y avoir un bug puisque je viens de la refaire elle a fonctionner seulement elle supprime que les valeurs supérieur a 540.
mais cela me suffit ca va alléger mon fichier déja.
merci beaucoup je vais partir sur une autre macro afin d'accomplir mon but final de faire des somme de la colonne L.
merci beaucoup.
Messages postés
58
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
19 juin 2013
3
Bonjour,

Voila la solution que j'ai trouvé :

Sub suppression()
For i = 14 To 12000
Sheets("éssai instationnaire").Cells(i, 13).Value = Sheets("éssai instationnaire").Cells(i, 8).Value
Next i
For i = 14 To 10000
If Sheets("éssai instationnaire").Cells(i, 13).Value < -180 Then
Sheets("éssai instationnaire").Rows(i).Delete
i = i - 1
Else
If Sheets("éssai instationnaire").Cells(i, 13).Value > 540 Then
Sheets("éssai instationnaire").Rows(i).Delete
i = i - 1
Else
End If
End If
Next i
Sheets("éssai instationnaire").Range("M1:M10000").ClearContents
End Sub


tu a dès problèmes de références dans certaines colonnes, il faudra retaper les formule sur la première ligne, et tu n'aura plus qu'a les faire glisser sur les autres (pas besoin de macro, plus simple a la main)

fais attention, cette macro est lente d'exécution, et très longue, donc ton fichier sera inutilisable jusqu'à ce qu'elle se finisse
1
Merci

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

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
58
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
19 juin 2013
3
Bonjour,

Il me manque juste deux info :


pour la 1), la valeur -180 existe-elle ? je comprends pas le fait de supprimer jusqu'à une valeur proche de -180 . Faut-il supprimer la ligne -180 ?

Quelle est le nom de la feuille du classeur utilisée ?
Messages postés
346
Date d'inscription
mardi 7 octobre 2008
Statut
Membre
Dernière intervention
2 juin 2015
113
Salam jof.27

Crée un bouton et attribue-lui le code suivant :

Private Sub CommandButton1_Click()
ligne = 14
While Cells(ligne, 8) <> ""
  If Cells(ligne, 8) < -180 Or Cells(ligne, 8) > 540 Then
    Rows(ligne).Delete
  Else
    ligne = ligne + 1
  End If
Wend
End Sub

J'ai supposé que la colonne H contient des valeurs en ordre croissant à partir de la ligne 14.

C'est bien ce que tu voulais ?
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

peut être une question bête mais comment crée-t-on un bouton?
Te casses pas la tête effectues la même manip qu'avec l'autre macro.

Sinon dans AFFICHER / BARRE OUTIL tu coches TOOLBOX et tu auras différents otption, menu déroulant bouton ect...

Une fois le bouon inséré tu fais un clique droit puis assigner macro.

Tu peux aussi insérer une image et faire la même manipulation.
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

elle existe seulement elle n'est pas toujours de -180 pile par exemple elle peut être de -180.36 ou de -179.94; je veux donc supprimer les valeurs inférieur à -180et laisser la valeur -180; dans le cas ou il y -180.36 ou -179.94 la valeur -180.36 sera alors supprimer.
voici mon travail: http://cjoint.com/13jn/CFmqxqxKZKr.htm
merci de votre réponse.
Messages postés
58
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
19 juin 2013
3
pour la second ça donnera: (j'ai prévu large avec 13000, mais sans connaitre le tableau c'est dur à dire)


sub suppression()

For i = 14 to 13000

If sheets("Feuil1").cells(i, 8).value > 540 then
sheets("Feuil1").rows(i).delete
i = i-1
Else
End if

Next i
end sub


normalement, ça fonctionnera
J'ai regardé mais il y a un problème

Quand on supprime des lignes sur ton fichier toutes les zone avec des formule passe en "REF!"
Messages postés
346
Date d'inscription
mardi 7 octobre 2008
Statut
Membre
Dernière intervention
2 juin 2015
113
Salam jof27.

Je crains que mon message ne soit passé inaperçu car nous avons posté au même moment :)

https://forums.commentcamarche.net/forum/affich-28004011-supprimer-plusieurs-ligne-par-macro#2
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

ça ne fonctionne pas, erreur sur la ligne While Cells(ligne, 8) <> "" erreur d'exception "13"
et je ne sais pas comment créer un bouton?
Messages postés
346
Date d'inscription
mardi 7 octobre 2008
Statut
Membre
Dernière intervention
2 juin 2015
113
Essaye ceci : https://www.cjoint.com/?CFnmF72lMBD

C'est peut-être plus simple pour toi.

EDIT : je crois que je suis en retard d'une guerre, désolé je n'ai pas vu les derniers messages.
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

merci quand même ^^
Messages postés
58
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
19 juin 2013
3
je bloque aussi sur ce point, je recherche une solution
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

ok merci de ton aide.
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

si on ne peut pas le faire ainsi on peut ruser, je faisais cela afin d'obtenir la somme de la colonne L à partir de -180 à 0 en H puis la somme de L de 0 à 180 en H puis la somme de 180 à 360 en H puis la somme de 360 à 540 en H. ainsi rassembler ensuite ces somme dans un tableau.
mais cela me fait refaire une macro sauf si vous trouver la solution de supprimer les points.
je ne suis pas sur de m'être bien exprimer, demandez moi si vous n'avez rien compris.
merci à vous.
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

merci la macro fonctionne et effectivement c'est vraiment très long, ce n'est pas possible de faire plus rapide?
merci beaucoup quand même.
Messages postés
58
Date d'inscription
jeudi 6 juin 2013
Statut
Membre
Dernière intervention
19 juin 2013
3
Ce serait possible en cherchant à mettre en avant des "bornes". il faudrait en gros qu'il cherche les valeurs qu'ils nous intéresse, et ensuite lui demander de tout supprimer d'un bloc, je termine un truc et je regarde ce que je peux faire ^^
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

ok merci beaucoup^car la ça fait 10minutes et n'est toujours pas fini ^^
vraiment très long quoi.
Messages postés
23989
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 avril 2021
6 718
Bonjour,

ce n'est pas possible de faire plus rapide?
On ne sait pas trop à quelle macro tu fais référence...

1) limiter la boucle à la dernière ligne utilisée:
derlig=cells(rows.count,8).end(xlup).row 'colonne 8
et sur une suppression de ligne on boucle plutôt du bas vers le haut avec step -1

2) ajouter au début du code :
Application.ScreenUpdating = False
Application.EnableEvents = False 
mlCalcStatus = Application.Calculation
Application.Calculation = xlCalculationManual

rétablir en fin de code :
Application.ScreenUpdating = true
Application.EnableEvents = true
Application.Calculation = mlCalcStatus


eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

je fais référence à celle ci: de NeoTsu
Sub suppression()
For i = 14 To 12000
Sheets("éssai instationnaire").Cells(i, 13).Value = Sheets("éssai instationnaire").Cells(i, 8).Value
Next i
For i = 14 To 10000
If Sheets("éssai instationnaire").Cells(i, 13).Value < -180 Then
Sheets("éssai instationnaire").Rows(i).Delete
i = i - 1
Else
If Sheets("éssai instationnaire").Cells(i, 13).Value > 540 Then
Sheets("éssai instationnaire").Rows(i).Delete
i = i - 1
Else
End If
End If
Next i
Sheets("éssai instationnaire").Range("M1:M10000").ClearContents
End Sub
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

merci de votre aide mais je penses malheureusement que ce ne sera pas possible puisque pour chaque valeurs j'ai besoin de la précédente, donc je voulais supprimer de façon a alléger mon fichier mais, ça me modifie tout.
je penses partir sur une autre solution qui me semble plus simple:
faire la somme de la colonne L à partir de la valeur -180 en colonne H ou ce qui s'en rapproche le plus( -180.28 non mais -179.94 oui) jusqu'à la valeur 0 en colonne H ou ce qui s'en rapproche le plus en positif ( pas -0.18 mais 0.24 par exemple).
ainsi avec cette macro je pourrais l'étendre pour faire la somme de mes autres valeurs toujours même colonne L mais de valeur dans la colonne H différentes mais suivant le même principe.
j'espère être claire dans ce que je dis.
désolé de vous avoir fait chercher une solution qui ne peut fonctionner dans mon cas.
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

je ne sais pas comment tu as réussi mais un grand merci pour le travail et le temps que tu as passé ça fonctionne parfaitement a condition de ne cliquer qu'une fois sur le bouton.
merci beaucoup.
joffrey
Messages postés
23989
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 avril 2021
6 718
j'ai édité la fin de mon post, je ne sais pas si tu as vu.
eric
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

ah oui effectivement merci beaucoup eric.
joffrey
Messages postés
23989
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
8 avril 2021
6 718
ça fonctionne parfaitement a condition de ne cliquer qu'une fois sur le bouton.
Je n'avais pas pensé que tu le lancerais plusieurs fois.
Remplacer:
Rows("13:" & derlig).Delete Shift:=xlUp
par:
If [A12].End(xlDown).Row <> Rows.Count Then Rows("13:" & derlig).Delete Shift:=xlUp

eric
Messages postés
79
Date d'inscription
lundi 3 juin 2013
Statut
Membre
Dernière intervention
13 janvier 2018

ok merci c'est fait.
niquel tout va bien.
merci beaucoup eric.

joffrey