Macro excel très lente

Résolu/Fermé
FrançoiseH - Modifié par irongege le 21/11/2013 à 20:31
FrançoiseH. Messages postés 4 Date d'inscription jeudi 21 novembre 2013 Statut Membre Dernière intervention 21 novembre 2013 - 21 nov. 2013 à 20:45
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





A voir également:

4 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
21 nov. 2013 à 17:07
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
FrançoiseH. Messages postés 4 Date d'inscription jeudi 21 novembre 2013 Statut Membre Dernière intervention 21 novembre 2013
21 nov. 2013 à 20:27
Bonsoir Gyrus,

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

Bonne soirée.
0
Froulik Messages postés 3779 Date d'inscription lundi 11 novembre 2013 Statut Membre Dernière intervention 15 avril 2014 943
21 nov. 2013 à 16:35
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
FrançoiseH. Messages postés 4 Date d'inscription jeudi 21 novembre 2013 Statut Membre Dernière intervention 21 novembre 2013
21 nov. 2013 à 20:45
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
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
21 nov. 2013 à 17:02
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
FrançoiseH. Messages postés 4 Date d'inscription jeudi 21 novembre 2013 Statut Membre Dernière intervention 21 novembre 2013
21 nov. 2013 à 20:44
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
via55 Messages postés 14495 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 7 novembre 2024 2 735
21 nov. 2013 à 17:36
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
FrançoiseH. Messages postés 4 Date d'inscription jeudi 21 novembre 2013 Statut Membre Dernière intervention 21 novembre 2013
21 nov. 2013 à 20:33
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