Comment optimiser une macro VBA ?

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 :

          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.

5 réponses

  1. tobas Messages postés 210 Date d'inscription   Statut Membre Dernière intervention   24
     
    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
    0
  2. Nawellita Messages postés 6 Statut Membre
     
    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 ?
    0
    1. Nawellita Messages postés 6 Statut Membre
       
      Oui les lignes sont vides :(
      0
  3. tobas Messages postés 210 Date d'inscription   Statut Membre Dernière intervention   24
     
    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
    0
    1. Nawellita Messages postés 6 Statut Membre
       
      Oui les lignes sont vides ;(
      0
  4. PHILOU10120 Messages postés 6463 Date d'inscription   Statut Contributeur Dernière intervention   835
     
    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

    0
    1. Nawellita Messages postés 6 Statut Membre
       
      Thx a lot !!!! Ca m'a l'air pas du tout. Ca se fait illico !

      Encore merci à vous et bon WE :)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Nawellita Messages postés 6 Statut Membre
     
    Merci Tobas et Philou de vos retours. Je vais tester la méthode du filtre et vous tiens informés.
    0