Boucle for trop lente

Bonjour,

Je suis confronté à un problème, je trouve ma boucle beaucoup trop lente (10 min).

Lorsque je la teste sur un fichier simple, cela marche quasi instantanément. Mais si je l'applique sur le fichier qui m'intéresse, c'est extrément lent. Je précise que la feuille sur laquelle je veux que s'applique la macro contient une infinité de formule (et longue), je pense que cela provient de là.

La macro n'est pas très compliqué en français, je souhaiterais supprimer toutes les lignes dont la cellule concernée est égal à 0.

    Dim i%
          For i = 530 To 9 Step -1
              If (Worksheets("Statistiques descriptives").Range("D" & i) = "0") Then Worksheets("Statistiques descriptives").Range("D" & i).EntireRow.Delete
          Next i

Le forum,

Enlève les guillemets entourant le zéro.

Jim

Bonjour

peux être comme ca

Sub Test()
Dim I As Long
Worksheets("Statistiques descriptives").Select
   With Application
      .ScreenUpdating = False
      .EnableEvents = False
      .Calculation = xlManual
   End With
        For I = 530 To 9 Step -1
            If Range("D" & I) = 0 Then Rows(I).Delete
        Next I
   With Application
      .ScreenUpdating = True
      .Calculation = xlCalculationAutomatic
      .EnableEvents = True
      .CutCopyMode = False
      .Goto [A1], True
   End With
MsgBox "Terminer"
End Sub

A+

Maurice

D'accord. Je testerais les solutions proposés demain (j'ai quitté le boulot)

Le problème c'est que j'avais besoins des guillemets autour de 0 car sinon la macro m'efface les lignes dont les cellules sont vide. Or j'ai potentiellement besoins de celles ci (2 tableau similaires l'un en dessous de l'autre séparé par un espace vide)

Bonsoir,

Un bon moyen pour optimiser ta boucle, c'est de stocker les lignes à supprimer et ensuite de les supprimer globalement.

Ci-dessous code

Sub suppression_lignes()
    Dim i%, lignes_supp As Range

    With Sheets("Statistiques descriptives")
        For i = 9 To 530
            If .Cells(i, "D") = "0" Then
                If lignes_supp Is Nothing Then Set lignes_supp = .Rows(i) _
                Else Set lignes_supp = Union(lignes_supp, .Rows(i))
            End If
        Next i
    End With
    If Not lignes_supp Is Nothing Then lignes_supp.Delete

End Sub

Bravo, thev ! elle est super, ton idée !!! dhany

Bonjour,

Merci beaucoup pour votre aide.

Je pense que je vais utiliser la méthode de Thev, la macro met 7 seconde à s'activer et celle de Archer 9.

Mais je retiens les 2 méthode tout de même. Merci encore

Bonjour à tous,

un filtre auto sur la colonne et supprimer les lignes ne demandait pas de vba

mais on ne voit pas le fichier

P.

Re,

Oui je sais, mais c'est au boulot ils veulent tout automatiser . Et sa s'insère dans d'autre ligne de code pour la mise en forme

Re,

Oui je sais, mais c'est au boulot ils veulent tout automatiser . Et sa s'insère dans d'autre ligne de code pour la mise en forme

Tu peux aussi faire une macro qui utilise le filtre de cette manière, c'est très rapide

Je me doute bien que c'est souvent à la demande des "chefs" mais....perso, je suis contre le tout automatique; il faut faire du VBA quand on a des milliers d'actions à effectuer et on fait du vba quand on a bien appréhendé les bases d'excel, ils devraient le savoir

Bon courage !

P.

Rechercher des sujets similaires à "boucle trop lente"