XL 2019 Empêcher d'enregistrer sous un fichier crée via macro

jui42

XLDnaute Junior
Bonjour,
J'ai une macro qui consiste à créer un fichier pour qu'un opérateur puisse y entrer des données , jusque là, tout est ok. La difficulté est la suivante :
mon programme, teste l'existence d'un fichier et donc l'ouvre le cas échéant. De ce fait, j'aimerais empecher à l'utilisateur de changer l'emplacement du fichier qui à été crée et qu'il puisse simplement enregistrer.
J'ai essayé d'implanter la méthode Workbook_BeforeSave dans le module de Code ThisWorkbook mais j'ai l'impression qu'elle est inactif.
Les fichier se crée via le classeur "fiche_op" le classeur "tableau_controle" est une bdd sur laquel le programme vien extraire les infos.

Si vous avez une idée je suis preneur ! Ou même si vous pouvez m'expliquez le fonctionnement de la procédure Workbook before save

Merci !! :)
 

Pièces jointes

  • fiche_op.xlsm
    63.5 KB · Affichages: 1
  • tableau_controle.xlsm
    31 KB · Affichages: 0

Deadpool_CC

XLDnaute Accro
Bonjour,
j'avais l'inverse dans mess snips de code mais adapté, cela devrait fonctionner:

VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If  SaveAsUI Then
        Cancel = True
        MsgBox "Vous ne pouvez pas utiliser le [Enregistrer sous ...] pour sauvegarder ce fichier => Utiliser le [Enregistrer] simple !", vbInformation, "Oupps"
    End If
End Sub

moi je l'ai déjà utilisé en If Not SaveAsUI then ... pour forcer à enregistrer sous ... mais j'ai pas testé la modif. faite dans le code ci-dessus.
 

Deadpool_CC

XLDnaute Accro
Non pas das le module ... dans workbook comme tu en avais l'intuition ... c'est une fonction fournie de base mais sans code ... elle est automatiquement appelée au bon moment dans elle n'est pas vide .
1655126377687.png
 

Deadpool_CC

XLDnaute Accro
pas besoin de l'appeler ... excel va passer dans le code entre le moment ou il aura demander le "save as ..." (clic souris, raccourcis, clavier) et le moment ou cela doit lui afficher la fenêtre de sauvegarde ... c'est automatique et géré par excel.
 

Deadpool_CC

XLDnaute Accro
sinon, tu l'inclus (ta macro) dans un fichier "modèle" que tu enregistres en .xlsm
ensuite quand tu créer, via les commande windows (pas Excel) tu duplique le fichier et tu ne renommes puis tu l'ouvre dans Excel et tu fais ta création vba ....
 

jui42

XLDnaute Junior
Je vais essayer ta solution mais étant donné que ce fichier et ces fiches crées sont utilisé par des opérateurs qui ne connaissent pas forcément les ordinateurs... Je voulais tout automatiser et limiter le nombre d'interactions
 

Deadpool_CC

XLDnaute Accro
VB:
'Copier un fichier
FileCopy "c:\data\encours\Paye.xlsm", "c:\data\encours\Paye-Janvier.xlsm"

'renommer un fichier
Name "c:\data\encours\Paye-Janvier.xlsm" As "c:\data\encours\Paye-Fevrier.xlsm"

tu peux faire la copie depuis soit un répertoire cahé pour eux (réseau, ou sur le poste vers leur répertoire de travail
tu peux le renommer comme bon te semble.

ps : ouvre le dans Excel que après ... si ouvert dans Excel le renommage ne fonctionnera pas.
 

soan

XLDnaute Barbatruc
Inactif
Bonjour jui42, Deadpool,

j'aimerais créer un fichier via macro et empêcher le SaveAS sur le fichier créé, c'est possible ?

je ne donne pas de solution pour ça, mais juste ces quelques infos :

* si le nom du fichier créé via macro est déjà connu d'avance et fixe, par exemple "MonFichier.xlsm", il faut que le nom utilisé pour le SaveAs soit différent de "MonFichier.xlsm" (test simple à faire pour éviter ce nom de fichier).

* si le nom du fichier créé via macro est inconnu ou variable, c'est beaucoup moins évident ! peut-être que ça peut être résolu facilement de cette façon : la macro créé le fichier puis en tout dernier, elle lui mets l'attribut "Lecture seule" (attribut ReadOnly de l'ex-DOS ; cet attribut est toujours valable sous Windows, car il fait aussi partie du système de fichiers NTFS) ; dès lors, le SaveAs échouera sur ce fichier en Lecture seule : impossible de l'écraser ! mais alors, il faudra aussi mettre en place un code de "Gestion d'erreur" pour éviter un plantage brutal du code qui fait le SaveAs ! autrement dit : il faudra « récupérer l'erreur » afin de demander à l'utilisateur de saisir un autre nom de fichier pour effectuer le SaveAs.

(j'ai rien d'autre à proposer)

soan
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87