[VBA excel] macro bloquée par taille fichier
pol_38
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Débutant en VBA-excel, j'ai créé une petite macro qui efface les lignes d'un fichier contenant le mot "DOC" dans la colonne 6.
Elle fonctionne pour un petit fichier mais bloque si le fichier devient trop lourd (>10 000 lignes).
Quelqu'un aurait une idée pour optimiser cette macro et la faire tourner qqe soit la taille du fichier?
Quand le fichier est trop lourd, j'ai le message d'erreur suivant:
"delete method of Range class failed"
Voici le code:
Sub Prodel_Rows()
Rows("1:1").Select
Cells.AutoFilter
Selection.AutoFilter Field:=6, Criteria1:="DOC"
Range("A2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
End Sub
Merci d'avance pour votre aide!!
Débutant en VBA-excel, j'ai créé une petite macro qui efface les lignes d'un fichier contenant le mot "DOC" dans la colonne 6.
Elle fonctionne pour un petit fichier mais bloque si le fichier devient trop lourd (>10 000 lignes).
Quelqu'un aurait une idée pour optimiser cette macro et la faire tourner qqe soit la taille du fichier?
Quand le fichier est trop lourd, j'ai le message d'erreur suivant:
"delete method of Range class failed"
Voici le code:
Sub Prodel_Rows()
Rows("1:1").Select
Cells.AutoFilter
Selection.AutoFilter Field:=6, Criteria1:="DOC"
Range("A2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
End Sub
Merci d'avance pour votre aide!!
Configuration: Windows XP Internet Explorer 6.0 excel 2003
2 réponses
-
Bonjour,
autre point !
désactiver l'affichage pour alléger l'exécution :Sub Test1() Application.ScreenUpdating = False ' ... ' Code ' ... Application.ScreenUpdating = True End Sub '
Lupin -
Bonjour Pol_38,
Avec la méthode Filter, ça peut aller vite.... Pour l'instant, cette méthode te bloque car message d'erreur. Je te propose, en attendant, ce code qui prend un peu plus de temps( ex. 30 sec pour 13 000 lignes) mais qui réussit.
a = 1
EndTable = Range("F65536").End(xlUp).Row
For I = 2 To EndTable
a = a + 1
If Cells(a, 6) = "DOC" Then
Cells(a, 6).EntireRow.Delete
a = a - 1
End If
Next I
Merci.