Macro excel très lente

Résolu
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. 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. Bonsoir Gyrus,

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

      Bonne soirée.
      0
  2. 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. 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. 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. 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. 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. 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