• Initiateur de la discussion Initiateur de la discussion tinet
  • 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 !

tinet

XLDnaute Impliqué
bonjour le forum,

avons-nous la possibilité sur une seule feuille du classeur d'empêcher le calcul automatique, car cette feuille à des fonctions Sommeprod qui sont très gourmands en mémoire .

a+
 
Re : Sommeprod

Bonjour Tinet 🙂,
Pas évident ta question 😛...
En principe (à partir de 2007, sous 2003 je ne me rappelle plus 😱), tu as 3 modes de calcul : Manuel, Automatique sauf tableaux de données et Automatique.
Logiquement, si tu t'arranges pour déclarer en tableau de données tes nombreux SommeProd, tu devrais pouvoir obtenir le résultat souhaité 🙄...
Sinon, le calcul est géré pour le classeur, pas pour les feuilles, donc tu dois aussi pouvoir, à condition de réaliser des liaisons entre 2 classeurs, avoir tes SommeProd dans un classeur en calcul Manuel, et le reste dans un classeur en calcul Automatique 😛.
Via VBA, tu peux éventuellement ne lancer le calcul que suivant certaines conditions, mais je ne pense pas que ce soit ce que tu souhaites vu que le calcul lancé englobera tout le classeur.
Enfin, d'après l'aide, en calcul Manuel, il semblerait que Maj+F9 ne recalcule que la feuille active 🙄.
Je n'ai rien testé de tout cela, n'ayant pas de classeur avec ce type de problématique, mais j'espère que ça t'aidera 🙂.
Bon WE 😎
 
Re : Sommeprod

Bonjour tinet, salut Jean-Noël 🙂

avons-nous la possibilité sur une seule feuille du classeur d'empêcher le calcul automatique (...)

Oui, mettre ces macros dans ThisWorkbook :

Code:
Private Sub Workbook_Activate()
Calcul IIf(ActiveSheet.CodeName = "Feuil1", xlManual, xlAutomatic)
End Sub

Private Sub Workbook_Deactivate()
Calcul xlAutomatic
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Calcul IIf(Sh.CodeName = "Feuil1", xlManual, xlAutomatic)
End Sub

Sub Calcul(mode)
With Application
  .ScreenUpdating = False
  .EnableEvents = False
  Workbooks.Add 'document vierge (pour ne pas modifier le classeur)
  .Calculation = mode
  ActiveWorkbook.Close False
  .EnableEvents = True
End With
End Sub
Si le CodeName de la feuille concernée est différent de Feuil1, modifier en conséquence la macro.

Fichier joint.

A+

A+
 

Pièces jointes

Re : Sommeprod

Re,

Une autre solution, peut-être préférable, est de conserver le mode manuel (sur ordre) tant que le classeur est actif.

Les autres feuilles sont recalculées quand elles sont modifiées.

Toujours dans ThisWorkbook :

Code:
Private Sub Workbook_Activate()
Calcul xlManual
'Calculate 'facultatif, si l'on veut que des fonctions comme MAINTENANT soient recalculées
End Sub

Private Sub Workbook_Deactivate()
Calcul xlAutomatic
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
If Sh.CodeName <> "Feuil1" Then Sh.Calculate 'recalcul de la feuille modifiée
End Sub

Sub Calcul(mode)
With Application
  .ScreenUpdating = False
  .EnableEvents = False
  Workbooks.Add 'document vierge (pour ne pas modifier le classeur)
  .Calculation = mode
  ActiveWorkbook.Close False
  .EnableEvents = True
End With
End Sub
Fichier (2) joint. Voir la 2ème feuille.

A+
 

Pièces jointes

- 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
11
Affichages
645
Réponses
3
Affichages
209
Réponses
3
Affichages
201
Retour