Recalcul automatique avant enregistrement?

jc.carrier Messages postés 10 Statut Membre -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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>

2 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

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

    --
    Cordialement
    Patrice
    0
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      PS : le Calculate n'est pas indispensable.
      0
    2. jc.carrier Messages postés 10 Statut Membre 1
       
      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
    3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      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
      1. jc.carrier Messages postés 10 Statut Membre 1 > Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention  
         
        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
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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