Macro excel très lente
Résolu
FrançoiseH
-
FrançoiseH. Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
FrançoiseH. Messages postés 4 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Macro lente
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro maker - Télécharger - Divers Utilitaires
- Macro word - Guide
4 réponses
Bonjour,
Essaie comme cela
A+
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+
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.
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.
Salut,
Faire un test avec ça
;o)
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)
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.
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.
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
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
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.
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.
Magnifique, c'est maintenant instantané ! Un tout grand merci, ça m'aide beaucoup.
Bonne soirée.