Et puis, juste en enregistrant ton classeur en xlsx au lieu de xlsm, tu élimines les macros.
Version imprimable
Et puis, juste en enregistrant ton classeur en xlsx au lieu de xlsm, tu élimines les macros.
Bonjour Eric, au temps pour moi c'est bien un beforesave dont je parlais.
Oui au final tu as raison, je peux mettre le mot "test" dans une cellule et lancer le beforesave avec la condition qu'il y ait bien le "test" dans cette cellule, et supprimer le contenu de la cellule par ma macro avant enregistrement, je vais tester ça aujourd'hui, merci beaucoup !
Bonjour,
heuuu, là tu ne pourras plus jamais enregistrer.
Il faudrait ajouter en plus une variable booléenne que tu mets à true juste avant de vouloir le faire par macro, et à remettre à false ensuite.
eric
Alors du coup j'ai testé :
En macro privée :
Et dans ma macro publique l'enregistrement se fait par :Code:
1
2
3
4
5
6 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If ThisWorkbook.Worksheets("Fiche").Range("A124") = "NOSAVE" Then MsgBox "Bas les pattes !" & Chr(10) & "On ne sauvegarde pas le template !" Cancel = True End If End Sub
Eric, je ne sais pas si c'est très académique mais ça fonctionne plutôt bien !Code:
1
2
3 ThisWorkbook.Worksheets("Fiche").Range("A124").Delete ActiveWorkbook.SaveAs Filename:=chemin & Fichier & "_" & Format(Date, "dd-mm-yyyy", vbMonday) & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled ActiveWorkbook.Save
Qu'en penses-tu ?
Si ça fonctionne comme tu veux tant mieux.
A lire comme ça je suis plutôt surpris que ton SaveAs passe (?)
D'ailleurs pourquoi le doubler d'un Save derrière ? De toute façon il ne devrait pas passer non plus.
Comme ni l'utilisateur, ni ta macro ne peuvent sauvegarder autant ouvrir en lecture seule ;-)
Tu devrais mettre des Stop au début de chaque macro et faire en pas à pas (F8). Tu verras mieux le fonctionnement pour le valider.
Mais j'en reviens aux bases quitte à me répéter : comment veux-tu qu'un utilisateur écrase un modèle puisqu'il a une copie ???
C'est le but même d'un modèle xlt. Si tu double-cliques dessus c'est un nouveau fichier sur ce modèle qui est créé. S'il est enregistré dans le répertoire des modèles et qu'il fait 'Nouveau' basé sur ce modèle, c'est une copie également. Et si tu crains qu'il ne fasse 'ouvrir' dans excel pour aller chercher ce modèle ou bien qu'il ne fasse 'enregistrer sous...' en choisissant le type xlt et bien protège le fichier en écriture.
Hmm je sais pas trop oui le save as passe, sachant tout de même que je définis les variable auparavant dans le code. Pour le save en effet il ne sert à rien à cet endroit, j'ai corrigé ça.
Pour la lecture seule, le problème est que le template doit bien être modifié (pas possible en lecture seule si je ne m'abuse) puis enregistré-sous grâce à la macro.
Je comprends tout à fait l'idée du modèle, mais finalement, sur mon xlsm, en interdisant toute sorte de sauvegarde, et en levant cette interdiction au moment du save as pour pouvoir générer le nouveau fichier, ça fonctionne tout aussi bien (je suis têtu, je sais).
Finalement, avec le système que j'ai mis en place, on revient à peu près au même à savoir :
La possibilité d'entrer des informations dans "template.xlsm" sans avoir le droit d'enregistrer ces informations dans le template.
L'enregistrement de ces informations dans un nouveau fichier au nom formaté.
À savoir que je ne suis absolument pas développeur et que tant que ça marche et que je comprends le code que j'écris, je suis content.
Pour les stops, bonne idée, je vais faire ça en ultime validation avant de mettre le tout en route.
Le seul problème (secondaire) auquel je suis confronté, c'est que certaines données sont entrées via des liste de validations qui sont sourcées sur un autre classeur via des plages dynamiques.
Lorsque je modifie un mot sur ce classeur (categories.xlsm), disons "Projet" devient "Projets", toutes les listes de toutes mes fiches sont bien mises à jour, par contre si "Projet" était déjà sélectionné, il ne se met pas à jour seul, il faut aller resélectionner dans la liste. J'aurais aimé que tout se mette à jour automatiquement.
J'ai posté ici sans succès pour le moment.
Merci beaucoup en tout cas Eric et Sophie pour votre aide très précieuse.