Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Excel 2013] - Interception beforeSave

20 réponses
Avatar
ThierryP
Bonjour,

Avec mon bon vieil Excel XP, il =C3=A9tait simple d'intercepter l'enregistr=
ement d'un fichier, ce qui me permettait d'imposer un chemin, un nom etc...

Aujourd'hui, avec Excel 2013, avant que je puisse intercepter l'=C3=A9v=C3=
=A8nement, il se passe plein de choses d=C3=A9agr=C3=A9ables que je souhait=
e =C3=A9viter !
- L'utilisateur clique sur la disquette,
- L'=C3=A9cran "Enregistrer sous" appara=C3=AEt (j'utilise un fichier mod=
=C3=A8le)
- L'utilisateur doit cliquer sur "Parcourir" et l=C3=A0 seulement je peux i=
ntercepter le clic et ex=C3=A9cuter ma macro.

Y a-t-il un moyen d'=C3=A9viter =C3=A7=C3=A0 ?

Merci d'avance =C3=A0 tous ceux qui vont se pencher sur mon souci !

ThierryP

10 réponses

1 2
Avatar
ThierryP
Je m'auto-réponds !!
- Je peux créer un bouton sur ma feuille qui fera le job, SAUF que l'i cône Enregistrer reste active.
- Avec Excel 2013 je ne sais pas supprimer ou désactiver par macro ce tte icône(l'enregistreur reste désespérément vide....).
Une autre idée ??
ThierryP
Avatar
JièL
Hello,
pas testé, mais de mémoire, si on donnait à une macro le même nom que
"enregistrer" on remplaçait celle ci...
Désolé, c'est très approximatif comme aide, mais ça te donneras
peut-être une piste pour t'auto répondre à nouveau :-)
--
JièL toto ré pond
Le 03/02/2017 à 14:39, ThierryP a écrit :
Je m'auto-réponds !!
- Je peux créer un bouton sur ma feuille qui fera le job, SAUF que l'icône Enregistrer reste active.
- Avec Excel 2013 je ne sais pas supprimer ou désactiver par macro cette icône(l'enregistreur reste désespérément vide....).
Une autre idée ??
ThierryP
Avatar
ThierryP
Merci du retour !
J'ai fait le test, et j'ai juste reçu un message d'insulte d'Excel.... .
Dommage, je commençais à m'habituer à cette nouvelle version d'Excel, après mon bon vieux XP ! Mais la gestion des barres d'outils , menus et autres est nettement moins pratique maintenant (ou alors mes con naissances sont loin d'être suffisantes, ce qui est une certitude !!)
Allez, à qui le tour ?
Bon week-end,
ThierryP
Avatar
MichD
Bonjour,
Ta demande n'est pas très claire pour moi...
Tu peux utiliser ce bout de code que tu places dans le ThisWorkbook de ton classeur :
Chaque fois que l'usager appelle la commande "enregistrer" ou "enregistrer sous"
la procédure appelle ta macro.
'---------------------------------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True
Call NomDeLaMacro 'La macro, je suppose, est dans un module standard.
End Sub
'---------------------------------------------
MichD
Avatar
ThierryP
Bonsoir Denis,
Désolé de ne pas avoir été plus clair ! Avant Excel 200 7, dès qu'un utilisateur cliquait sur l'icône disquette, l'é vènement était intercepté immédiatement.
Aujourd'hui, avec Excel 2013, l'utilisateur clique sur la disquette, l'à ©cran "Enregistrer sous" apparaît, puis l'utilisateur clique "Enregi strer" ou "Enregistrer sous", puis clique sur un dossier récent ou sur le bouton "Parcourir" et c'est seulement à ce moment-là que l' évènement est intercepté.
Et moi, j'aurais voulu éviter tout çà !
Et comme il semble qu'il faut passer par un éditeur xml pour modifier les menus d'Excel..... ça ne simplifie pas la tâche !
ThierryP
Avatar
MichD
Ton problème, c'est tes yeux et non Excel
Observe ce qui suit, avec les versions récentes d'Excel, il y a des nouvelles macros
événementielles
'Permet d'intercepter l'enregistrement AVANT (BEFORE)
'-------------------------------------------------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'C'est celle-ci que tu dois utiliser
Cancel = true
Call NomDeLaProcédure
End Sub
'-------------------------------------------------------------
'Elle permet d'intercepter immédiatement après l'enregistrement APRÈS (AFTER)
'-------------------------------------------------------------
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
End Sub
'-------------------------------------------------------------
MichD
Avatar
ThierryP
Denis,
Mes yeux ne vont pas si mal que çà !! Ma mémoire aussi : sau f erreur ou omission de ma part, le BeforeSave existait déjà avec Excel 2002 (ma première rencontre avec le VBA, !!!) et sûrement dans les premières versions de VBA.
Par contre, je n'avais effectivement pas remarqué le AfterSave dans Ex cel, mais qui dans ce cas précis ne m'avance guère !
ThierryP
Avatar
ThierryP
J'ai également omis de préciser que je travaille sur un modè le, et que donc il n'y a pas de chemin défini avant le premier enregis trement.
Le but de ma question est donc d'éviter qu'un utilisateur peu habitu é à Excel n'enregistre le classeur n'importe où.
ThierryP
Avatar
MichD
J'ai compris, tu veux que j'écrive la macro ?
Débute par exécuter cette macro une fois pour être certain que les procédures événementielles
sont activées.
'---------------------------------
Sub Avant()
Application.EnableEvents = True
End Sub
'---------------------------------
Dans un classeur tout neuf qui n'a jamais été sauvegardé, copie dans le thisworkbook de ce
dernier ce qui suit et il se passera ceci :
A ) la première fenêtre qui s'ouvrira, l'usager pourra choisir le répertoire où il veut
enregistrer le fichier.
B ) la deuxième fenêtre lui permettra de choisir le nom du classeur puisque la fenêtre ouvrante
affichera déjà le répertoire qu'il a choisi.
C ) Si le fichier est déjà enregistré, il ne se passera rien sinon la sauvegarde du document.
'---------------------------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Chemin As String
If SaveAsUI = True Then
Chemin = ChoixDossier()
CurDir Left(Chemin, 1)
ChDir Chemin
End If
End Sub
'---------------------------------------
Function ChoixDossier()
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = ""
.Show
If .SelectedItems.Count > 0 Then
ChoixDossier = .SelectedItems(1)
Else
ChoixDossier = ""
End If
End With
End Function
'---------------------------------------
MichD
Avatar
ThierryP
Bonjour Denis,
Depuis le nombre d'années que je fréquente le MPFE, je n'ai jamai s demandé à ce qu'on m'écrive mes macros ! J'essaie d'ê tre un grand garçon ;o))
Ce que tu me proposes est justement ce que je ne veux pas :
- je ne veux pas que l'écran "Enregistrer sous" apparaisse
- je ne veux pas que l'utilisateur puisse choisir un répertoire d'enre gistrement
- je ne veux pas que l'utilisateur puisse choisir le nom du document.
Tout ceci se fait par macro.
Mon souhait, afin d'éviter toute fausse manip de l'utilisateur, serait justement d'inhiber l'apparition de l'écran "Enregistrer sous", qui a pparaît dès que l'on clique sur la disquette.
Et je maintiens que l'interception ne se produit que lorsque l'utilisateur choisit un répertoire de destination (en tout cas sur mon PC !!).
Et avec cette version 2013, je ne sais plus griser ou inhiber un bouton dan s un menu. J'ai fait quelques recherches, mais je n'ai rien trouvé de satisfaisant..
ThierryP
1 2