Bonsoir,
Comment tester dans 'Private Sub Workbook_BeforeSave' si on y arrive par
'enregistrer sous' ?
Autrement dit, existe-t-il un indicateur que je puisse tester sous VBA
pour
vérifier si la sauvegarde de mon classeur a été initiée par "enregistrer
sous"
du menu "Fichier" ?
Merci pour toute piste, je n'y parviens pas.
--
Goodbye
Bonsoir,
Comment tester dans 'Private Sub Workbook_BeforeSave' si on y arrive par
'enregistrer sous' ?
Autrement dit, existe-t-il un indicateur que je puisse tester sous VBA
pour
vérifier si la sauvegarde de mon classeur a été initiée par "enregistrer
sous"
du menu "Fichier" ?
Merci pour toute piste, je n'y parviens pas.
--
Goodbye
Bonsoir,
Comment tester dans 'Private Sub Workbook_BeforeSave' si on y arrive par
'enregistrer sous' ?
Autrement dit, existe-t-il un indicateur que je puisse tester sous VBA
pour
vérifier si la sauvegarde de mon classeur a été initiée par "enregistrer
sous"
du menu "Fichier" ?
Merci pour toute piste, je n'y parviens pas.
--
Goodbye
Salut,
D'après une idée de John Walkenbach.
Tu gère toi même la boite de dialogue de sauvegarde ( voir ci dessous )
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'
Dim Msg As String
Dim Ans As Integer
If Me.Saved Then
' Fichier déjà sauvegardé donc rien à faire
Else
' Création de la boite de dialogue de sauvegarde
'
Msg = "Voulez-vous enregistrer les modifications apportées à "
Msg = Msg & Me.Name & " ?"
Ans = MsgBox(Msg, vbExclamation + vbYesNoCancel)
Select Case Ans
Case vbYes
' Je sauvegarde
Me.Save
Case vbNo
' Le fichier ne sera pas sauvegardé.
' Je fais croire qu'il a été sauvegardé pour ne pas avoir la boite
de dialogue
' Pas de sauvegarde
Me.Saved = True
Case vbCancel
' Cancel alors retour au prog
Cancel = True
End Select
End If
End Sub
Amicalement,
leo
Salut,
D'après une idée de John Walkenbach.
Tu gère toi même la boite de dialogue de sauvegarde ( voir ci dessous )
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'
Dim Msg As String
Dim Ans As Integer
If Me.Saved Then
' Fichier déjà sauvegardé donc rien à faire
Else
' Création de la boite de dialogue de sauvegarde
'
Msg = "Voulez-vous enregistrer les modifications apportées à "
Msg = Msg & Me.Name & " ?"
Ans = MsgBox(Msg, vbExclamation + vbYesNoCancel)
Select Case Ans
Case vbYes
' Je sauvegarde
Me.Save
Case vbNo
' Le fichier ne sera pas sauvegardé.
' Je fais croire qu'il a été sauvegardé pour ne pas avoir la boite
de dialogue
' Pas de sauvegarde
Me.Saved = True
Case vbCancel
' Cancel alors retour au prog
Cancel = True
End Select
End If
End Sub
Amicalement,
leo
Salut,
D'après une idée de John Walkenbach.
Tu gère toi même la boite de dialogue de sauvegarde ( voir ci dessous )
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'
Dim Msg As String
Dim Ans As Integer
If Me.Saved Then
' Fichier déjà sauvegardé donc rien à faire
Else
' Création de la boite de dialogue de sauvegarde
'
Msg = "Voulez-vous enregistrer les modifications apportées à "
Msg = Msg & Me.Name & " ?"
Ans = MsgBox(Msg, vbExclamation + vbYesNoCancel)
Select Case Ans
Case vbYes
' Je sauvegarde
Me.Save
Case vbNo
' Le fichier ne sera pas sauvegardé.
' Je fais croire qu'il a été sauvegardé pour ne pas avoir la boite
de dialogue
' Pas de sauvegarde
Me.Saved = True
Case vbCancel
' Cancel alors retour au prog
Cancel = True
End Select
End If
End Sub
Amicalement,
leo
Bonsoir,
Merci, mais je ne vois pas que cela réponde à ce que je recherche.
Selon le choix de l'utilisateur, j'ai besoin de pouvoir 'enregistrer 'ou
'enregistrer sous', tout en gardant le contrôle par macro de ces
enregistrements
(Private Sub Workbook_BeforeSave).
Voici le contexte de ma demande.
J'ai écrit le code suivant afin d'empêcher l'accès à un fichier XLS si
l'opérateur n'a pas accepté d'activer les macros à l'ouverture du fichier.
Dans ce cas, j'affiche un message à destination de l'opérateur, lui
indiquant
qu'il doit accepter les macros pour pouvoir accéder au fichier.
L'idée est de gérer soi-même l'enregistrement du fichier, avec :
- désactivation des évènements et du rafraîchissement de l'écran
- mémorisation de la feuille active
- masquage de toutes les feuilles sauf la feuille comportant le message
- sauvegarde du fichier
- démasquage de toute les feuilles et masquage de la feuille comportant le
message
- activation de la feuille mémorisée
- activation des évènements et du rafraîchissement de l'écran
- inhibition de la sauvegarde du fichier
Tout fonctionne bien, sauf dans le cas où l'opérateur choisit d'activer
'Enregistrer sous' dans le menu 'Fichier'.
On obtient alors un enregistrement, mais pas la fenêtre permettant de
choisir le
nom de fichier.
D'où ma question :
Comment tester dans 'Private Sub Workbook_BeforeSave' si on y est arrivé
par
'enregistrer sous' ?
Autrement dit, existe-t-il un indicateur que je puisse tester sous VBA
pour
vérifier si la sauvegarde de mon classeur a été initiée par "Enregistrer
sous"
du menu "Fichier" ?
Voici le code actuel :
Const MessageSheetName As String = "Message"
Private Sub WorkBook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As
Boolean)
Dim sh As Worksheet
Dim sht_dislayed As Worksheet
'disable screen updating & events
Application.ScreenUpdating = False
Application.EnableEvents = False
'memorize current sheet
Set sht_dislayed = ActiveSheet
'hide sheets, except message
With ThisWorkbook
For Each sh In .Sheets
If sh.Name = MessageSheetName Then sh.Visible = True _
Else sh.Visible = xlSheetVeryHidden
Next
End With
'save file
ActiveWorkbook.Save
'show sheets, except message
With ThisWorkbook
For Each sh In .Sheets
If sh.Name = MessageSheetName Then sh.Visible = xlSheetVeryHidden
_
Else sh.Visible = True
Next
End With
'select memorized sheet
sht_dislayed.Select
'enable events & screen updating
Application.EnableEvents = False
Application.ScreenUpdating = False
'cancel file save
Cancel = True
End Sub
Private Sub workbook_open()
Dim sh As Worksheet
'disable screen updating & events
Application.ScreenUpdating = False
Application.EnableEvents = False
'show sheets, except message
With ThisWorkbook
For Each sh In .Sheets
If sh.Name = MessageSheetName Then sh.Visible = xlSheetVeryHidden
_
Else sh.Visible = True
Next
End With
'enable events & screen updating
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Merci d'avance pour toute aide !
--
CheerioSalut,
D'après une idée de John Walkenbach.
Tu gère toi même la boite de dialogue de sauvegarde ( voir ci dessous )
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'
Dim Msg As String
Dim Ans As Integer
If Me.Saved Then
' Fichier déjà sauvegardé donc rien à faire
Else
' Création de la boite de dialogue de sauvegarde
'
Msg = "Voulez-vous enregistrer les modifications apportées à "
Msg = Msg & Me.Name & " ?"
Ans = MsgBox(Msg, vbExclamation + vbYesNoCancel)
Select Case Ans
Case vbYes
' Je sauvegarde
Me.Save
Case vbNo
' Le fichier ne sera pas sauvegardé.
' Je fais croire qu'il a été sauvegardé pour ne pas avoir la
boite
de dialogue
' Pas de sauvegarde
Me.Saved = True
Case vbCancel
' Cancel alors retour au prog
Cancel = True
End Select
End If
End Sub
Amicalement,
leo
Bonsoir,
Merci, mais je ne vois pas que cela réponde à ce que je recherche.
Selon le choix de l'utilisateur, j'ai besoin de pouvoir 'enregistrer 'ou
'enregistrer sous', tout en gardant le contrôle par macro de ces
enregistrements
(Private Sub Workbook_BeforeSave).
Voici le contexte de ma demande.
J'ai écrit le code suivant afin d'empêcher l'accès à un fichier XLS si
l'opérateur n'a pas accepté d'activer les macros à l'ouverture du fichier.
Dans ce cas, j'affiche un message à destination de l'opérateur, lui
indiquant
qu'il doit accepter les macros pour pouvoir accéder au fichier.
L'idée est de gérer soi-même l'enregistrement du fichier, avec :
- désactivation des évènements et du rafraîchissement de l'écran
- mémorisation de la feuille active
- masquage de toutes les feuilles sauf la feuille comportant le message
- sauvegarde du fichier
- démasquage de toute les feuilles et masquage de la feuille comportant le
message
- activation de la feuille mémorisée
- activation des évènements et du rafraîchissement de l'écran
- inhibition de la sauvegarde du fichier
Tout fonctionne bien, sauf dans le cas où l'opérateur choisit d'activer
'Enregistrer sous' dans le menu 'Fichier'.
On obtient alors un enregistrement, mais pas la fenêtre permettant de
choisir le
nom de fichier.
D'où ma question :
Comment tester dans 'Private Sub Workbook_BeforeSave' si on y est arrivé
par
'enregistrer sous' ?
Autrement dit, existe-t-il un indicateur que je puisse tester sous VBA
pour
vérifier si la sauvegarde de mon classeur a été initiée par "Enregistrer
sous"
du menu "Fichier" ?
Voici le code actuel :
Const MessageSheetName As String = "Message"
Private Sub WorkBook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As
Boolean)
Dim sh As Worksheet
Dim sht_dislayed As Worksheet
'disable screen updating & events
Application.ScreenUpdating = False
Application.EnableEvents = False
'memorize current sheet
Set sht_dislayed = ActiveSheet
'hide sheets, except message
With ThisWorkbook
For Each sh In .Sheets
If sh.Name = MessageSheetName Then sh.Visible = True _
Else sh.Visible = xlSheetVeryHidden
Next
End With
'save file
ActiveWorkbook.Save
'show sheets, except message
With ThisWorkbook
For Each sh In .Sheets
If sh.Name = MessageSheetName Then sh.Visible = xlSheetVeryHidden
_
Else sh.Visible = True
Next
End With
'select memorized sheet
sht_dislayed.Select
'enable events & screen updating
Application.EnableEvents = False
Application.ScreenUpdating = False
'cancel file save
Cancel = True
End Sub
Private Sub workbook_open()
Dim sh As Worksheet
'disable screen updating & events
Application.ScreenUpdating = False
Application.EnableEvents = False
'show sheets, except message
With ThisWorkbook
For Each sh In .Sheets
If sh.Name = MessageSheetName Then sh.Visible = xlSheetVeryHidden
_
Else sh.Visible = True
Next
End With
'enable events & screen updating
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Merci d'avance pour toute aide !
--
Cheerio
Salut,
D'après une idée de John Walkenbach.
Tu gère toi même la boite de dialogue de sauvegarde ( voir ci dessous )
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'
Dim Msg As String
Dim Ans As Integer
If Me.Saved Then
' Fichier déjà sauvegardé donc rien à faire
Else
' Création de la boite de dialogue de sauvegarde
'
Msg = "Voulez-vous enregistrer les modifications apportées à "
Msg = Msg & Me.Name & " ?"
Ans = MsgBox(Msg, vbExclamation + vbYesNoCancel)
Select Case Ans
Case vbYes
' Je sauvegarde
Me.Save
Case vbNo
' Le fichier ne sera pas sauvegardé.
' Je fais croire qu'il a été sauvegardé pour ne pas avoir la
boite
de dialogue
' Pas de sauvegarde
Me.Saved = True
Case vbCancel
' Cancel alors retour au prog
Cancel = True
End Select
End If
End Sub
Amicalement,
leo
Bonsoir,
Merci, mais je ne vois pas que cela réponde à ce que je recherche.
Selon le choix de l'utilisateur, j'ai besoin de pouvoir 'enregistrer 'ou
'enregistrer sous', tout en gardant le contrôle par macro de ces
enregistrements
(Private Sub Workbook_BeforeSave).
Voici le contexte de ma demande.
J'ai écrit le code suivant afin d'empêcher l'accès à un fichier XLS si
l'opérateur n'a pas accepté d'activer les macros à l'ouverture du fichier.
Dans ce cas, j'affiche un message à destination de l'opérateur, lui
indiquant
qu'il doit accepter les macros pour pouvoir accéder au fichier.
L'idée est de gérer soi-même l'enregistrement du fichier, avec :
- désactivation des évènements et du rafraîchissement de l'écran
- mémorisation de la feuille active
- masquage de toutes les feuilles sauf la feuille comportant le message
- sauvegarde du fichier
- démasquage de toute les feuilles et masquage de la feuille comportant le
message
- activation de la feuille mémorisée
- activation des évènements et du rafraîchissement de l'écran
- inhibition de la sauvegarde du fichier
Tout fonctionne bien, sauf dans le cas où l'opérateur choisit d'activer
'Enregistrer sous' dans le menu 'Fichier'.
On obtient alors un enregistrement, mais pas la fenêtre permettant de
choisir le
nom de fichier.
D'où ma question :
Comment tester dans 'Private Sub Workbook_BeforeSave' si on y est arrivé
par
'enregistrer sous' ?
Autrement dit, existe-t-il un indicateur que je puisse tester sous VBA
pour
vérifier si la sauvegarde de mon classeur a été initiée par "Enregistrer
sous"
du menu "Fichier" ?
Voici le code actuel :
Const MessageSheetName As String = "Message"
Private Sub WorkBook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As
Boolean)
Dim sh As Worksheet
Dim sht_dislayed As Worksheet
'disable screen updating & events
Application.ScreenUpdating = False
Application.EnableEvents = False
'memorize current sheet
Set sht_dislayed = ActiveSheet
'hide sheets, except message
With ThisWorkbook
For Each sh In .Sheets
If sh.Name = MessageSheetName Then sh.Visible = True _
Else sh.Visible = xlSheetVeryHidden
Next
End With
'save file
ActiveWorkbook.Save
'show sheets, except message
With ThisWorkbook
For Each sh In .Sheets
If sh.Name = MessageSheetName Then sh.Visible = xlSheetVeryHidden
_
Else sh.Visible = True
Next
End With
'select memorized sheet
sht_dislayed.Select
'enable events & screen updating
Application.EnableEvents = False
Application.ScreenUpdating = False
'cancel file save
Cancel = True
End Sub
Private Sub workbook_open()
Dim sh As Worksheet
'disable screen updating & events
Application.ScreenUpdating = False
Application.EnableEvents = False
'show sheets, except message
With ThisWorkbook
For Each sh In .Sheets
If sh.Name = MessageSheetName Then sh.Visible = xlSheetVeryHidden
_
Else sh.Visible = True
Next
End With
'enable events & screen updating
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Merci d'avance pour toute aide !
--
CheerioSalut,
D'après une idée de John Walkenbach.
Tu gère toi même la boite de dialogue de sauvegarde ( voir ci dessous )
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'
Dim Msg As String
Dim Ans As Integer
If Me.Saved Then
' Fichier déjà sauvegardé donc rien à faire
Else
' Création de la boite de dialogue de sauvegarde
'
Msg = "Voulez-vous enregistrer les modifications apportées à "
Msg = Msg & Me.Name & " ?"
Ans = MsgBox(Msg, vbExclamation + vbYesNoCancel)
Select Case Ans
Case vbYes
' Je sauvegarde
Me.Save
Case vbNo
' Le fichier ne sera pas sauvegardé.
' Je fais croire qu'il a été sauvegardé pour ne pas avoir la
boite
de dialogue
' Pas de sauvegarde
Me.Saved = True
Case vbCancel
' Cancel alors retour au prog
Cancel = True
End Select
End If
End Sub
Amicalement,
leo
Bonjour.
Et si tu vérifie la valeur de la variable SaveAsUI, ^ca ne fonctionne pas?
If SaveAsUI = True Then
Bonjour.
Et si tu vérifie la valeur de la variable SaveAsUI, ^ca ne fonctionne pas?
If SaveAsUI = True Then
Bonjour.
Et si tu vérifie la valeur de la variable SaveAsUI, ^ca ne fonctionne pas?
If SaveAsUI = True Then