Optimiser le temps de réponse de macro VBA supprimer lignes

Résolu
BOBO -  
 BOBO -

Bonjour,

J'aimerais savoir s'il est possible de gagner du temps car ma macro met environ 30 secondes pour lire les 3000 lignes.

Voici le code, celui-ci est fonctionnel:

Sub Supprimerligne()
 Dim i As Long

Application.ScreenUpdating = False

 With Sheets("bipage_moules")
  For i = 3000 To 12 Step -1
   If .Cells(i, 11).Value = "A supprimer" Or .Cells(i, 11).Value = "" Then Rows(i).EntireRow.Delete
  Next i
 End With

 Application.ScreenUpdating = True
End Sub

4 réponses

  1. via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   2 759
     

    Bonjour

    3000 lignes ce n'est rien du tout, si la macro met tant de temps c'est peut être à cause du recalcul de certaines formules

    Essaie en début de macro de passer en manuel  avec Application.Calculation = xlCalculationManual
    puis reviens an calcul auto en fin de macro : Application.Calculation = xlCalculationAutomatic

    Cdlmnt

    Via


    0
    1. BOBO
       

      Bonjour,

      Merci de votre retour, je met toujours 24 secondes après avoir mis en place votre conseil.

      J'ai rentré le code suivant:

      Sub Supprimerligne()

      Application.Calculation = xlCalculationManual

      Application.ScreenUpdating = False


       Dim i As Long

       With Sheets("bipage_moules")
        For i = 3000 To 12 Step -1
         If .Cells(i, 11).Value = "A supprimer" Or .Cells(i, 11).Value = "" Then Rows(i).EntireRow.Delete
        Next i
        
       
        
       End With


      Dim fichier As Workbook
      Dim onglet As Worksheet
      Dim extrait As Worksheet
      Dim derniere_ligne As Long

      'identifier le fichier et l'onglet

      Set fichier = ActiveWorkbook

      Set onglet = fichier.Worksheets("bipage_moules")

      Set extrait = fichier.Worksheets("Reparation")


      'trouver la dernière ligne du tableau

      derniere_ligne = extrait.Cells(Rows.Count, 1).End(xlUp).Row + 1

      'copier coller les cellules

      With extrait

      .Cells(derniere_ligne, 1) = onglet.Cells(6, 3)

      End With

       Application.ScreenUpdating = True
       
        Application.Calculation = xlCalculationAutomatic
       
      End Sub

      0
  2. via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   2 759
     

    Re

    Le code est correct, chez moi il met 3 secondes à s'éxécuter

    Tu as beaucoup de lignes à supprimer ??


    0
    1. BOBO
       

      J'ai essayé sur une nouvelle feuille d'un nouveau classeur, il met également peu de temps.

      Je pense que le fait d'avoir d'autres macros le ralentisse.

      As-tu des idées?

      Merci par avance.

      0
      1. BOBO > BOBO
         

        environ 2-3 secondes

        0
      2. BOBO > BOBO
         

        je dois supprimer environ 30 lignes quand j'actionne la macro

        0
  3. via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   2 759
     

    D'autres macros qui peuvent être lancées en sous-main style des macros événement de feuille pour tout changement dans la feuille par exemple peuvent effectivement considérablement ralentir l'autre macro

    Mais des macros inactives non


    0
  4. BOBO
     

    J'ai réussi à passer de 7 à 8 secondes pour ma macro en supprimant des lignes d'une autre feuille. Je saurais m'en contenter.

    Merci pour ton aide

    0