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 !

limagerit

XLDnaute Occasionnel
BOnjour à tous,

Je voudrai vous soumettre la macro ci dessous que j'ai modifié tant bien que mal .

L'objectif est si 2 conditions sont remplies alors j'efface la ligne
J'ai un doute sur la notion for i = range D car dans mes conditions j'ai D et H

cependant la macro tourne sans soucis


Merci de votre aide
temps moyen de traitement sur 35 000 lignes +/- 3 minutes



Sub DelEditeur()
Dim i As Integer
With ThisWorkbook.Sheets("1 Planning")
'Précisez le nom de votre feuille
For i = .Range("D" & .Rows.Count).End(xlUp).Row To 2 Step -1
'je travaille sur la colonne d
'Rows.count permet de retourner le nombre de ligne de la plage range
If .Range("D" & i).Value >= "50" And Range("h" & i).Value >= 0 Then
.Rows(i).Delete
End If
Next i
End With
End Sub
 
Re : verification macro

Bonjour à tous


Tu peux aussi utiliser le filtre (en VBA), cela devrait être plus rapide qu'une boucle.

Sinon on teste sur quoi nos propositions?
Tu n'aurais pas par hasard un fichier exemple qui traine sur ton HD?

EDITION: Dim i As Long serait plus approprié.
 
Re : verification macro

BOnjour Staple1600

Merci pour ta réponse et voici un fichier modèle.

Puis je compléter ma demande si j'ai des valeurs en plus dans I ou en L

If .Range("D" & i).Value >= "50" And Range("h" & i).Value >= 0 or I >=0 Or L >=0

ca ce complique

MErci de votre aide
 

Pièces jointes

Re : verification macro

Re

Peux-tu tester cette macro et nous dire si c'est plus rapide ?
Code:
Sub DelEditeurII()
Dim pf As Range
'ici adapter la plage de cellule
ActiveSheet.Range("$A$1:$L$9").AutoFilter Field:=4, Criteria1:=">=50", Operator:=xlAnd
ActiveSheet.Range("$A$1:$L$9").AutoFilter Field:=5, Criteria1:=">0", Operator:=xlAnd
Set pf = [_FilterDataBase]
Application.ScreenUpdating = False
pf.Offset(1, 0).Resize(pf.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
ActiveSheet.ShowAllData
Application.ScreenUpdating = True
End Sub

PS: Test OK sur ton fichier exemple
 
Re : verification macro

Re________________________________EDITION: Bonjour pierrejean 😉

Avec un petit plus qui évité de devoir renseigner la plage de cellules manuellement
Code:
Sub DelEditeurIII()
Dim pf As Range, dl&
dl = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False
ActiveSheet.Range("A1:L" & dl).AutoFilter Field:=4, Criteria1:=">=50", Operator:=xlAnd
ActiveSheet.Range("A1:L" & dl).AutoFilter Field:=5, Criteria1:=">0", Operator:=xlAnd
Set pf = [_FilterDataBase]
pf.Offset(1, 0).Resize(pf.Rows.Count - 1).SpecialCells(12).Delete Shift:=xlUp
ActiveSheet.AutoFilterMode = False
Application.ScreenUpdating = True
End Sub
 
Dernière édition:
Re : verification macro

Re,

Je reviens avec la bonne solution :

Code:
Sub DelEditeur()
Dim P As Range
Set P = ThisWorkbook.Sheets("Feuil1").UsedRange 'feuille à adapter
With P.Columns(P.Columns.Count + 1) 'colonne auxiliaire
  Application.ScreenUpdating = False
  .FormulaR1C1 = "=LN(OR(ROW()=1,RC4<50,AND(RC5<0,RC9<0,RC12<0)))"
  .Value = .Value 'supprime les formules
  Union(P, .Cells).Sort .Cells, xlAscending 'le tri accélère la suppression
  On Error Resume Next 's'il n'y a pas de valeurs d'erreur
  .SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
  .ClearContents
End With
End Sub
Bien noter que la formule auxiliaire renvoie des 0 (conservés) et des valeurs d'erreur (supprimées).

J'espère que c'est bien ce que vous voulez pour les colonnes I (9) et L(12).

Chez moi (Excel 2010) la macro s'exécute en 0,59 seconde sur 36000 lignes.

A+
 
Re : verification macro

BOnjour à tous et merci pour vos réponses.

Job 75 , effectivement cela tourne en qq secondes mais tu effaces toutes les valeurs de 50 et 80 indépendamment de la valeur en H .

Pierre jean Merci pour ton approche, mais l'idée n'est pas de copier le résultat. Cela dit cela m'ouvre des réflexions sur un autre sujet et je t'en remercie

Staple1600 ,
Merci pour la correction, j'ai le résultat attendu avec un temps de réponse qui passe de 3 minutes à qq secondes

Pour le fun, je vais m'amuser a inverser la macro pour effacer mes 20 et 40 afin de vérifier les résultats restants et valider ta macro.

Bonne journée à tous et surtout grand merci pour vos coups de pouce toujours aussi précieux
 
Re : verification macro

Re,

Job 75 , effectivement cela tourne en qq secondes mais tu effaces toutes les valeurs de 50 et 80 indépendamment de la valeur en H .

Le fichier de votre post #3 parlait de la colonne E (5) pas de H (8)...

Donc s'il faut traiter H (8) il est facile d'adapter :

Code:
Sub DelEditeur()
Dim P As Range
Set P = ThisWorkbook.Sheets("Feuil1").UsedRange 'feuille à adapter
With P.Columns(P.Columns.Count + 1) 'colonne auxiliaire
  Application.ScreenUpdating = False
  .FormulaR1C1 = "=LN(OR(ROW()=1,RC4<50,AND(RC8<0,RC9<0,RC12<0)))"
  .Value = .Value 'supprime les formules
  Union(P, .Cells).Sort .Cells, xlAscending 'le tri accélère la suppression
  On Error Resume Next 's'il n'y a pas de valeurs d'erreur
  .SpecialCells(xlCellTypeConstants, 16).EntireRow.Delete
  .ClearContents
End With
End Sub
Il suffit d'avoir compris la formule entrée dans la colonne auxiliaire.

Par ailleurs même sur 35000 lignes cela doit prendre quelques dixièmes de seconde.

A+
 
Re : verification macro

Re

Curieux !!
Je teste ta macro Gerard et je ne constate pas vraiment un temps de l'ordre de la seconde
Par ailleurs j'ai modifié la mienne pour remplacer et non plus recopier (je n'ai pas suivi le pb de colonne E ou H)
Peux-tu m'eclairer ?
 

Pièces jointes

Re : verification macro

Bonjour Pierre,

Curieux !!
Je teste ta macro Gerard et je ne constate pas vraiment un temps de l'ordre de la seconde (...)
Peux-tu m'eclairer ?

Ci-joint le fichier du post #3 avec un tableau de 36000 lignes.

La durée d'exécution de la macro est de 0,59 s chez moi (Win7-Excel 2010).

Et chez toi ??

NB : 6 lignes sur 8 sont supprimées.

A+
 

Pièces jointes

Re : verification macro

Re

Effectivement je suis bien à 0.4 s Avec Excel 2010
Je tourne habituellement sous Excel 2007 (parce que je suis nul et n'ai pas réussi à dire a mon Windows XP de bien vouloir ouvrir le .xlsm avec 2010 et non 2007)
Quant à la mienne elle tourne en 0.8 s aussi bien en 2007 que 2010
 
- 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
15
Affichages
788
Réponses
5
Affichages
914
Réponses
7
Affichages
178
Retour