Partager via

Vitesse d'exécution VBA - optimiser code

Anonyme
2012-10-30T08:22:26+00:00

Bonjour

J'ai le code suivant qui copie des formules vers le bas, puis qui supprime les lignes où il n'y a pas de résultat afin que la construction d'un graphique ultérieur ne soit pas perturbée. Le problème est que l'exécution de ce code prend bien plus de 5 minutes...

Est-ce que quelqu'un serait en mesure d'optimiser ce code pour que la suppression prenne moins de temps ?

' Copie les formules vers le bas

    Range("F1:J1").Select

    Selection.AutoFill Destination:=Range("F1:J2500"), Type:=xlFillDefault

    Range("F1:J2500").Select

' Supprime les lignes non utilisées à la fin de la base de donnée

For i = Range("H2501").End(xlUp).Row To 1 Step -1

If Range("H" & i) = Empty Then Rows(i).Delete Shift:=xlUp

Next

Merci à tous de votre aide et bonne journée

Vince

Microsoft 365 et Office | Excel | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

Réponse acceptée par l’auteur de la question

DanielCo 107.7K Points de réputation
2012-10-30T09:24:37+00:00

Bonjour,

Essaie :

Application.ScreenUpdating = False

' Copie les formules vers le bas

Range("F1:J1").AutoFill Destination:=Range("F1:J2500"), Type:=xlFillDefault

' Supprime les lignes non utilisées à la fin de la base de donnée

Range("H1:H2500").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Application.ScreenUpdating = True

Cordialement.

Daniel

Cette réponse a-t-elle été utile ?

0 commentaires Aucun commentaire

2 réponses supplémentaires

  1. Anonyme
    2013-01-24T12:09:10+00:00

    Bonjour,

    Essaie ceci :

    '---------------------------------------------------
    Sub test()
    Dim Rg As Range, X As Long

    Application.ScreenUpdating = True
    Application.EnableEvents = False

    With Worksheets("Feuil1")
       With .Range("F1:J2500")
           X = Application.Calculation
           Application.Calculation = xlCalculationAutomatic
           .FillDown
           Application.Calculation = xlCalculationManual
           .AutoFilter Field:=3, Criteria1:="="
           Set Rg = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
           On Error Resume Next
           Rg.SpecialCells(xlCellTypeVisible).EntireRow.Delete
           .AutoFilter
       End With
    End With

    Application.Calculation = X Application.ScreenUpdating = True Application.EnableEvents = True End Sub '---------------------------------------------------  MichD

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. Anonyme
    2013-01-24T11:10:14+00:00

    Bonjour

    Tout d'abord merci à DanielCo d'avoir répondu. Ce n'est qu'aujourd'hui que je peux tester le code, je suis navré de ne pas m'être manifesté avant.

    En fait il fonctionne très bien si la cellule est complètement vide. Par contre, dans mon cas, j'ai des formules partout qui restent et dont le résultat est zéro (enfin "" dans le code VBA).

    Et là il me sort une erreur 1004 "No cells were found"

    Par quoi pourrais-je donc compléter le code ?

    Merci de votre aide et bonne journée

    vincent

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire