[Optimisation]Macro Excel trop longue en chargement

Bonjour,

Je dois réaliser une macro qui :

  • enleve tous les filtres , (bon )
  • masque toutes les lignes qui comprennent un " - " en F (bon aussi )
  • masque toutes les ligne vide en C

Le programme marche mais il prend environ 5 min pour que la macro finisse le programme.

(environ 8000 lignes )

Besoin de votre aide pour optimiser encore plus la macro je débute en VBA :/

Merci !!

Voila le code:

Sub masquelignevide()

ActiveSheet.ShowAllData

On Error Resume Next

MsgBox "Temps estimé 5min. Le temps de prendre un café! APPUYEZ SUR OK POUR LANCER LA MACRO"

Dim z As Long, i As Long

Application.ScreenUpdating = False

z = Cells.Find("*", , , , , xlPrevious).Row + 1

Range("A" & z & ":A" & 20000).EntireRow.Hidden = True

For i = 1 To Cells.Find("*", , , , , xlPrevious).Row

If Range("A" & i & ":iv" & i).Rows.Count - Application.CountBlank(Range("A" & i & ":iv" & i)) = -255 Then

Rows(i).EntireRow.Hidden = True

End If

Next i

For Each cellule In [C1:C20000]

If cellule.Value = "" Then cellule.EntireRow.Hidden = True

Next cellule

For Each cellule In [F1:F20000]

If cellule.Value = "-" Then cellule.EntireRow.Hidden = True

Next cellule

End Sub

Bonjour,

Si ton classeur contient environ 8000 lignes, pourquoi faire des recherches sur 20000

Il faudrait déjà rechercher la dernière ligne remplie pour éviter de faire des boucles inutiles

et en ajoutant la ligne "

Application.screenUpdating=false

" en début de macro, cela réduirait le temps

Pour l'optimiser, il serait mieux de placer un classeur exemple sans données confidentielle

Bonjour,

tu peux peut-être réduire la plage de travail ?

Tu indiques dans un premier temps 8000 lignes

Mais dans ta macro tu sélectionnes une plage qui va jusqu'à 20 000 essaies déjà de réduire à 10000

Arf M12 plus rapide ….. Bonjour M12

Bonjour a tous,

Un essai avec un filtre:

Sub TestFiltre()

With ActiveSheet

.Range("$A$1:$F$1").AutoFilter

.Range("$A$1:$F$20000").AutoFilter Field:=6, Criteria1:="<>*-*"

.Range("$A$1:$F$20000").AutoFilter Field:=3, Criteria1:="<>"

.Range("A2").Select

End With

End Sub

"F" étant à ajuster suivant le tableau à trier.

Cordialement

Merci , maintenant le programme tourne pendant seulement 1min 30 ! Donc un gros gain de temps par rapport au 4-5 min de base

Bonjour,

Si ton classeur contient environ 8000 lignes, pourquoi faire des recherches sur 20000

Il faudrait déjà rechercher la dernière ligne remplie pour éviter de faire des boucles inutiles

et en ajoutant la ligne "

Application.screenUpdating=false

" en début de macro, cela réduirait le temps

Pour l'optimiser, il serait mieux de placer un classeur exemple sans données confidentielle

J'ai déplacé le code "

Application.screenUpdating=false

" en début de macro et celle-ci semble plus rapide ! Merci pour l'astuce !

Rechercher des sujets similaires à "optimisation macro trop longue chargement"