OVH Cloud OVH Cloud

proposer nom d'enregistrement

5 réponses
Avatar
Céline
bonjour,
Je reviens sur un sujet qui a d=E9j=E0 =E9t=E9 abord=E9 mais avec lequel je
n'arrive pas =E0 m'en sortir

J'ai cr=E9=E9 un fichier mod=E8le : classeur_modele.xlt

J'aimerais que lorsqu'on travaille sur un classeur cr=E9=E9 =E0 partir de
ce fichier mod=E8le, l'option "Enregistrer Sous" propose un nom que je
voudrais d=E9finir moi_m=EAme =E0 la place du classique
"classeur_modele1.xls"
en gros je voudrais juste intercepter le nom qui s'affiche dans la
boite de dialogue

J'ai essay=E9 d'utiliser respectivement dans la proc=E9dure
"beforesave":
FileSaveName =3D Application.GetSaveAsFilename("bidul", _
fileFilter:=3D"Fichiers xls (*.xls), *.xls")
If FileSaveName <> False Then
MsgBox "Enregistrer sous " & FileSaveName
End If
Mais il n'enregistre pas r=E9ellement.
ou :
reponse =3D Application.Dialogs(xlDialogSaveAs).Show(arg1:=3D"hahah")

Dans les deux cas, ils n'empechent pas l'execution de la proc=E9dure
enregister sous.
Ex, si je reviens sur
reponse =3D Application.Dialogs(xlDialogSaveAs).Show(arg1:=3D"hahah")
soit, je le laisse seul, effectivement il m'affiche ce qui m'int=E9resse
et me fait l'enregistrement. Mais le probl=E8me c'est que dans l'option
"enregistrer sous" j'ai ensuite la boite de dialogue standard d'exel
qui me propose encore une fois d'enregistrer; et dans l'option
"Enregistrer", m=EAme si le fichier s'appelle d=E9j=E0 "hahah.xls" il
m'affiche quand m=EAme la boite de dialogue..
Soit, j'ajoute ensuite Cancel =3D true (pour =E9viter le doublon dans
"enregister sous") mais, du coup m=EAme ma boite de dialogue ne
s'affiche pas !

N'est-ce pas possible juste d'intercepter ce fichu nom qui s'affiche
dans la boite de dialogue "enregister sous"?

Merci de vos conseils....
C=E9line

5 réponses

Avatar
Daniel
Bonjour.
Si j'ai bien compris :

Application.Dialogs(xlDialogSaveAs).Show "toto.xls"

Cordialement.
Daniel
"Céline" a écrit dans le message de news:

bonjour,
Je reviens sur un sujet qui a déjà été abordé mais avec lequel je
n'arrive pas à m'en sortir

J'ai créé un fichier modèle : classeur_modele.xlt

J'aimerais que lorsqu'on travaille sur un classeur créé à partir de
ce fichier modèle, l'option "Enregistrer Sous" propose un nom que je
voudrais définir moi_même à la place du classique
"classeur_modele1.xls"
en gros je voudrais juste intercepter le nom qui s'affiche dans la
boite de dialogue

J'ai essayé d'utiliser respectivement dans la procédure
"beforesave":
FileSaveName = Application.GetSaveAsFilename("bidul", _
fileFilter:="Fichiers xls (*.xls), *.xls")
If FileSaveName <> False Then
MsgBox "Enregistrer sous " & FileSaveName
End If
Mais il n'enregistre pas réellement.
ou :
reponse = Application.Dialogs(xlDialogSaveAs).Show(arg1:="hahah")

Dans les deux cas, ils n'empechent pas l'execution de la procédure
enregister sous.
Ex, si je reviens sur
reponse = Application.Dialogs(xlDialogSaveAs).Show(arg1:="hahah")
soit, je le laisse seul, effectivement il m'affiche ce qui m'intéresse
et me fait l'enregistrement. Mais le problème c'est que dans l'option
"enregistrer sous" j'ai ensuite la boite de dialogue standard d'exel
qui me propose encore une fois d'enregistrer; et dans l'option
"Enregistrer", même si le fichier s'appelle déjà "hahah.xls" il
m'affiche quand même la boite de dialogue..
Soit, j'ajoute ensuite Cancel = true (pour éviter le doublon dans
"enregister sous") mais, du coup même ma boite de dialogue ne
s'affiche pas !

N'est-ce pas possible juste d'intercepter ce fichu nom qui s'affiche
dans la boite de dialogue "enregister sous"?

Merci de vos conseils....
Céline
Avatar
Céline
bonjour Daniel,
merci de te pencher sur mon problème

Mais ta solution revient au même que le problème que j'ai eu...
i.e. :

1. il n'empeche pas excel de me redemander immédiatement après, si je
veux l'enregistrer...
2. je ve en plus uniquement proposer un nom après l'appel de la
procédure Enregistrer sous et non aussi après l'appel de la
procédure Enregistrer !

est-ce que tu vois ce que je veux dire (pas facile à expliquer... ) ?
Céline
Avatar
FxM
Bonjour Céline,

J'ai essayé d'utiliser respectivement dans la procédure
"beforesave":
Dans les deux cas, ils n'empechent pas l'execution de la procédure
enregister sous.


Normal puisque lorsque tu est dans "beforesave", tu es déjà dans la
procédure de sauvegarde et ce qui suit est effectué juste avant de
sauvegarder. Si tu veux juste détecter la sauvegarde sans aller au bout,
tu utilises le beforesave avec la première ligne cancel = true.

MAIS (ben oui, y'a un mais) comment réellement sauvegarder ?
puisque sinon le cancel = true annule à chaque fois ...
-> ne plus détecter le save pour ne pas déclencher le beforesave

Il te faut inhiber les évènements, sauvegarder puis réactiver les
évènements. QQ chose comme :
application.enableevents = false
GetSaveAsFilename & co (...)
activeworkbook.saveas trucmuche (n'oublies pas l'extension xls !)
application.enableevents = true

Tu nous mets ton fichier sur cjoint.com si tu as un blème ?

@+
FxM



bonjour,
Je reviens sur un sujet qui a déjà été abordé mais avec lequel je
n'arrive pas à m'en sortir

J'ai créé un fichier modèle : classeur_modele.xlt

J'aimerais que lorsqu'on travaille sur un classeur créé à partir de
ce fichier modèle, l'option "Enregistrer Sous" propose un nom que je
voudrais définir moi_même à la place du classique
"classeur_modele1.xls"
en gros je voudrais juste intercepter le nom qui s'affiche dans la
boite de dialogue

J'ai essayé d'utiliser respectivement dans la procédure
"beforesave":
FileSaveName = Application.GetSaveAsFilename("bidul", _
fileFilter:="Fichiers xls (*.xls), *.xls")
If FileSaveName <> False Then
MsgBox "Enregistrer sous " & FileSaveName
End If
Mais il n'enregistre pas réellement.
ou :
reponse = Application.Dialogs(xlDialogSaveAs).Show(arg1:="hahah")

Dans les deux cas, ils n'empechent pas l'execution de la procédure
enregister sous.
Ex, si je reviens sur
reponse = Application.Dialogs(xlDialogSaveAs).Show(arg1:="hahah")
soit, je le laisse seul, effectivement il m'affiche ce qui m'intéresse
et me fait l'enregistrement. Mais le problème c'est que dans l'option
"enregistrer sous" j'ai ensuite la boite de dialogue standard d'exel
qui me propose encore une fois d'enregistrer; et dans l'option
"Enregistrer", même si le fichier s'appelle déjà "hahah.xls" il
m'affiche quand même la boite de dialogue..
Soit, j'ajoute ensuite Cancel = true (pour éviter le doublon dans
"enregister sous") mais, du coup même ma boite de dialogue ne
s'affiche pas !

N'est-ce pas possible juste d'intercepter ce fichu nom qui s'affiche
dans la boite de dialogue "enregister sous"?

Merci de vos conseils....
Céline



Avatar
Daniel
Ca, peut-être :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)
Dim NomAProposer As String, Rep As String
NomAProposer = "toto.xls"
Rep = InputBox("Si le nom ne vous convient pas, modifiez-le", ,
NomAProposer)
Application.EnableEvents = False
ActiveWorkbook.SaveAs Rep
Application.EnableEvents = True
Exit Sub
End Sub

Daniel
"Céline" a écrit dans le message de news:

bonjour Daniel,
merci de te pencher sur mon problème

Mais ta solution revient au même que le problème que j'ai eu...
i.e. :

1. il n'empeche pas excel de me redemander immédiatement après, si je
veux l'enregistrer...
2. je ve en plus uniquement proposer un nom après l'appel de la
procédure Enregistrer sous et non aussi après l'appel de la
procédure Enregistrer !

est-ce que tu vois ce que je veux dire (pas facile à expliquer... ) ?
Céline
Avatar
Céline
De retour avec 10.000 neurones en surchauffe....
Mais un résultat !
Merci Daniel et FXM pour vos idées... juste je les reprends pour
préciser les erreurs...

Daniel :
Dim NomAProposer As String, Rep As String
NomAProposer = "toto.xls"
Rep = InputBox("Si le nom ne vous convient pas, modifiez-le", ,
NomAProposer)
Application.EnableEvents = False
ActiveWorkbook.SaveAs Rep
Application.EnableEvents = True
Exit Sub
--> il aurait fallu gérer le rep = FALSE qui me fait planter le SaveAs
donc quelques tests en plus à faire

Mais effectivement, FxM c bien le enableeventsúlse qui me manquait
PAr contre !!
Il ne fallait (surtout) pas le mettre en premier , ca m'a désactivé
direct la procédure beforeSave, donc plus rien ne se passait, il a
fallu que je crée une procédure MaMacro pour le réafecter à
true.... petit coup de stress LOL
Bref, au final, j'ai quelque chose comme ça qui me convient tout à
fait :
dans BeforeSave toujours :

Dim Nom_propose As String
Nom_propose = Get_A_File_Name
(--> fonction qui me permet de définir mon nom_proposé à partir de
certaines données)
If Nom_propose <> Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) -
4) Then
FileSaveName = Application.GetSaveAsFilename(Nom_propose,
fileFilter:="Fichiers xls (*.xls), *.xls")
Else
FileSaveName = Nom_propose
End If
Application.EnableEvents = False
Application.DisplayAlerts = False
If FileSaveName <> False Then ActiveWorkbook.SaveAs FileSaveName
Application.EnableEvents = True
Application.DisplayAlerts = True
Cancel = True

voilà, voilà; en tout cas merci beaucoup à vous deux pour vos
conseils !
bonne journée
Céline