Sauvegarde et protection par macro
Bonjour,
J'ai actuellement 2 petites choses sur lesquelles je bloque, je vais essayer d'expliquer au mieux...
J'utilise un premier fichier qui me sert à en ouvrir un autre, traiter les données puis les exporter dans un troisième fichier renouvelé chaque mois, qui se crée automatiquement en debut de mois s'il n'existe pas etc... jusque là tout fonctionne bien.
Mon premier souci est que le troisième fichier ne doit pas pouvoir être modifié par un utilisateur lorsqu'il le consulte, donc à la création j'en verrouille les pages depuis la macro avec un mot de passe, et quand l'on rajoute des données en utilisant le premier je les déverrouille et reverouille... tout ca fonctionne bien sauf que si j'ouvre ce troisième ficher directement (si vraiment je dois y apporter une correction) je mot de passe pour dévérouiller ne fonctionne pas... je suis obligé de créer une macro pour le faire... c'est normal ou je passe à côté de quelque chose?
Second souci, lorsque l'on ouvre le troisième fichier pour consultation il est demandé si l'on veut sauvegarder en le fermant... pas très génant vu qu'on ne peut pas le modifier mais ça m'embete quand même, donc je voudrais au moment de la création du fichier ajouter du code dans thisworkbook beforeclose pour ne plus avoir la demande, ça j'y suis arrivé avec insertlines, mais ça coince au moment de la sauvegarde du fichier... la sauvegarde crée un fichier qui ne prends pas en charge les macros et donc ça génère une erreur... comment faire pour créer un xlsm quand je sauvegarde mon ficher depuis la macro?
Merci de votre aide
Bonjour
pour ce qui est du déverrouillage qui ne fonctionne que par macro, je pense qu'il y a quelque chose... car j'ai jamais eut le soucis, essaye de fournir une partie de ton code pour voir
pour ce qui est de l'enregistrement au format xlsm il faut utiliser le paramètre fileformat de la fonction save , exemple :
activeworkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Range("A1") & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabledFred
Bonjour,
mot de passe pour dévérouiller ne fonctionne pas... je suis obligé de créer une macro pour le faire...
Si le mot de passe est le bon, que ce soit manuellement ou par macro, le déverrouillage doit se faire.
je voudrais au moment de la création du fichier ajouter du code dans thisworkbook beforeclose pour ne plus avoir la demande, ça j'y suis arrivé avec insertlines,
insertlines ? Pour qu'une demande d'enregistrement n'intervienne pas à la fermeture, il faut mettre la propriété Saved à True (dans la procédure BeforeClose).
mais ça coince au moment de la sauvegarde du fichier... la sauvegarde crée un fichier qui ne prends pas en charge les macros et donc ça génère une erreur
Si tu ne modifies pas le type de fichier, aucune raison qu'il se modifie lui-même !
Cordialement.
Bonjour Mferrand
l'auteur du post indique :
qui se crée automatiquement en debut de mois
donc il part probablement d'un nouveau fichier, et donc par défaut excel enregistre au format natif d'excel donc xlsx pour 2007 et suivant, il faut donc qu'il specifie le format avec le paramètre fileformat
voir ici pour plus d'info :
https://msdn.microsoft.com/fr-fr/library/office/ff841185.aspx
fred
Salut Fred,
C'est fort possible ! Il a ajouté "s'il n'existe pas". La situation est à préciser.
Il est sûr que le format de fichier doit être précisé s'il ne correspond pas au format par défaut.
A+
Re-bonjour,
Merci déjà pour ces réponses !!
Ok donc pour la sauvegarde je vais essayer le code indiqué avec le type de format, je pense que c'est bien la solution mais je ne savais pas l'utiliser.
Pour l'histoire du mot de passe, je ne peux pas fournir une partie du code car le fichier est au boulot donc je ne l'ai pas sous la main. Il est tout simple car j'ai utilisé l'enregistreur pour verrouiller et déverrouiller et pris ce code en ajoutant juste password=".....". Si j'ouvre ce troisième fichier et veut déverrouiller les pages par le bouton classique ça ne fonctionne pas (le mot de passe est bien le bon) et j'ai testé en créant une sub avec la ligne de code pour le faire, avec le même mot de passe, et là ça dévérouille bien... je ne comprends vraiment pas pourquoi.
Il s'agit bien d'un nouveau fichier, je génère le nom en utilisant la date et en extrayant le mois, quand j'ai fini de traiter les données depuis le premier fichier et que je dois les exporter la macro vérifie donc si il existe un fichier pour le mois en cours, si oui elle l'ouvre, déprotège, ajoute les données, reprotège et sauvegarde, et si il n'existe pas elle en crée un nouveau, y place les données, protège et sauvegarde (format par défaut donc, je pense que le code que vous m'avez donné doit bien être la solution à mon second souci mais je ne le saurai que d'ici ce soir). Pour ce qui est du déverrouillage par mot de passe là je sèche
Tu n'est pas obligé d'utiliser des arguments nommés (pour exécuter une procédure) mais si tu les utilises, c'est :
password:=...
Je ne comprends pas trop ce que tu veux dire par arguments nommés, mais dans ton exemple il ne me semble pas avoir utilisé := pour déclarer le mot de passe, ça doit être plutôt un truc du genre
Active.sheet.protect protect password="...."
Enfin de tête, il faudra que je vérifie cet aprem au boulot et à la rigueur m'envoyer le fichier chez moi pour l'avoir sous la main ce sera plus simple (sauf si ça marche avec ces réponses)
Merci de votre aide
Après relecture ça ne doit pas être active.sheet.protect protect mais plutôt active.sheet protect (et unprotect).
Ce serait plus simple si j'avais ce que j'ai fais sous les yeux
Active.sheet.protect protect password="...."Ecrit ainsi, il n'y a pas moins de 3 erreurs de syntaxe !
Dont la première devrait déclencher une erreur d'exécution.
donc ca ne doit pas être écrit avec exactitude car il n'y a pas d'erreur d'exécution.
Le plus simple doit être de récupérer mon fichier au boulot pour ensuite pouvoir reporter ici le code correct.
J'essaierai tout de même cet aprem d'indiquer le mot de passe avec := , si comme je le crois je ne l'ai pas indiqué ainsi