Incohérence à outrepasser

Résolu/Fermé
dinin71 Messages postés 6 Date d'inscription lundi 22 septembre 2014 Statut Membre Dernière intervention 22 septembre 2014 - 22 sept. 2014 à 12:13
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 - 22 sept. 2014 à 15:21
Bonjour,

Je suis totalement bloqué...

Je veux insérer une Macro dans un fichier Excel pour empêcher les utilisateurs (dans le cadre d'une formation) de sauver le fichier et le prendre chez eux.

Jusque là pas trop de soucis. Avec le code suivant dans "This Workbook":



Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

MsgBox "You can't save this workbook!"
Cancel = True

End Sub



Sauf qu'évidemment le premier venu qui a une connaissance ne fut-ce que médiocre en VBA sait très bien comment aller chercher ce code et l'effacer.

Alors je veux empêcher les utilisateurs d'aller voir / modifier les codes VBA.

Là aussi pas très difficile... Click droit sur VBAProject / properties / protection etc...


Mais c'est là que ça n'a aucun sens, parce que pour activer la protection il faut pouvoir sauver le fichier, mais le but de ma Macro est que le fichier ne puisse PAS être sauvé!!!!!!!!

Et ce n'est pas non plus comme si je pouvais activer la protection (sans la Macro), réouvrir le fichier, bypasser la Protection pour insérer la Macro car de toute manière je dois pouvoir sauver le fichier pour réactiver la protection.

Et ce n'est pas non plus comme si je pouvais utiliser un xlsx Macro Disabled. Ca ne fonctionne pas...

Est-ce que quelqu'un a une idée? Comment je peux faire pour bloquer la sauvegarde tout en empêchant les utilisateurs d'accéder au code VBA?


Merci d'avance.

4 réponses

skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
22 sept. 2014 à 13:23
Bonjour

Je crois que j'ai vu une astuce sur devloppez.com si je la retrouve je vous la transmets
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
22 sept. 2014 à 13:26
C'est bon j'ai trouvé !

Il faut mettre la macro en pause et sauvegarder. (le double trait vertical à coté du bouton "play" vert pour exectuer la macro)

D'ailleur je vous conseil d'ajouter cette ligne de code :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.ThisWorkbook.Saved = True 'Informe Excel que le fichier a déjà été enregistré (cela évite d'avoir une demande d'enregistrement à la fermeture)
End Sub


Et attention cela empêche de sauvegarder uniquement si l'élève à activer les macro !

Si vous avez plus de question n'hésitez pas à les poser je vous aiderai au mieux

Bonne journée
0
dinin71 Messages postés 6 Date d'inscription lundi 22 septembre 2014 Statut Membre Dernière intervention 22 septembre 2014 1
Modifié par dinin71 le 22/09/2014 à 13:51
Bonjour Skk,

Un grand merci, mais je n'ai pas bien compris... Cette macro ne se tourne pas.

Une fois que le code est écrit dans VBAProject / Msft Excel Objects / ThisWorkbook il n'est pas nécessaire de la tourner. Elle n'est pas dans un module (On ne voit vraiment rien mais bon...)



Pourrais-je vous demander un peu plus de détails s'il vous plait? Peut-être avec des images? Désolé de vous monopoliser votre temps...

Merci pour la ligne en plus et merci de me rappeler qu'il faut activer manuellement les macros! J'avais en effet oublié :)
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
22 sept. 2014 à 14:09
Je vais vous donner quelques conseil pour rendre votre classeur "Très protéger". Faites ce que vous n'avez pas déjà fait :

Pour le démarrage d'excel

Faite une feuille Excel que vous appelez "Index". Dans cette feuille écrivez en grand : "Pour avoir accès à ce document, activez les macro (La barre jaune juste ici en dessus)"

Ensuite faite un SUB "CacherTous" qui masque toutes les feuilles, et qui rend visible index "INDEX".

Et faite un deuxième SUB "AfficherTous" qui rend visible toutes les feuilles, mais qui masque "INDEX".

(Si vous ne savez pas faire les SUB si dessous je vous explique)

Ajouter ces lignes de codes à ThisWorkbook

Private Sub Workbook_Open()
Call AfficherTous
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
MsgBox "You can't save this workbook!" 
Cancel = True 
End Sub 

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.ThisWorkbook.Saved = True 'Informe Excel que le fichier a déjà été enregistré (cela évite d'avoir une demande d'enregistrement à la fermeture)
Call CacherTous
End Sub


Si à cela vous ajoutez un protection classeur alors cela veux dire que vos élèves seront obligé d'activer les macro pour avoir accès au document.

Pour Proteger les VBA, empécher la sauvegarder, mais que vous puissez sauvegarder :

Ajouter un mot de passe à votre ProjetVB
Faite [Ctrl]+[Pause/Break]
Puis enregistrer le fichier normalement avec la disquette bleu ou via fichier > enregistrer Sous...

Quittez Excel.

Conclusion

Votre fichier excel est désormais quasi inviolable. Seules les personnes connaissant le mot de passe pourront le sauvegarder.

Si vous avez plus de questions je peux vous y répondre vous ne monopoliser pas du tout mon temps ;)
0
dinin71 Messages postés 6 Date d'inscription lundi 22 septembre 2014 Statut Membre Dernière intervention 22 septembre 2014 1
22 sept. 2014 à 15:13
Excellent! Ca fonctionne parfaitement sur un fichier blank.

J'essayerai à la maison avec mon fichier de travail!

Un grand merci à toi!
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
Modifié par skk201 le 22/09/2014 à 15:21
De rien, Je vous souhaite une bonne journée

Merci de mettre le sujet comme résolut
0