Macro devient ensuite tràs lente

Le
rmillerlcxl
Bonjour,

J'ai une macro qui affiche ou masque des colonnes selon la valeur inscrite =
sur la ligne 1 de la colonne pour un range.

J'utile for each cell …

Disons que j'ouvre le fichier et que je lance cette macro … elle s'=
exécute en une fraction de seconde.

Mais si je lance une autre macro spécifique qui produit un rapport pou=
r la même feuille et qui fonctionne très bien … mais dont=
je trouve qui s'exécute aussi lentement … la macro qui affich=
e ou masque des colonnes devient ensuite soudainement très lente.

Le Application.cutcopymode = false a bien été effectué.

Qu'est-ce qui pourrait bien causer cela et quelle pourrait être la sol=
ution?

Merci à l'avance.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
rmillerlcxl
Le #26506032
Merci.
J'ai trouvé après quelle ligne de code la situation se produit. C eci dans la macro qui produit un rapport. Voir au bas.
Si j'arrête le code avant l'exécution de cette ligne … et que je lance la macro qui masque les colonnes … toujours qu'une fr action de seconde.
Si j'arrête le code après cette ligne de code … et que je lance à nouveau la macro qui masque des colonnes … ça pr end beaucoup plus de temps. Pourquoi?
La ligne de code ci-dessous ne fait qu'établir la zone d'impression.
Qu'en pensez-vous?
'*************************************************************************
'Établi la zone d'impression...doit le faire avant les sauts de page
Feuil54.PageSetup.PrintArea = Feuil54.Range( _
Feuil54.Cells(Feuil54.Range("CN_FMDetFirstRow").Row + 1, Feuil54.Range("CN_ FMDetFirstRow").Column), _
Feuil54.Cells(Feuil54.Range("CN_FMDetLastRow").Row - 1, Feuil54.Range("CN_F MDetFirstRow").Column + Feuil54.Range("CN_FMDetFirstRow").Columns.Count - 1 )).Address
rmillerlcxl
Le #26506033
Bonjour,
En effectuant des tests j'ai détecté que la ligne de code suivant e Feuil54.DisplayPageBreaks = False faisait en sorte de corriger la situa tion.
Sur ce lien ci-dessous … je vous invite à aller voir … j'ai trouvé qu'il semble que dans les versions les plus récentes de Excel … certaines manipulations de lignes et de colonnes ainsi que l'aperçu avant impression cause des lenteurs.
Alors le code Feuil54.DisplayPageBreaks = False vient corriger la situati on.
Mais selon vous … y aurait-il un endroit stratégique où p lacer ce code ou faut-il le placer partout dans les macros touchant les sit uations décrites?
Aussi cela risque t'il d'affecter les sauts de page d'Excel ou placé p ar macros?
https://support.microsoft.com/fr-fr/help/199505/macro-performance-slow-when -page-breaks-are-visible-in-excel
MichD
Le #26508351
Bonjour,
Je ne vois pas pourquoi tu devrais répéter cette ligne de code plusieurs
fois : Feuil17.DisplayPageBreaks = False , une fois devrait être
suffisant. Par conséquent, la méthode I devrait être satisfaisante.
Cependant, à la fin de l'opération, tu peux remettre
Feuil17.DisplayPageBreaks à True si tu en as de besoin.
MichD

Bonjour,
Je sollicite votre opinion concernant ceci. Microsoft écrit …
Pour désactiver l’affichage de sauts de page par programme, ajoutez la ligne de code suivante à votre macro VBA.
ActiveSheet.DisplayPageBreaks = False
Important Vous devez insérer cette ligne de code après avoir modifié les propriétés de l’objet PageSetup , mais avant de modifier les propriétés ou les lignes de votre feuille de calcul.
Si on regarde les codes ci-dessous … devrait-on opter pour la méthode 1 ou 2? Car si méthode 2 … plusieurs endroits à modifier … mais si préférables je le ferai. Merci à l'avance.
Méthode 1
Feuil17.DisplayPageBreaks = False
Feuil17.AutoFilterMode = False
Feuil17.Range("CN_RapZone").EntireRow.Hidden = False
Feuil17.Range("CN_RapDefaultZone").EntireRow.Hidden = False
Feuil17.Range("CN_RapModelZone").EntireRow.Hidden = False
ou
Méthode 2
Feuil17.DisplayPageBreaks = False
Feuil17.AutoFilterMode = False
Feuil17.DisplayPageBreaks = False
Feuil17.Range("CN_RapZone").EntireRow.Hidden = False
Feuil17.DisplayPageBreaks = False
Feuil17.Range("CN_RapDefaultZone").EntireRow.Hidden = False
Feuil17.DisplayPageBreaks = False
Feuil17.Range("CN_RapModelZone").EntireRow.Hidden = False
rmillerlcxl
Le #26509755
Merci encore.
Mais il y a une chose qui m'échappe.
Disons que j'arrive dans une feuille et que je n'utilise pas VBA. J'ai des lignes de masquées et que je veux les démasquer.
Donc manuellement je démasque les lignes. Cela prend un temps anormal la 1ère fois. Ensuite si je le refais … le temps est très rapide.
Cela veut-il dire à votre avis que je devrais placer un évèn ement quelconque dans la feuille avec le code ActiveSheet.DisplayPageBreaks = False?
Si oui … quel serait l'évènement?
MichD
Le #26509764
Dans Excel, il exist un outil que l'on appelle "Vue personnalisée"
conçue pour faire ce travail.
La commande se retrouve là :
Menu "affichage" du ruban / section : Modes d'affichage /
commande : Personnalisé / Bouton Ajouter / tu donnes un nom à
l'affichage personnalisé que tu veux créer / tu fermes avec le bouton OK.
ATTENTION : Tu peux définir les éléments suivants dans une vue
personnalisée et évidemment, cela doit être fait obligatoirement avant
la création du nom de la vue personnalisée.
IMPORTANT : Débute par définir une vue personnalisée de ta feuille en
mode "normal". Après modifie ce que tu veux - voir la suite - et crée
des vues personnalisées de la feuille selon ton bon désir.
A ) Tu peux définir tous les paramètres d'impressions que doit contenir
la vue personnalisée - Plage de cellules, largeur des marges...etc.
B ) Tu peux définir les lignes qui doivent être masquées ou non, si les
sauts de page doit être affichés ou non.
C ) Si tu as un filtre particulier en action, tu peux lui demander de
retenir le filtre lorsque tu crées le nom.
D ) Tu peux définir plusieurs vues personnalisées de la même feuille
avec des paramètres particuliers. Dans la fenêtre de création de la vue
personnalisée, il ne te reste plus qu'à sélectionner la vue
personnalisée que tu as créée pour l'afficher.
E ) C'est ce qu'il y a de plus rapide. Si tu copies une feuille qui a
plusieurs vues personnalisées, seule celle qui est en application sera
copiée... sinon, il faut le faire par macro pour copier toutes les vues
personnalisées de la feuille.
Tu peux utiliser une commande pour afficher l'une des vues personnalisées :
"Hide" et "Normal" sont les noms utilisés pour définir les 2 vues
personnalisées
ActiveWorkbook.CustomViews("Hide").Show
ActiveWorkbook.CustomViews("Normal").Show
Dans le cas où tu as un nombre limité de lignes que tu veux masquer ou
afficher, tu peux le faire par macro, mais si tu dois boucler sur une
grande plage de cellules, l'exécution sera nécessaire plus lente!
MichD
Publicité
Poster une réponse
Anonyme