Sauvegarde sans modification

Bonjour,

Quand j'ouvre mon fichier, et que je le referme sans apporter de modification, excel me demande quand même si je veux enregistrer les modifications, quelqu'un sait pourquoi? et comment corriger ce problème?
merci d'avance :)

10model-menu-v14.xlsm (262.28 Ko)

Bonjour Dicyce,
votre problème pourrait provenir d'erreurs dans l'évaluation des formules :
Dans COUT_MATIERE, division par zéro à cause du nombre de repas non renseigné dans COMPOSITION et également une valeur à zéro dans paramètres qui dépend du coût par élève dans COUT_MATIERE qui est à zéro car aucun ingrédient renseigné.
De même dans le menu, la date non renseigné en C2

image image image image image

j'ai renseigné les valeurs pour ne plus avoir de division par zéro mais le problème persiste. Je n'ai peut-être pas tout vu.

De même, les formules du type = MAINTENANT() ou =AUJOURDHUI() sont systématiquement évaluées et entraineront une demande d'enregistrement (je n'ai pas trouvé de formule de ce type dans votre fichier.
Voici mon fichier avec mes modifications (j'ai dû ôter la protection des feuilles. J'ai aussi affiché la feuille POIDS_MATIERE qui était masquée.
J'ai utilisé la vérification des erreurs sur chaque feuille. Tout parait normal

Je vous laisse aller plus loin dans les recherches ...

Merci,

je vais essayer d'aller plus loin, mais je risque de ramer un moment. je me doutais que cela venais de formule, mais pas de la division par zero. je pensais que ca pouvais venir également de la macro....

Méthode pour détecter l'origine du problème :
A chaque action : Enregistrer - Fermer le fichier - Ouvrir le fichier - ne rien faire - Fermer le fichier => Constater si le problème est résolu

- Attention, il y a peut-être des feuilles masquées, des lignes masquées, des lignes en police blanc sur fond blanc ... Affichez tout et conserver ainsi pour tout le test.
- Mettre le fichier en Mode de Calcul Manuel (Formules -> Options de Calcul Manuel) => Si problème résolu, c'est que cela vient d'un calcul (peut-être pas nécessairement une formule. Repasser en suite en mode Calcul Automatique.
- Vérifier la présence de formules du type = MAINTENANT() ou =AUJOURDHUI(). Si oui, ne cherchez pas plus loin.
Afficher les formules : Formules -> Afficher les Formules pour examiner non pas le résultat mais la formule elle-même
- Vérifier les erreurs de formule sur chaque feuille : Formule -> Vérification des erreurs. Corrigez les erreurs éventuelles
- si le fichier comporte des macros, des événements du type ouverture, fermeture du classeur, activation, désactivation d'une feuille peuvent déclencher des macros et donc, possiblement des mises à jour du fichier. Si oui, ne cherchez pas plus loin.
- Pour la suite, c'est la méthode bourin (il faudra faire une sauvegarde du fichier avec un nom de sauvegarde)

- Supprimer une feuille (en commençant par la plus dépendante). Si le problème est résolu, analyser toute la feuille. sinon ne pas la restaurer et passer à la suivante.
Si toujours pas résolu, il ne vous reste qu'à pleurer ...

Un truc très bizarre, quand on recherche la dernière cellule non vide de chaque feuille (CTRL + fin), on arrive très loin AMK:134 pour la feuiille COMPOSITION, AMN1048576 pour COUT_MATIERE par exemple. Donc difficile de tout vérifier

J'ai supprimé la feuille PARAMETRES -> Plus d'erreur

En colonne Source, par exemple en D8, il y a la formule

=_xlfn.IFS(ET($C8>=$Q$12;$C8<=$R$12);$C8-$S$12;ET($C8>=$Q$11;$C8<=$R$11);$C8-$S$11;ET($C8>=$Q$10;$C8<=$R$10);$C8-$S$10;ET($C8>=$Q$9;$C8<=$R$9);$C8-$S$9;ET($C8>=$Q$8;$C8<=$R$8);$C8-$S$8;1=1;0)

Le _xlfn.IFS indique un problème de compatibilité de la fonction IFS pour la version d'excel, en tous cas avec la mienne, est-ce le cas avec la vôtre ?
Mais le problème ne vient pas de là.

Il vient des formules du tableau (Colonne E à L).

=SI(ET($D8<>0;$C8<=DER_LIGNE_MENU);INDIRECT("'"&MENU_SOURCE&"'!"&E$7&$D8);SI(ET($D8<>0;$C8>=LIG_DEB_LEGENDE;$C8<=LIG_FIN_LEGENDE);INDIRECT(E$36&$C8-LIG_DECAL_LEGENDE);""))

J'ai remplacé les formules par leurs valeurs et le problème a disparu.
Je soupçonne le INDIRECT dans les formules


Il vient des formules du tableau (Colonne E à L).

=SI(ET($D8<>0;$C8<=DER_LIGNE_MENU);INDIRECT("'"&MENU_SOURCE&"'!"&E$7&$D8);SI(ET($D8<>0;$C8>=LIG_DEB_LEGENDE;$C8<=LIG_FIN_LEGENDE);INDIRECT(E$36&$C8-LIG_DECAL_LEGENDE);""))

J'ai remplacé les formules par leurs valeurs et le problème a disparu.

Je soupçonne le INDIRECT dans les formules

Je confirme, c'est bien la fonction INDIRECT qui cause problème

A voir si vous pouvez adapter les formules ou continuez à Enregistrer (ou non d'ailleurs) systématiquement

N'oubliez pas de passez le sujet à "Résolu", si vous estimez que c'est le cas.

Bonjour,
merci beaucoup pour votre aide, mais du coup, la feuille menu à imprimer ne fonctionne plus :/ je vais essayer de voir si je peux adapter la fonctions indirect, mais pour l'instant, je vois pas du tout comment faire, sachant que c'était cylfo qui avait fait ce tableau, je trouve dommage de jeter tout son travail à la poubelle. Je laisse encore le post ouvert quelque temps, mais si il n'y a pas de solution, et bien je supprimerais les feuilles qui servent à l'impression du menu (parametre, menu a imprimer et reglage impression, et poid matiere qui sert déja à rien). Meme si la secrétaire utilise pas encore cet outil, je trouve ca dommage :/

Mon fichier était juste pour vous montrer d'où venait le problème. Il ne faut surtout pas l'utiliser pour votre application.

Voici le code à ajouter pour

- Ne demander à enregistrer que si l'utilisateur a réellement modifié le fichier
- Ne pas enregistrer le fichier, et ceci sans afficher le message, lorsque l'utilisateur n'a rien modifié

Dans le module1
Option Explicit
Public FichierModié As Boolean 'Pour détecter les modifications de l'utilisateur

Dans ThisWorkbook

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ' Pour éviter de demander Voulez-vous Enregistrer" alors que pas de modification
    If Not FichierModié Then
        ThisWorkbook.Close Savechanges:=False
    End If
End Sub

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

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

N'oubliez pas de passer le sujet à résolu si c'est le cas

Une remarque pour compléter ma réponse précédente :
Les modifications de forme (changement de police de caractères, couleur de fond ...) ne sont pas détectées comme des modifications "utilisateur" et donc, si celui-ci n'a pas enregistré avant de fermer, ces mises à jour seront perdues.
Pour éviter cela, vous pouvez enregistrer systématiquement à chaque fermeture du fichier par le code suivant, beaucoup plus simple :

Dans ThisWorkbook

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ' Pour éviter de demander Voulez-vous Enregistrer" alors que pas de modification manuelle -> Enregistrement automatique
    ThisWorkbook.Close Savechanges:=True
End Sub

N'oubliez pas de passez le sujet à "Résolu", si vous estimez que c'est le cas.

Bonjour Dycice, clr,

@lcr, bien vu le problème vient bien de la fonction INDIRECT (fonction volatile) mais la solution que tu proposes ne fonctionnera que sur le fichier source mais plus dès lors que le fichier aura été enregistré via le bouton "Sauvegarder sous" de l'onglet "MENU" car l'enregistrement se fait sans les macros en "xlsx". Pour "_xlfn.IFS" il s'agit de la fonction "SI.CONDITIONS" (imbrication facilitée de SI) qui pour Excel 2016 n'est disponible que dans certaines versions .

@Dycice, au choix :

  • Conserver le problème en l'état ...
  • Garder la solution de clr mais elle ne fonctionnera plus dès que tu auras enregistré le fichier "sous" puisqu'il n'y aura plus de macro ...
  • Remplacer la fonction INDIRECT (volatile) par une macro, en l'occurrence "Str2Range" (non volatile) dans le fichier ci-joint qui supprime le problème de demande de sauvegarde mais qui implique que le fichier enregistré via le bouton "Enregistrer sous" soit un classeur contenant des macros (sinon il faudrait déployer un classeur de macros complémentaires sur les postes des utilisateurs ...). Dans le fichier joint, la sauvegarde à partir du fichier modèle se fait en xlsm mais le bouton "Enregistrer sous" est supprimé et j'ai déclaré le module en "Option Private Module" pour que la procédure n'apparaisse pas dans la liste des macros (ALT+F8).
8model-menu-v15.xlsm (269.76 Ko)

Voilà, dis nous la solution que tu retiens et n'oublies pas de passer le sujet en "résolu".

Cdlt,

Cylfo

Bonjour Dicyce, bonjour Cylfo,
bonne remarque je n'avais pas essayé le bouton Enregistrer Sous ni compris son intérêt fonctionnel.
J'imagine que les utilisateurs ont consigne de ne pas faire de mise à jour sur le fichier maitre .xlsm (sans l'interdire toutefois).

Bonjour,

alors, le fichier, une fois sauvegardé avec le bouton, ne me redemande pas de sauvegarder si je ne fais pas de modification. le problème n'est présent qu'avec le fichier . xlsm et pas xlsx (bizzard non? vu que vous avez identifié la fonction INDIRECT comme cause du problème. ) du coup, je pense opter pour la solution de clr, mais je ne sais pas trop comment l'appliquer ( ou mettre le code? c'est quoi ThisWorkbook?)

et aussi, vous dites : "Les modifications de forme [...] ne sont pas détectées comme des modifications "utilisateur" et donc, si celui-ci n'a pas enregistré avant de fermer, ces mises à jour seront perdues.
Pour éviter cela, vous pouvez enregistrer systématiquement à chaque fermeture du fichier par le code suivant, beaucoup plus simple"

est ce que cela veux dire que le fichier sera enregistré sans demander à l'utilisateur? même si celui ci à tout effacé?

C'est mon chef qui utilise ce classeur, et il n'est vraiment pas à l'aise avec un ordi. Je veux lui éviter au maximum la possibilité de faire une connerie.

Du coup vous me confirmez qu'avec la solution de clr, :

- excel demandera d'enregistrer le fichier .xlsm que si j'ai réellement modifié le fichier
- excel n'enregistrera pas le fichier, et sans afficher le message, lorsque je n'aurais rien modifié

Je suis perplexe car je croyais également que le problème provenait de la fonction "INDIRECT" ... en fait le problème est lié au bouton "Sauvegarder sous ..." de type formulaire et je ne sais pas vraiment pourquoi et ni pourquoi le problème disparaissait en remplaçant la fonction "INDIRECT" par une macro ...

Dans la version jointe, j'ai remplacé le bouton de type formulaire par un bouton activex, le problème disparait mais le fichier n'est plus compatible avec l'environnement MAC. Est-ce un problème ? si oui, retour à la solution de clr

Je m'interroge quand même ... ce "problème" en est-il un réellement un ? dans la mesure où lorsque le modèle est ouvert c'est pour saisir et lorsqu'une saisie a été faite on enregistre le fichier sous son nom de menu de la semaine et le problème disparait ... Je me trompe peut-être mais Il me semble que c'étaient les consignes que tu avais définies.

10model-menu-v16.xlsm (269.46 Ko)

effectivement, pour le commun des mortels, c'est pas vraiment un problème, mais il est déja arrivé au chef qu'il sauvegarde sans cliquer sur le bouton, et qu'il m'appel en plein service, paniqué parce qu'il ne retrouve plus le model menu, car il a renommé le fichier manuellement, ou qu'il enregistre son cout matiere sur le model menu, et ne le retrouve pas non plus... bref, c'est juste pour lui éviter du stress inutile.

Je ne pense pas que ce soit un problème que mac ne prenne pas en charge le fichier, sachant que la rédaction se fait sur windows. la lecture peut éventuellement se faire sur mac, mais j'imagine que les macros ayant disparu après l'enregistrement via le bouton, cela ne pausera pas de probleme. (vous confirmez?) Si oui, je pourrais mettre le post en résolu.
(j'ai un autre projet, le chef ayant enfin compris l'intérêt d'avoir une feuille de prix au kilo, il m'a demandé si je pouvais faire en sorte qu'il n'est plus à calculer le prix des quantités utilisés manuellement. je suis en train de m'entrainer avec la fonction RECHERCHEX, et j'aurais surement encore besoin d'aide, mais c'est pas pour tout de suite, le temps qu'il me fournisse une grille tarifaire)

En tout cas merci pour votre aide. j'espère pouvoir vous le rendre un jour :)

Je confirme que le fichier sans macro fonctionnera sous mac.

Pour limiter les fausses manip, il faudrait protéger le fichier modèle en le mettant en lecture seule sur le PC ou le serveur, cela éviterait au moins de pouvoir l'enregistrer.

re-bonjour Dicyce et Cylfo,
une nouvelle proposition suite à ces éclaircissements :
on intercepte la fenêtre qui propose d'enregistrer par une boite de dialogue à 3 boutons Oui, Non et Annuler (pour Cylfo, une MsgBox sur le Sub Workbook_BeforeClose)
-Oui : on ferme le fichier en enregistrant (ThisWorkbook.Close Savechanges:=True)
- Non : on ferme le fichier sans enregistrer (ThisWorkbook.Close Savechanges:=False)
- Annuler : on ne ferme pas le fichier (Cancel = True).
Avec dans la boite de dialogue, un blabla qui dit que normalement on n'enregistre pas le fichier modèle .....

je pensais que le mode lecture seul ne permettait que la lecture, et pas la modification, mais après des test, je crois comprendre que cela ne permet pas l'enregistrement avec le même nom de fichier et c'est tout. je sais je suis pas doué, mais du coup oui, je ferais sur le pc du boulot.

concernant votre proposition clr, je vois pas vraiment l'interet. peut etre juste pour prévenir de ne pas enregistrer le model avec le meme nom, mais du coup avec la lecture seul, ca résout le probleme non? ou alors j'ai pas compris quelque chose

Nos réponses (Cylfo et moi) se sont croisés.
Effectivement, si le but est que seul le responsable Technique puisse modifier le fichier modèle, il suffit comme l'a indiqué Cylfo) de mettre le fichier en lecture seule.

Sur Enregistrer, il sera demandé d'enregistrer sous un autre Nom.
Idem sur le Fermer par la croix mais dans ce cas, que l'utilisateur aiteffectué ou non une mise à jour, on lui proposera d'enregistrer.

je pensais que le mode lecture seul ne permettait que la lecture, et pas la modification, mais après des test, je crois comprendre que cela ne permet pas l'enregistrement avec le même nom de fichier et c'est tout. je sais je suis pas doué, mais du coup oui, je ferais sur le pc du boulot.

concernant votre proposition clr, je vois pas vraiment l'interet. peut etre juste pour prévenir de ne pas enregistrer le model avec le meme nom, mais du coup avec la lecture seul, ca résout le probleme non? ou alors j'ai pas compris quelque chose

Vous avez renvoyé le même message que le précédent. Avez-vous lu ma dernière réponse ?

Bonjour, oui effectivement, je n'avais pas vu votre message.
Merci beaucoup du coup, je vais me contenter de mettre le fichier en lecture seul.

Vos solutions m'on été très utile, je mets le sujet en résolu :)

Rechercher des sujets similaires à "sauvegarde modification"