inhiber mise à jour durant l'execution d'une macro

  • Initiateur de la discussion Initiateur de la discussion airvb
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

airvb

XLDnaute Nouveau
J'ai ds une session d'excel, 2 fichiers qui sont ouverts.

Le premier ds lequel on trouve des formules qui vont chercher des données ds un fichier fermé.
genre :

'\\alphaserveur\Serveursec\[effectif.xls]Jul_Dec'!K34

il y en a 40 * 30 de ce genre.


Un deuxième fichier , qui par automation va collecter des données ds une application tierce.

La macro qui récolte les données est considérablement ralenti lorsque le premier fichier est ouvert.

Comment inhiber la mise à jour des cellules du premier fichier durant l’exécution de la macro ?

Sachant que cette macro nécessite le recalcul automatique car des résultats collectés en début de macro conditionne la suite de l’exécution de la macro.

une piste ?

merci
 
Re : inhiber mise à jour durant l'execution d'une macro

Bonjour,

peut être avec ceci, à voir si j'ai bien compris...
Code:
Application.Calculation = xlCalculationManual
'ton code
Application.Calculation = xlCalculationAutomatic
bonne journée
@+
 
Re : inhiber mise à jour durant l'execution d'une macro

Bonjour le fil,

En complément de Pierrot93 :

Lorsque tu as besoin de forcer le calcul aux endroits clefs de ton code (comme tu dis, le conditionnement des premiers résultats pour la suite) tu as la fonction Calculate

Pour calculer
tous les classeurs ouverts Application.Calculate (ou juste Calculate)
une feuille de calcul particulière Worksheets(1).Calculate
une plage déterminée Worksheets(1).Rows(2).Calculate

Cela te convient-il ?
 
Re : inhiber mise à jour durant l'execution d'une macro

Bonjour le fil,

En complément de Pierrot93 :

Lorsque tu as besoin de forcer le calcul aux endroits clefs de ton code (comme tu dis, le conditionnement des premiers résultats pour la suite) tu as la fonction Calculate



Cela te convient-il ?

merci pour vos réponses si rapide.

je pourrais effectivement forcer le recalcul au moment opportun sur ma macro ... à voir la faisabilité car macro assez complexe et interaction nombreuse . je garde cette solution en dernier recours.

Est il possible de plutôt bloquer la mise à jour sur le fichier qui comporte des liaisons ?
 
Re : inhiber mise à jour durant l'execution d'une macro

J'ai modifié le debut de ma macro comme suit, histoire de désactiver le recalcul et la mise à jour des liens ... pas mieux. Le temps d'éxécution est multiplié par 3 si le fichiers immo_2013.xls est ouvert.

une idée ?



Code:
Sub lanceur()

Workbooks("immo_2013.xls").Activate
Application.Calculation = xlManual
Workbooks("immo_2013.xls").UpdateLinks = xlUpdateLinksNever

Workbooks("lanceur.xlsm").Activate

Dim t As Single
t = Timer
 
Re : inhiber mise à jour durant l'execution d'une macro

Bonjour,

perso je l'aurais plutôt mis ainsi :
Code:
Sub lanceur()
Dim t As Single
Application.Calculation = xlManual
Workbooks("immo_2013.xls").UpdateLinks = xlUpdateLinksNever
Workbooks("immo_2013.xls").Activate
Workbooks("lanceur.xlsm").Activate
t = Timer

bien que les 2 "activate" qui se suivent ne me semblent pas nécessaire....
A voir s'il n'y a pas lieu également de bloque le rafraichissement d'écran ainsi que les procédures événementielles....

bonne journée
@+
 
Re : inhiber mise à jour durant l'execution d'une macro

Bonjour Pierrot93, bonjour Airvb,

Pour t'éviter une recherche, pour désactiver le raffraichissement dont parle Pierrot : Application.ScreenUpdating = False

Pour les évènements : Application.EnableEvents = False (celui là, attention à bien le repasser en True à la fin de la macro ! )
 
Re : inhiber mise à jour durant l'execution d'une macro

Merci pour vos réponses je vais essayer .

Ce qui m'intrigue qd même c'est que si , j'ouvre 2 sessions d'excel différentes, une pour le lanceur, et l'autre pour immo_2103 ... lanceur n'est pas ralenti.


J'ai vu ça aussi :

Code:
With ThisWorkbook
Liens =. LinkSources(xlExcelLinks)
For Each lelien In Liens
.UpdateLink Name:=lelien, Type:=xlExcelLinks
Next
End With

que je vais adapter comme ceci :

Code:
With ThisWorkbook
Liens =. LinkSources(xlExcelLinks)
For Each lelien In Liens
.UpdateLinksNever  Name:=lelien, Type:=xlExcelLinks
Next
End With

JE vs tiens au courant
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
999
Retour