Comment optimiser une macro VBA ?
Nawellita
Messages postés
6
Statut
Membre
-
Nawellita Messages postés 6 Statut Membre -
Nawellita Messages postés 6 Statut Membre -
Bonjour,
J'ai un soucis sur une macro VBA qui est très longue à s'actualiser. Ca peut aller jusqu'à 30 min pour traiter 5000 lignes. Il faut que je trouve une solution pour la semaine prochaine.... Le but de ma macro est de supprimer les lignes qui ont la valeur 0 dans la colonne F.
Savez vous SVP comment je peux optimiser le traitement ? Ci dessous le code:
La macro globale :
Quand j'exécute par petit bout je me rends compte que c'est la macro Supress_Zero qui met le plus de temps. Ci dessous le détail de celle ci :
Merci d'avance de votre aide.
J'ai un soucis sur une macro VBA qui est très longue à s'actualiser. Ca peut aller jusqu'à 30 min pour traiter 5000 lignes. Il faut que je trouve une solution pour la semaine prochaine.... Le but de ma macro est de supprimer les lignes qui ont la valeur 0 dans la colonne F.
Savez vous SVP comment je peux optimiser le traitement ? Ci dessous le code:
La macro globale :
Sub MAJ_Rapport()
Call Unhide
Range("E18").Select
Call MAJ_Data
Range("E18").Select
Call Degrouper
Range("E18").Select
Call Supress_Zero
Range("E18").Select
Call GrouperLignesAll
Range("E18").Select
End Sub
Quand j'exécute par petit bout je me rends compte que c'est la macro Supress_Zero qui met le plus de temps. Ci dessous le détail de celle ci :
Sub Supress_Zero()
Application.ScreenUpdating = False
'Premier Bloc
NbLigMAX = Cells(12, 5).Value
For i = NbLigMAX To 22 Step -1
Type_ligne = Cells(i, 6).Value
If Type_ligne = 0 Then
Rows(i).Delete
End If
Next i
'Calcule les lignes MAX et MIN
Call recalculateLgMAX
'Deuxième Bloc
NbLigMIN2 = Cells(14, 5).Value
NbLigMAX2 = Cells(13, 5).Value
For k = NbLigMAX2 To NbLigMIN2 Step -1
Type_ligne = Cells(k, 6).Value
If Type_ligne = 0 Then
Rows(k).Delete
End If
Next k
Application.ScreenUpdating = True
End Sub
Merci d'avance de votre aide.
A voir également:
- Comment optimiser une macro VBA ?
- Optimiser son pc - Accueil - Utilitaires
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Tcp optimiser - Télécharger - Optimisation
- Optimiser windows 10 - Guide
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
5 réponses
bonjour,
je ne comprend pas pourquoi ta macro fait deux fois le travail
premier bloc
test la valeur zéro et supprime la ligne
deuxième bloc
fait la même chose
je ne comprend pas pourquoi ta macro fait deux fois le travail
premier bloc
test la valeur zéro et supprime la ligne
deuxième bloc
fait la même chose
Parce que le le test est fait sur deux tableaux différents.
Exple : le Premier bloc va traiter les lignes 22 à 100 et le Deuxième bloc va traiter les lignes 110 à 200. Ce sont des plages variables et je ne veux pas supprimer les lignes entre ces deux tableaux. Vous pensez que c'est à cause de ça ? Est ce que je dois scinder mes macros ?
Exple : le Premier bloc va traiter les lignes 22 à 100 et le Deuxième bloc va traiter les lignes 110 à 200. Ce sont des plages variables et je ne veux pas supprimer les lignes entre ces deux tableaux. Vous pensez que c'est à cause de ça ? Est ce que je dois scinder mes macros ?
les lignes entre les deux tableaux sont vide ?
sinon tu fait tout d'un bloc
exemple les lignes 22 à 200 si dans la colonne H il n'y a pas de zero
sinon tu fait tout d'un bloc
exemple les lignes 22 à 200 si dans la colonne H il n'y a pas de zero
Bonjour
Je ne suis pas un spécialiste des macros, mais j'aurai fait avec fin droit et fin bas pour la sélection et un filtre sur la colonne 6 à zéro et suppression des lignes filtrées
Puis on enlève le filtre et on se replace en A1
Sub FILTRESUPPRIME()
'
' FILTRESUPPRIME Macro
'
'
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.AutoFilter Field:=6, Criteria1:="0"
Rows("2:2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
Selection.AutoFilter
Range("A1").Select
End Sub
Je ne suis pas un spécialiste des macros, mais j'aurai fait avec fin droit et fin bas pour la sélection et un filtre sur la colonne 6 à zéro et suppression des lignes filtrées
Puis on enlève le filtre et on se replace en A1
Sub FILTRESUPPRIME()
'
' FILTRESUPPRIME Macro
'
'
Range("A1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.AutoFilter Field:=6, Criteria1:="0"
Rows("2:2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
Selection.AutoFilter
Range("A1").Select
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question