Recalcul automatique avant enregistrement?

Fermé
jc.carrier Messages postés 10 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 16 octobre 2021 - 1 août 2015 à 08:52
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2024 - 4 août 2015 à 20:26
Bonjour,

Je voudrais éviter d'avoir un message proposant l'enregistrement du classeur quand je n'ai rien modifié.
Ce classeur fait appel à la date du jour qui modifie donc certaines cellules. Il y a un calcul automatique à l'ouverture que je contre par une macro dans ThisWorkbook :

Private Sub Workbook_Open()
Calculate
Me.Saved = True
End Sub

Je me retrouve donc avec un classeur censé ne pas avoir été modifié. Pourtant, à la fermeture, même si je n'ai rien modifié entre temps, j'ai un message me proposant une réécriture du fichier. J'imagine que le recalcul à la fermeture déclenche ce message? Je voudrais donc l'éliminer sans pour autant passer en recalcul manuel pour que les recalculs se fassent en temps réel si je fais des modifications.

Quelqu'un a-t-il une solution?
Merci.
<

config>Windows XP / Chrome 44.0.2403.125</config>
A voir également:

2 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
1 août 2015 à 12:18
Bonjour,

Au lieu de Open, utilises BeforeClose :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Calculate
Me.Saved = True
End Sub

--
Cordialement
Patrice
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
1 août 2015 à 12:20
PS : le Calculate n'est pas indispensable.
0
jc.carrier Messages postés 10 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 16 octobre 2021 1
1 août 2015 à 15:29
Bonjour,

Ce n'est malheureusement pas la solution que je cherche : avec cette macro, si j'ai fait des modifications, je risque de les perdre car Excel ne me demandera pas si je veux sauvegarder.
Ceci dit, j'ai supposé que la proposition de réécriture était liée au recalcul avant fermeture, mais ce n'est peut-être pas le cas. Elle apparaît d'ailleurs le plus souvent, mais pas toujours. Y aurait-il autre chose qui pourrait provoquer cette demande alors que je n'ai rien modifié?

Cordialement.
Jean-Claude
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié par Patrice33740 le 2/08/2015 à 00:53
Re,

Tu ne peux pas avoir le beurre et l'argent du beurre !

Soit tu actives le calcul automatique, auquel cas l'utilisation des fonctions temporelles comme Aujourdhui() provoquent une réécriture périodique des résultats (même s'ils sont identiques aux précédents) et alors Saved passe à False d'où le message gênant à la fermeture.

Soit tu actives le calcul sur ordre (manuel) auquel cas seules le modifications apportées par l'utilisateur entraînent le passage de Saved à False et donc le message à la fermeture redevient pertinent . Cependant, les fonctions temporelle ne s'actualisent plus périodiquement. Peut-être que ton Calculate à l'ouverture offre une périodicité suffisante ?
Sinon tu peux peut-être provoquer un calcul périodique avec OnTime

La macro proposée permet de conserver le calcul auto et évite le message en forçant Saved à True avant la fermeture, Il faut alors penser à enregistrer chaque fois que tu modifies le fichier (c'est une solution que j'adopte régulièrement).

Une autre option serait d'enregistrer systématiquement le fichier avant la fermeture, avec les inconvénients que ça peut amener !

Patrice
0
jc.carrier Messages postés 10 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 16 octobre 2021 1 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
4 août 2015 à 18:46
Je ne comprends pas pourquoi j'ai ce message à la fermeture. Des formules utilisent la date mais pas l'heure, donc après le premier Calculate à l'ouverture, il ne devrait plus y avoir de modification automatique due à la date ou l'heure, même au recalcul final?
A tout prendre, je préfère encore rester avec mon message.
0
eriiic Messages postés 24571 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 19 mai 2024 7 217
Modifié par eriiic le 4/08/2015 à 20:28
Bonjour,

Tu as une 1/2 douzaine d'actions qui entrainent un calculate (par exemple cliquer sur une séparation de colonne, un tri ou un filtre, etc) et par voie de conséquence saved=false
Tu pourrais surveiller Change pour mettre un flag à vrai si un changement a lieu dans une cellule et le tester à la fermeture pour mettre saved=true
Dim b_change As Boolean

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Not b_change Then Me.Saved = True
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    b_change = False
End Sub

Private Sub Workbook_Open()
    Calculate
    Me.Saved = True
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    b_change = True
End Sub

Sub test()
    Debug.Print "Saved "; Me.Saved
    Debug.Print "b_change "; b_change
    Me.Saved = True
End Sub


Par contre certaines modif comme édition du code vba ne seront plus détectées avant fermeture.
Teste et regarde si ça peut aller
eric

En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
0