Accélérer macro

EXCELERATOR

XLDnaute Junior
Bonjour,

J'ai un fichier qui me permet de traiter des données.

J'ai une macro pour supprimer les lignes, mais elle est très très lente... sniff

Si quelqu'un a une idée pour la booster ?

Merci

Sub ETAPE2B()
Dim i As Long
For i = [A8001].End(xlUp).Row To 2 Step -1
Select Case Left(Cells(i, 1), 2)
Case "", "0"
Rows(i).Delete
End Select
Next i
End Sub
 

mromain

XLDnaute Barbatruc
Re : Accélérer macro

bonjour EXCELERATOR,

voici Ce lien n'existe plus de l'excellent Laurent Longre dédié à l'accélération du code.
La partie 2 est très facile à mettre en place et assez efficace. Les parties 1 et 3 sont plus des bonnes pratiques plus ou moins spécifiques à Excel.

a+
 

Staple1600

XLDnaute Barbatruc
Re : Accélérer macro

Bonjour



Avec ceci , cela devrait aller plus vite

Pour tester , il faut un entête à ta colonne A
Code:
Sub test_suppr_lignes()
Dim I_Will As Range, f As Range
Application.ScreenUpdating = False
[B2].FormulaR1C1 = "=MID(RC[-1],2,1)*1=0"
Range([A1], [A65536].End(xlUp)).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B1:B2"), Unique:=False
Set f = [_FilterDataBase]
Set I_Will = f.Offset(1, 0).Resize(f.Rows.Count - 1).SpecialCells(12)
Application.DisplayAlerts = False
I_Will.Delete: Columns(2).Delete
ActiveSheet.ShowAllData
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
 

EXCELERATOR

XLDnaute Junior
Re : Accélérer macro

Merci pour ta réponse rapide STAPLE 1600:
J'ai toutefois une erreur comme ci-dessous ??


Sub test_suppr_lignes()
Dim I_Will As Range, f As Range
Application.ScreenUpdating = False
[B2].FormulaR1C1 = "=MID(RC[-1],2,1)*1=0"
Range([A1], [A65536].End(xlUp)).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B1:B2"), Unique:=False
Set f = [_FilterDataBase]
Set I_Will = f.Offset(1, 0).Resize(f.Rows.Count - 1).SpecialCells(12)
Application.DisplayAlerts = False
I_Will.Delete: Columns(2).Delete
ActiveSheet.ShowAllData
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Accélérer macro

Re

Chez moi pas d'erreur :D

Bon bah j'arrive chez toi alors, t'habite ou dans Longwy?

(et on mange quoi ce midi ? j'ai faim )

Après relecture de mon code, je détaille ce qu'il fait
Il suprimme les lignes dont les cellules contiennent un 0 en deuxième position
ex: si en colonne A, des cellules contiennent les nombres ci-dessous, leur ligne seront effacées
20
205
2015

or toi tu veux effacer les lignes des cellules vides et des cellules égales à zéro c'est cela ?

Si oui, il suffira de modifier mon code précédent

Mais pour le moment je m'absente

Bon appétit à tous
 
Dernière édition:

mromain

XLDnaute Barbatruc
Re : Accélérer macro

re,

Voici un exemple d'utilisation de ce qui est présenté sur le précédent lien et qui est facilement appliquable quelque soit la macro utilisée :
Code:
Public Sub MacroMajCalendrier()
Dim mem1 As Long, mem2 As Long, mem3 As Long
    'mémoriser/désactiver les options d'excel
    mem1 = Application.Calculation: Application.Calculation = xlCalculationManual
    mem2 = Application.EnableEvents: Application.EnableEvents = False
    mem3 = Application.ScreenUpdating: Application.ScreenUpdating = False
    
    'exécuter la macro
    On Error Resume Next
     [COLOR=Red][B]ETAPE2B[/B][/COLOR]
    On Error GoTo 0
    
    'rétablir les options d'excel
    Application.Calculation = mem1
    Application.EnableEvents = mem2
    Application.ScreenUpdating = mem3

End Sub

a+
 

Odesta

XLDnaute Impliqué
Re : Accélérer macro

Bonjour à tous

J'ai eu le même cas hier, j'ai voulu travailler sur à peine 200 lignes et quelques colonnes, et la copie prennait presque 1 seconde par ligne ! L'origine : de nombreuse cellules calculée, et un Excel qui fait son recalcul à chaque changement, même d'un autre classeur.

Ma solution : la même que celle proposé par mromain : virer ce fichut calcul auto, puis le rétablir : Application.Calculation = xlCalculationManual / Application.Calculation = xlCalculationAuto.
Le gain est spectaculaire.

O
 

EXCELERATOR

XLDnaute Junior
Re : Accélérer macro

Salut ROMAIN et ODESTA,

Merci pour ta solution, ça va accélérer un peu mon fichier.

Mais il mouline toujours !! :D

Je vais continuer de cherche un code qu'excel gérera plus rapidement, je vous fais signe si je trouve quelque chose?.

:cool:
 

Staple1600

XLDnaute Barbatruc
Re : Accélérer macro

Re


Je vais continuer de cherche un code qu'excel gérera plus rapidement, je vous fais signe si je trouve quelque chose?.
Utilises en le modifiant celui indiqué quand j'avais faim :D

Tu verras que c'est très rapide.

EDITION: voici la version modifiée selon ta problématique

Code:
Sub test_suppr_lignes_v2()
Dim I_Will As Range, f As Range
Application.ScreenUpdating = False
[B2].FormulaR1C1 = "=OR(CODE(MID(RC[-1],1,1))=32,CODE(MID(RC[-1],1,1))=48)"
Range([A1], [A65536].End(xlUp)).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B1:B2"), Unique:=False
Set f = [_FilterDataBase]
Set I_Will = f.Offset(1, 0).Resize(f.Rows.Count - 1).SpecialCells(12)
Application.DisplayAlerts = False
I_Will.Delete: Columns(2).Delete
ActiveSheet.ShowAllData
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

PS: Chez moi cela fonctionne, donc si ce n'est pas le cas chez toi
relis bien mes messages.
 
Dernière édition:

hd006

XLDnaute Nouveau
Re : Accélérer macro

Bonjour le forum,
Je me fixe a ce post car j'ai un fichier de 3211 KO avec des userforms (20) ( je ne peut pas transmettre de fichier car les modififs créer des bugs) il y a beaucoup de checkbox et ce rame grave . Mis seul sur un autre fichier les userform fonctionne sans aucun probleme ça fonce 1 seconde mais dans mon fichier 25 secondes.
Avez vous déja recontré ce probleme ? merci de votre aide

HD006
 

Discussions similaires

Statistiques des forums

Discussions
312 414
Messages
2 088 230
Membres
103 775
dernier inscrit
CriCri92