Optiomisation code vba

Yaniv

XLDnaute Junior
Bonjour tout le monde alors voila je dispose du code suivant
Code:
Sub test1()
Dim lastlig As Long, i As Long
Application.ScreenUpdating = False
With Worksheets("Vanilla")
    lastlig = Range("AA" & Application.Rows.Count).End(xlUp).Row
    For i = lastlig To 2 Step -1
        If Application.CountA(.Range("AA" & i)) = 0 Then .Rows(i).Delete
    Next i
End With
End Sub

 Sub test2()
 Dim lastlig As Long, i As Long
Application.ScreenUpdating = False
With Worksheets("Vanilla")
    lastlig = Range("AA" & Application.Rows.Count).End(xlUp).Row
    For i = lastlig To 2 Step -1
         If .Range("AA" & i).Interior.Color = 0 Or .Range("AA" & i).Font.Color = 255 Then .Rows(i).Delete
    Next i
End With
 End Sub

Cependant ce code ne marche que lorsque je le teste sur une petite base de données
Or lorsque je le test sur une base de 50000lignes , il reste en train d essayer de s executer mais au final aucun resultat et je suis oblige de quitter excel. j aimerais savoir svp comment faire pour que son temps de calcul soit diminue afind de pouvoi l appliquer sur une vaste bdd
 

Dranreb

XLDnaute Barbatruc
Re : Optiomisation code vba

Bonjour.
S'il y a des formules dans la feuille, très conseillé de positionner Application.Calculation = xlCalculationManual au début et xlCalculationAutomatic à la fin.
Oups, il manque aussi un point: lastlig = .Range(…
Cordialement.
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Optiomisation code vba

Bonjour Yaniv, Dranreb.



Une suggestion, sans garantie...​
VB:
Sub test1()
Dim lastlig As Long, i As Long
    With Application: .ScreenUpdating = 0: .EnableEvents = 0: .Calculation = -4135: End With
    With Worksheets("Vanilla")
        lastlig = .Range("AA" & Application.Rows.Count).End(xlUp).Row
        For i = lastlig To 2 Step -1
            If WorksheetFunction.CountA(.Range("AA" & i)) = 0 Then .Rows(i).Delete
        Next i
    End With
    With Application: .Calculation = -4105: .EnableEvents = 1: .ScreenUpdating = 1: End With
End Sub



ROGER2327
#6576


Mardi 17 Clinamen 140 (Saint Hiéronymus Bosch, démonarque - fête Suprême Quarte)
19 Germinal An CCXXI, 6,2916h - radis
2013-W15-1T15:05:59Z
 

Yaniv

XLDnaute Junior
Re : Optiomisation code vba

Merci de votre reponse ROger toutefois tout comme la propose Dranreb , dans les 2 cas lorsque j execute ca me met des ecrans blancs puis ca plante , je me dis qd meme que c bizarre psk 50000 lignes c pas enorme pour un developpeur
 

ROGER2327

XLDnaute Barbatruc
Re : Optiomisation code vba

Re...


Merci de votre reponse ROger toutefois tout comme la propose Dranreb , dans les 2 cas lorsque j execute ca me met des ecrans blancs puis ca plante , je me dis qd meme que c bizarre psk 50000 lignes c pas enorme pour un developpeur
Je ne comprends pas tous les détails de votre message, mais j'en saisis le sens général. Il est exact que l'affichage d'Excel est bizarre durant l'exécution du code. Mais le code fait le boulot sans plantage.
Je viens de tester sur 57 905 lignes, dont 24 750 à supprimer : une centaine de secondes. C'est lent, certes, mais on ne peut guère espérer de miracle avec ce style de code.
Difficile d'en dire plus sans connaître le contexte dans lequel vous exécutez la procédure.​


ROGER2327
#6578


Mardi 17 Clinamen 140 (Saint Hiéronymus Bosch, démonarque - fête Suprême Quarte)
19 Germinal An CCXXI, 6,5802h - radis
2013-W15-1T15:47:33Z
 

Papou-net

XLDnaute Barbatruc
Re : Optiomisation code vba

Bonsoir Yaniv, Bernard, Roger,

Sans garantie, une autre solution à tester :

Code:
Sub test2()
Dim cel As Range, Plage As Range
With Worksheets("Vanilla")
  For Each cel In .Range("AA:AA").SpecialCells(xlCellTypeConstants)
    If cel.Interior.Color = 0 Or cel.Font.Color = 255 Then
      If Plage Is Nothing Then
        Set Plage = cel
        Else
        Set Plage = Application.Union(Plage, cel)
      End If
    End If
  Next
  Plage.EntireRow.Delete
End With
End Sub
NB : Application.ScreenUpDating et consorts ne sont plus d'aucune utilité ici.

Cordialement.
 
Dernière édition:

Discussions similaires

Réponses
5
Affichages
198

Statistiques des forums

Discussions
312 337
Messages
2 087 392
Membres
103 536
dernier inscrit
komivi