vba creer une boucle pour effacer plusieurs plages de cellules identiques

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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:
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🙂
 
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
 
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

Dernière édition:
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

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
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
799
Retour