Macro excel très lente

Résolu
FrançoiseH -  
FrançoiseH. Messages postés 4 Statut Membre -
Bonjour à tous,

J'ai créé un feuille de calcul destinée à calculer les horaires mensuel du personnel d'une maison de repos.
Cinq lignes par personne : heure de début, heure de fin, code d'absence, nombre d'heures d'absence et finalement le total d'heures effectivement payées.
Lorsqu'il s'agit d'imprimer et afficher cet horaire, le personnel n'est pas sensé voir les deux dernières lignes...
J'ai dès lors crée une macro (voir plus bas) afin de masquer à chaque fois ces 2 lignes.
Elle fonctionne bien mais très lentement...

Auriez-vous une idée pour accélérer un peu la procédure?
Merci d'avance à ceux qui pourront m'aider
Bien à vous

Françoise

Sub MASQUER_POUR_HORAIRE()
'
' MASQUER_POUR_HORAIRE Macro
'

'
Range("13:14,19:20,25:26,31:32,37:38,43:44,49:50,55:56,61:62,67:68,73:74,79:80,85:86,91:92,97:98,103:104,109:122,127:128,133:134").Select
Selection.EntireRow.Hidden = True
Range("139:140,145:146,151:152,157:158,163:164,169:170,175:176,181:182").Select
Selection.EntireRow.Hidden = True
Range("187:188,193:194,199:200,205:206,211:212,217:218,223:224,229:230").Select
Selection.EntireRow.Hidden = True
Range("235:236,241:242,247:248,253:254,259:260,265:266,271:272,277:278,283:284,289:290").Select
Selection.EntireRow.Hidden = True
Range("295:296,301:302,307:308,307:308,313:314,319:320,332:333,338:339,344:345,350:351,356:357,362:370,375:376").Select
Selection.EntireRow.Hidden = True
Range("381:382,388:389,394:395,400:401,406:407").Select
Selection.EntireRow.Hidden = True
Range("412:413,418:419,424:425,430:431,436:437,442:443,449:450,455:456").Select
Selection.EntireRow.Hidden = True
Range("462:463,468:469,474:475,480:481,480:481,486:487,492:493").Select
Selection.EntireRow.Hidden = True
Range("498:499,504:505,510:511,516:517,522:523,528:529,534:535,540:548,559:560,565:566,568:580").Select
Selection.EntireRow.Hidden = True
Range("F9").Select
End Sub

4 réponses

  1. Gyrus Messages postés 3360 Statut Membre 526
     
    Bonjour,

    Essaie comme cela
    Sub MASQUER_POUR_HORAIRE()
    '
    ' MASQUER_POUR_HORAIRE Macro
    '
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Range("13:14,19:20,25:26,31:32,37:38,43:44,49:50,55:56,61:62,67:68,73:74,79:80,85:86,91:92,97:98,103:104,109:122,127:128,133:134").Select
    Selection.EntireRow.Hidden = True
    Range("139:140,145:146,151:152,157:158,163:164,169:170,175:176,181:182").Select
    Selection.EntireRow.Hidden = True
    Range("187:188,193:194,199:200,205:206,211:212,217:218,223:224,229:230").Select
    Selection.EntireRow.Hidden = True
    Range("235:236,241:242,247:248,253:254,259:260,265:266,271:272,277:278,283:284,289:290").Select
    Selection.EntireRow.Hidden = True
    Range("295:296,301:302,307:308,307:308,313:314,319:320,332:333,338:339,344:345,350:351,356:357,362:370,375:376").Select
    Selection.EntireRow.Hidden = True
    Range("381:382,388:389,394:395,400:401,406:407").Select
    Selection.EntireRow.Hidden = True
    Range("412:413,418:419,424:425,430:431,436:437,442:443,449:450,455:456").Select
    Selection.EntireRow.Hidden = True
    Range("462:463,468:469,474:475,480:481,480:481,486:487,492:493").Select
    Selection.EntireRow.Hidden = True
    Range("498:499,504:505,510:511,516:517,522:523,528:529,534:535,540:548,559:560,565:566,568:580").Select
    Selection.EntireRow.Hidden = True
    Range("F9").Select
    Application.Calculation = xlCalculationAutomatic
    End Sub

    A+
    3
    1. FrançoiseH. Messages postés 4 Statut Membre
       
      Bonsoir Gyrus,

      Magnifique, c'est maintenant instantané ! Un tout grand merci, ça m'aide beaucoup.

      Bonne soirée.
      0
  2. Froulik Messages postés 4292 Statut Membre 954
     
    Quel windows utilsez-vous ?
    quelle version d'excel ?

    je l'ai essayée sur une feuille vierge (office 2010, windows seven)
    là elle est instantanée. pas le temps de rêver.
    0
    1. FrançoiseH. Messages postés 4 Statut Membre
       
      Bonsoir Froulik,

      Merci pour votre réponse.
      En effet, sur une feuille de calcul peu chargée, c'est très rapide. Seulement, le fichier que j'ai créé est très lourd (à cause notamment des mises en formes conditionnelles).
      Bonne soirée.
      0
  3. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Salut,

    Faire un test avec ça

    Sub MASQUER_POUR_HORAIRE()
    '
    ' MASQUER_POUR_HORAIRE Macro
    '
    Dim derlig As Long
    Dim i As Long
    
    derlig = Range("A" & Rows.Count).End(xlUp).Row
    
    For i = 13 To derlig Step 5
        Rows(i).EntireRow.Hidden = True
        Rows(i + 1).EntireRow.Hidden = True
    Next i
    
    End Sub


    ;o)
    0
    1. FrançoiseH. Messages postés 4 Statut Membre
       
      Bonsoir Polux31,

      Merci pour votre réponse.
      Le problème c'est qu'entre les différentes catégories de personnel, je masque aussi en bloc une petite dizaine de lignes qui représentent différents totaux qui à nouveau, ne doivent pas être visibles des employés (p.ex "362:370", "540:548"),

      Merci quand-même ;)
      Bonne soirée.
      0
  4. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonjour

    Et pourquoi ne pas faire sans macro ?

    Dans une colonne hors la zone d'impression définie on mets des X dans les cellules correspondant aux lignes à imprimer
    Avant l'impression on lance un filtre sur cette colonne à partir des seuls X, les lignes sans X seront masquées sur la feuille et à l'impression

    Cdlmnt
    0
    1. FrançoiseH. Messages postés 4 Statut Membre
       
      Bonsoir,

      Merci pour votre réponse.
      Dans le cas présent, Gyrus a résolu mon problème en améliorant ma macro. Cela me permet en outre d'ajuster la mise en page et les sauts de page avant l'impression.
      Mais je garde votre idée bien précieusement car elle me servira sans aucun doute pour d'autres fichiers :).

      Bonne soirée.
      0