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

Résolu/Fermé
BOBO - 7 nov. 2022 à 11:33
 BOBO - 7 nov. 2022 à 17:29

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

A voir également:

4 réponses

via55 Messages postés 14477 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 3 octobre 2024 2 730
7 nov. 2022 à 13:10

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

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
via55 Messages postés 14477 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 3 octobre 2024 2 730
7 nov. 2022 à 14:13

Re

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

Tu as beaucoup de lignes à supprimer ??


0

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

environ 2-3 secondes

0

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

0
via55 Messages postés 14477 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 3 octobre 2024 2 730
7 nov. 2022 à 16:41

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

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