vba creer une boucle pour effacer plusieurs plages de cellules identiques

pascal21

XLDnaute Barbatruc
bonjour le forum
je n'arrive pas a trouver le syntaxe exacte qui permet de créer une boucle permettant effacer plusieurs plages de cellules identiques (nombre de lignes identiques)
donc il s'agit de la plage c4:aa30
la ligne 31 ne doit pas etre effacée
ensuite de la plage c32:aa59
la ligne 60 ne doit pas etre effacée
etc....
jusqu'à la ligne 12000
nombre de lignes: 27 à chaque fois
merci de votre aide
 

pierrejean

XLDnaute Barbatruc
Bonjour pascal
Il y a une petite erreur dans ton énoncé
C4:AA30 donne 27 lignes
C32:AA59 donne 28 lignes

A tester avec C4:AA30 et 27 lignes :

Code:
Sub test()
Application.ScreenUpdating = False
For n = 12014 To 30 Step -28
  Range("C" & n - 26 & ":AA" & n).Delete
Next
Application.ScreenUpdating = True
End Sub
 

pascal21

XLDnaute Barbatruc
bonjour Pierrejean et merci
j'ai toujours autant de mal avec les boucles en fait
pourtant il n'y a rien de compliqué comparé à certains codes
bonne journée
edit:
je viens de tester
ça prend énormément de temps: 20 sec
ça efface toutes les lignes sauf les lignes 1 à 11 (?)
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Bonjour,

S'il y a quelque chose de particulier et identique sur les lignes à ne pas effacer, utilise un filtre puis efface les lignes visibles.

Un fichier avec des données bidons mais reflétant la réalité de ton fichier, nous aurait permis de mieux cerner ton problème.

Edit: oups! pas vu les gars, Bonjour:)
 

CBernardT

XLDnaute Barbatruc
Bonjour à tous,

Essaye cette macro

Sub EffacerPlagesIdentiques()
Dim Derlig As Integer
' Effacer les lignes de plages de lignes
Application.ScreenUpdating = False
With Sheets("Feuil1")
' Recherche de la dernière ligne du tableau
Derlig = (Application.RoundUp(12000 / 27, 0) * 27) + 4
For i = Derlig To 5 Step -27
.Range(.Cells(i - 1, 3), .Cells(i - 26, 3)).EntireRow.Delete
Next i
End With
End Sub
 

job75

XLDnaute Barbatruc
Bonjour Pascal, Pierre, cathodique, Bernard,

Si l'on veut que ça aille vite ne pas utiliser de boucle :
Code:
Sub SupprimerLignes()
Dim t#
t = Timer
Application.ScreenUpdating = False
With Feuil1 'CodeName de la feuille
  With .[AB4:AB12000] '1ère colonne vide, à adapter
    .Formula = "=1/NOT(MOD(ROW()-2,29))"
    .Value = .Value 'supprime les formules
    .EntireRow.Sort .Cells, xlAscending, Header:=xlNo 'tri pour accélérer
    .SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
    .Value = "" 'RAZ
  End With
  With .UsedRange: End With 'actualise les barres de défilement
End With
Application.ScreenUpdating = True
MsgBox "Durée des suppressions " & Format(Timer - t, "0.00 \s") 'juste pour tester
End Sub
J'ai strictement suivi les indications du post #1 : conserver la ligne 31 puis la ligne 60 etc... donc le pas est de 29.

Gros fichier joint.

Edit : noter en passant que le tri conserve la hauteur des lignes jaunes si on les augmente.

A+
 

Pièces jointes

  • Supprimer lignes(1).xlsm
    1.8 MB · Affichages: 56
Dernière édition:

job75

XLDnaute Barbatruc
Re,

On peut comme le suggère cathodique utiliser le filtre avancé :
Code:
Sub SupprimerLignes()
Dim t#
t = Timer
Application.ScreenUpdating = False
With Feuil1 'CodeName de la feuille
  With .[C3:AA12000] 'plage à adapter
    .Cells(2, 26).FormulaR1C1 = "=MOD(ROW(R)-2,29)"
    .AdvancedFilter xlFilterInPlace, .Cells(1, 26).Resize(2)
    .Offset(1).EntireRow.Delete
  End With
  .ShowAllData
  With .UsedRange: End With 'actualise les barres de défilement
End With
Application.ScreenUpdating = True
MsgBox "Durée des suppressions " & Format(Timer - t, "0.00 \s") 'juste pour tester
End Sub
Chez moi cette solution prend 7 fois plus de temps que la solution précédente.

Fichier joint.

A+
 

Pièces jointes

  • Supprimer lignes avec le filtre avancé(1).xlsm
    1.8 MB · Affichages: 35

pascal21

XLDnaute Barbatruc
bonsoir à tous et merci pour vos réponses
je ne me suis pas bien exprimé en fait
vous avez compris effacer les lignes c'est ce que j'ai écrit d'ailleurs
alors que je voulais dire effacer LE CONTENU des lignes
faut que j'arrive à comprendre et à modifier le code de JOB 75
 

job75

XLDnaute Barbatruc
Re,

S'il ne s'agit que d'effacer (???) les 2 méthodes sont à peu de chose près équivalentes, nouveaux fichiers joints.
 

Pièces jointes

  • Effacer lignes(1).xlsm
    1.8 MB · Affichages: 50
  • Effacer lignes avec le filtre avancé(1).xlsm
    1.8 MB · Affichages: 43

job75

XLDnaute Barbatruc
Re,

Une remarque sur la 1ère méthode (par formule).

Si au départ la feuille est filtrée il faut tout afficher :
Code:
  If .FilterMode Then .ShowAllData 'si la feuille est filtrée
Ce n'est pas nécessaire pour la 2ème méthode (avec le filtre avancé).

Fichiers (1 bis).

Bonne fin de soirée.
 

Pièces jointes

  • Supprimer lignes(1 bis).xlsm
    1.8 MB · Affichages: 39
  • Effacer lignes(1 bis).xlsm
    1.8 MB · Affichages: 55

Discussions similaires

Réponses
7
Affichages
343

Statistiques des forums

Discussions
312 169
Messages
2 085 923
Membres
103 041
dernier inscrit
Ousmane