Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Fonction Indirect : Demande d'enregistrer les Modifications ... sans modification

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 !

crocrocro

XLDnaute Impliqué
Bonjour,
j'ai le problème suivant avec la fonction INDIRECT :
S'il existe une formule avec la fonction INDIRECT dans le fichier, à la fermeture, que j'ai ou non effectué des modifications, il m'est demandé d'enregistrer les modifications.
L'option (de Formules) Calcul du Classeur : Manuel - Recalculer le classeur avant de l'enregistrer permet de résoudre ce problème

mais elle a le gros inconvénient de ne pas actualiser en direct les formules si une valeur de cellule dont dépend la formule change
dans l'exemple ci-dessous après avoir remplacé 2 en D10 par 3, on a toujours 10 en F10 avec la formule =B10*D10


Existe-t-il une solution sans effets secondaires ?
 
Bonsoir crocrocro, chris,

Passer en calcul manuel n'est pas une bonne solution.

Chez moi sur Excel 2019 les fonctions volatiles comme INDIRECT sont bien recalculées à l'ouverture du fichier mais il n'y a pas d'invite à la fermeture s'il n'y a aucune autre modification.

J'ai signalé ce phénomène en janvier 2020 :
https://excel-downloads.com/threads...-fermeture-du-fichier.20040004/#post-20285804

Dans le fichier (1) ci-joint pour obtenir l'invite j'exécute donc :
VB:
Private Sub Workbook_Open()
Calculate 'recalcule les formules volatiles
End Sub
Et dans le fichier (2) pour éviter l'invite j'exécute :
VB:
Private Sub Workbook_Open()
Calculate 'recalcule les formules volatiles
Application.OnTime 1, Me.CodeName & ".EviteInvite" 'lancement différé
End Sub

Sub EviteInvite()
Me.Saved = True 'évite l'invite à la fermeture si aucune modification
End Sub
A+
 

Pièces jointes

Bonjour le forum,

OK mais que pensez-vous de la solution consistant à exécuter Me.Saved = True en différé ? L'avez-vous testée ?

A+
J'ai eu l'occasion d'utiliser Me.Saved = True dans le Workbook_Open(), dans des cas, où je faisais des mises à jour par macro sans modifications de l'utilisateur, très pratique.
Dans le cas des fonctions volatiles, sur un fichier sans macro, ce serait selon moi, dommage d'ajouter du code vba uniquement pour çà.
Je n'ai pas bien compris le point "en différé" de votre code :
dans Application.OnTime 1, 1 représente bien l'heure d'exécution (en secondes) ?
en ajoutant un Debug.Print Now, on voit que EviteInvite s'exécute immédiatement, même résultat avec 10, 100 1000 ...
Et pourquoi vouloir faire Me.Saved = True en différé ?
L'instruction après le Calculate ne s'exécute-t-elle pas uniquement après que le Calculate soit exécuté ?

VB:
Private Sub Workbook_Open()
    Calculate 'recalcule les formules volatiles
    Debug.Print Now
    Application.OnTime 1, Me.CodeName & ".EviteInvite" 'lancement différé
End Sub

Sub EviteInvite()
    Debug.Print Now
    Me.Saved = True 'évite l'invite à la fermeture si aucune modification
End Sub
 
- 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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…