Evenement Fermeture d'un Classeur

Le
LANIMAL
Bonsoir,
J'ai écrit une procédure "FinIntervention" destinée à remettre toutes
choses en ordre lors de chaque fermeture du classeur toto.xls
et j'ai inclu "FinIntervention" dans le code ci-après :

Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Call FinIntervention
End Sub
--
Mais, évidemment, ça marche pas car lors de la demande de fermeture de
toto.xls les tâches s'exécutent dans l'ordre suivant :
1 - Demande de fermeture
2 - Proposition de sauvegarde par Excel - Réponse = OUI
3 - Sauvegarde
4 - Exécution de la Sub "FinIntervention"
5 - Fermeture du classeur
PROBLEME : Les choses ne sont pas remises en ordre dans la sauvegarde.

Comment faire pour que "FinIntervention" s'exécute AVANT la sauvegarde ?
Merci
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #19474161
Bonjour Lanimal,

Tu devrais utiliser ce type de procédure dans le ThisWorkbook

Il faut se rappeler qu'à la fermeture d'un classeur, Excel demande
à l'usager si ce dernier désire sauvegarder les modifications apportées.

il faut s'assurer de ne pas supprimer de ne pas modifier l'environnement
avant que l'usager ait répondu à cette question. Une façon de faire est de
créer une petite procédure qui va se substituer à la place de l'intervention
d'excel.

'------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim X As VbMsgBoxResult

If Me.Saved = False Then
X = MsgBox("Voulez-vous enregistrer les " & _
"modifications apportées à " & _
ThisWorkbook.Name & ".", vbInformation + _
vbYesNoCancel, "Attention")
Select Case X
Case vbYes
FinIntervention
Me.Save
Cancel = False
Case vbNo
FinIntervention
Me.Saved = True
Cancel = False
Case vbCancel
Cancel = True
End Select
End If

End Sub
'------------------------------------------------




"LANIMAL" #
Bonsoir,
J'ai écrit une procédure "FinIntervention" destinée à remettre toutes
choses en ordre lors de chaque fermeture du classeur toto.xls
et j'ai inclu "FinIntervention" dans le code ci-après :
---------------
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Call FinIntervention
End Sub
-----------------
Mais, évidemment, ça marche pas car lors de la demande de fermeture de
toto.xls les tâches s'exécutent dans l'ordre suivant :
1 - Demande de fermeture
2 - Proposition de sauvegarde par Excel - Réponse = OUI
3 - Sauvegarde
4 - Exécution de la Sub "FinIntervention"
5 - Fermeture du classeur
PROBLEME : Les choses ne sont pas remises en ordre dans la sauvegarde.

Comment faire pour que "FinIntervention" s'exécute AVANT la sauvegarde ?
Merci
LANIMAL
Le #19474591
Merci MichDenis, je ne te ferai pas l'affront de te dire que ça marche.
Mais, je ne suis pas clair sur les lignes "Me.Save" et "Me.Saved"
OK pour Save et Saved, mais "Me", c'est quoi ?
Excuse mon ignorance.
Merci encore.


MichDenis a écrit :
Bonjour Lanimal,

Tu devrais utiliser ce type de procédure dans le ThisWorkbook

Il faut se rappeler qu'à la fermeture d'un classeur, Excel demande
à l'usager si ce dernier désire sauvegarder les modifications apportées.

il faut s'assurer de ne pas supprimer de ne pas modifier l'environnement
avant que l'usager ait répondu à cette question. Une façon de faire est de
créer une petite procédure qui va se substituer à la place de l'intervention
d'excel.

'------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim X As VbMsgBoxResult

If Me.Saved = False Then
X = MsgBox("Voulez-vous enregistrer les " & _
"modifications apportées à " & _
ThisWorkbook.Name & ".", vbInformation + _
vbYesNoCancel, "Attention")
Select Case X
Case vbYes
FinIntervention
Me.Save
Cancel = False
Case vbNo
FinIntervention
Me.Saved = True
Cancel = False
Case vbCancel
Cancel = True
End Select
End If

End Sub
'------------------------------------------------




"LANIMAL" #
Bonsoir,
J'ai écrit une procédure "FinIntervention" destinée à remettre toutes
choses en ordre lors de chaque fermeture du classeur toto.xls
et j'ai inclu "FinIntervention" dans le code ci-après :
---------------
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Call FinIntervention
End Sub
-----------------
Mais, évidemment, ça marche pas car lors de la demande de fermeture de
toto.xls les tâches s'exécutent dans l'ordre suivant :
1 - Demande de fermeture
2 - Proposition de sauvegarde par Excel - Réponse = OUI
3 - Sauvegarde
4 - Exécution de la Sub "FinIntervention"
5 - Fermeture du classeur
PROBLEME : Les choses ne sont pas remises en ordre dans la sauvegarde.

Comment faire pour que "FinIntervention" s'exécute AVANT la sauvegarde ?
Merci



MichDenis
Le #19474581
Me : représente le module de classe où l'expression est utilisée.
Dans ce cas ci, il remplace (incarne) le classeur lui-même...
ou Thisworkbook.Save ou saved



"LANIMAL"
Merci MichDenis, je ne te ferai pas l'affront de te dire que ça marche.
Mais, je ne suis pas clair sur les lignes "Me.Save" et "Me.Saved"
OK pour Save et Saved, mais "Me", c'est quoi ?
Excuse mon ignorance.
Merci encore.


MichDenis a écrit :
Bonjour Lanimal,

Tu devrais utiliser ce type de procédure dans le ThisWorkbook

Il faut se rappeler qu'à la fermeture d'un classeur, Excel demande
à l'usager si ce dernier désire sauvegarder les modifications apportées.

il faut s'assurer de ne pas supprimer de ne pas modifier l'environnement
avant que l'usager ait répondu à cette question. Une façon de faire est de
créer une petite procédure qui va se substituer à la place de l'intervention
d'excel.

'------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim X As VbMsgBoxResult

If Me.Saved = False Then
X = MsgBox("Voulez-vous enregistrer les " & _
"modifications apportées à " & _
ThisWorkbook.Name & ".", vbInformation + _
vbYesNoCancel, "Attention")
Select Case X
Case vbYes
FinIntervention
Me.Save
Cancel = False
Case vbNo
FinIntervention
Me.Saved = True
Cancel = False
Case vbCancel
Cancel = True
End Select
End If

End Sub
'------------------------------------------------




"LANIMAL" #
Bonsoir,
J'ai écrit une procédure "FinIntervention" destinée à remettre toutes
choses en ordre lors de chaque fermeture du classeur toto.xls
et j'ai inclu "FinIntervention" dans le code ci-après :
---------------
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Call FinIntervention
End Sub
-----------------
Mais, évidemment, ça marche pas car lors de la demande de fermeture de
toto.xls les tâches s'exécutent dans l'ordre suivant :
1 - Demande de fermeture
2 - Proposition de sauvegarde par Excel - Réponse = OUI
3 - Sauvegarde
4 - Exécution de la Sub "FinIntervention"
5 - Fermeture du classeur
PROBLEME : Les choses ne sont pas remises en ordre dans la sauvegarde.

Comment faire pour que "FinIntervention" s'exécute AVANT la sauvegarde ?
Merci



LANIMAL
Le #19477821
Bonjour MichDenis
Encore merci car tu m'as décoincé, et j'ai progressé.
Simplement pour t'informer de la suite...
car j'ai rencontré un Pb :
Après avoir travaillé, si je lance une sauvegarde directement (Ctrl + S)
Et que ensuite je ferme le classeur, la procedure que tu me proposes
n'est pas activée, et donc "FinIntervention" ne s'exécute pas.

Alors j'ai utiliséPrivate Sub Workbook_BeforeSave(ByVal ....)
qui s'exécute systématiquement avant toute sauvegarde,
demandée directement ou par Excel, avant fermeture.
J'avais bien pensé à un tel évènement (BeforeSave), et j'étais étonné de
ne pas le trouver dans la liste déroulante des procédures de Workbook,
juste... j'avais pas assez déroulé ! ! !
Merci encore de m'avoir mis sur la route.


MichDenis a écrit :
Me : représente le module de classe où l'expression est utilisée.
Dans ce cas ci, il remplace (incarne) le classeur lui-même...
ou Thisworkbook.Save ou saved



"LANIMAL"
Merci MichDenis, je ne te ferai pas l'affront de te dire que ça marche.
Mais, je ne suis pas clair sur les lignes "Me.Save" et "Me.Saved"
OK pour Save et Saved, mais "Me", c'est quoi ?
Excuse mon ignorance.
Merci encore.


MichDenis a écrit :
Bonjour Lanimal,

Tu devrais utiliser ce type de procédure dans le ThisWorkbook

Il faut se rappeler qu'à la fermeture d'un classeur, Excel demande
à l'usager si ce dernier désire sauvegarder les modifications apportées.

il faut s'assurer de ne pas supprimer de ne pas modifier l'environnement
avant que l'usager ait répondu à cette question. Une façon de faire est de
créer une petite procédure qui va se substituer à la place de l'intervention
d'excel.

'------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim X As VbMsgBoxResult

If Me.Saved = False Then
X = MsgBox("Voulez-vous enregistrer les " & _
"modifications apportées à " & _
ThisWorkbook.Name & ".", vbInformation + _
vbYesNoCancel, "Attention")
Select Case X
Case vbYes
FinIntervention
Me.Save
Cancel = False
Case vbNo
FinIntervention
Me.Saved = True
Cancel = False
Case vbCancel
Cancel = True
End Select
End If

End Sub
'------------------------------------------------




"LANIMAL" #
Bonsoir,
J'ai écrit une procédure "FinIntervention" destinée à remettre toutes
choses en ordre lors de chaque fermeture du classeur toto.xls
et j'ai inclu "FinIntervention" dans le code ci-après :
---------------
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Call FinIntervention
End Sub
-----------------
Mais, évidemment, ça marche pas car lors de la demande de fermeture de
toto.xls les tâches s'exécutent dans l'ordre suivant :
1 - Demande de fermeture
2 - Proposition de sauvegarde par Excel - Réponse = OUI
3 - Sauvegarde
4 - Exécution de la Sub "FinIntervention"
5 - Fermeture du classeur
PROBLEME : Les choses ne sont pas remises en ordre dans la sauvegarde.

Comment faire pour que "FinIntervention" s'exécute AVANT la sauvegarde ?
Merci





MichDenis
Le #19477791
Tu as raison, tu aurais pu modifier la procédure comme ceci :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim X As VbMsgBoxResult

If Me.Saved = False Then
X = MsgBox("Voulez-vous enregistrer les " & _
"modifications apportées à " & _
ThisWorkbook.Name & ".", vbInformation + _
vbYesNoCancel, "Attention")
Select Case X
Case vbYes
FinIntervention
Me.Save
Cancel = False
Case vbNo
FinIntervention
Me.Saved = True
Cancel = False
Case vbCancel
Cancel = True
End Select
Else
FinIntervention
End If

End Sub




"LANIMAL"
Bonjour MichDenis
Encore merci car tu m'as décoincé, et j'ai progressé.
Simplement pour t'informer de la suite...
car j'ai rencontré un Pb :
Après avoir travaillé, si je lance une sauvegarde directement (Ctrl + S)
Et que ensuite je ferme le classeur, la procedure que tu me proposes
n'est pas activée, et donc "FinIntervention" ne s'exécute pas.

Alors j'ai utiliséPrivate Sub Workbook_BeforeSave(ByVal ....)
qui s'exécute systématiquement avant toute sauvegarde,
demandée directement ou par Excel, avant fermeture.
J'avais bien pensé à un tel évènement (BeforeSave), et j'étais étonné de
ne pas le trouver dans la liste déroulante des procédures de Workbook,
juste... j'avais pas assez déroulé ! ! !
Merci encore de m'avoir mis sur la route.


MichDenis a écrit :
Me : représente le module de classe où l'expression est utilisée.
Dans ce cas ci, il remplace (incarne) le classeur lui-même...
ou Thisworkbook.Save ou saved



"LANIMAL"
Merci MichDenis, je ne te ferai pas l'affront de te dire que ça marche.
Mais, je ne suis pas clair sur les lignes "Me.Save" et "Me.Saved"
OK pour Save et Saved, mais "Me", c'est quoi ?
Excuse mon ignorance.
Merci encore.


MichDenis a écrit :
Bonjour Lanimal,

Tu devrais utiliser ce type de procédure dans le ThisWorkbook

Il faut se rappeler qu'à la fermeture d'un classeur, Excel demande
à l'usager si ce dernier désire sauvegarder les modifications apportées.

il faut s'assurer de ne pas supprimer de ne pas modifier l'environnement
avant que l'usager ait répondu à cette question. Une façon de faire est de
créer une petite procédure qui va se substituer à la place de l'intervention
d'excel.

'------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim X As VbMsgBoxResult

If Me.Saved = False Then
X = MsgBox("Voulez-vous enregistrer les " & _
"modifications apportées à " & _
ThisWorkbook.Name & ".", vbInformation + _
vbYesNoCancel, "Attention")
Select Case X
Case vbYes
FinIntervention
Me.Save
Cancel = False
Case vbNo
FinIntervention
Me.Saved = True
Cancel = False
Case vbCancel
Cancel = True
End Select
End If

End Sub
'------------------------------------------------




"LANIMAL" #
Bonsoir,
J'ai écrit une procédure "FinIntervention" destinée à remettre toutes
choses en ordre lors de chaque fermeture du classeur toto.xls
et j'ai inclu "FinIntervention" dans le code ci-après :
---------------
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Call FinIntervention
End Sub
-----------------
Mais, évidemment, ça marche pas car lors de la demande de fermeture de
toto.xls les tâches s'exécutent dans l'ordre suivant :
1 - Demande de fermeture
2 - Proposition de sauvegarde par Excel - Réponse = OUI
3 - Sauvegarde
4 - Exécution de la Sub "FinIntervention"
5 - Fermeture du classeur
PROBLEME : Les choses ne sont pas remises en ordre dans la sauvegarde.

Comment faire pour que "FinIntervention" s'exécute AVANT la sauvegarde ?
Merci





LANIMAL
Le #19479241
Excuse-moi, tu vas penser que je suis casse-pied...
Non, juste un peu pointilleux, et j'aime bien comprendre.
Alors, y a-t-il un intérêt que je ne verrais pas à écrire la procédure
que tu me conseilles, plutôt que :
----------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As
Boolean)
Call FinIntervention
End Sub
------------------------------
qui fait le job avec 3 lignes de code.
De toute façon, merci, j'ai appris des choses avec ta proposition.

MichDenis a écrit :
Tu as raison, tu aurais pu modifier la procédure comme ceci :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim X As VbMsgBoxResult

If Me.Saved = False Then
X = MsgBox("Voulez-vous enregistrer les " & _
"modifications apportées à " & _
ThisWorkbook.Name & ".", vbInformation + _
vbYesNoCancel, "Attention")
Select Case X
Case vbYes
FinIntervention
Me.Save
Cancel = False
Case vbNo
FinIntervention
Me.Saved = True
Cancel = False
Case vbCancel
Cancel = True
End Select
Else
FinIntervention
End If

End Sub




"LANIMAL"
Bonjour MichDenis
Encore merci car tu m'as décoincé, et j'ai progressé.
Simplement pour t'informer de la suite...
car j'ai rencontré un Pb :
Après avoir travaillé, si je lance une sauvegarde directement (Ctrl + S)
Et que ensuite je ferme le classeur, la procedure que tu me proposes
n'est pas activée, et donc "FinIntervention" ne s'exécute pas.

Alors j'ai utiliséPrivate Sub Workbook_BeforeSave(ByVal ....)
qui s'exécute systématiquement avant toute sauvegarde,
demandée directement ou par Excel, avant fermeture.
J'avais bien pensé à un tel évènement (BeforeSave), et j'étais étonné de
ne pas le trouver dans la liste déroulante des procédures de Workbook,
juste... j'avais pas assez déroulé ! ! !
Merci encore de m'avoir mis sur la route.


MichDenis a écrit :
Me : représente le module de classe où l'expression est utilisée.
Dans ce cas ci, il remplace (incarne) le classeur lui-même...
ou Thisworkbook.Save ou saved



"LANIMAL"
Merci MichDenis, je ne te ferai pas l'affront de te dire que ça marche.
Mais, je ne suis pas clair sur les lignes "Me.Save" et "Me.Saved"
OK pour Save et Saved, mais "Me", c'est quoi ?
Excuse mon ignorance.
Merci encore.


MichDenis a écrit :
Bonjour Lanimal,

Tu devrais utiliser ce type de procédure dans le ThisWorkbook

Il faut se rappeler qu'à la fermeture d'un classeur, Excel demande
à l'usager si ce dernier désire sauvegarder les modifications apportées.

il faut s'assurer de ne pas supprimer de ne pas modifier l'environnement
avant que l'usager ait répondu à cette question. Une façon de faire est de
créer une petite procédure qui va se substituer à la place de l'intervention
d'excel.

'------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim X As VbMsgBoxResult

If Me.Saved = False Then
X = MsgBox("Voulez-vous enregistrer les " & _
"modifications apportées à " & _
ThisWorkbook.Name & ".", vbInformation + _
vbYesNoCancel, "Attention")
Select Case X
Case vbYes
FinIntervention
Me.Save
Cancel = False
Case vbNo
FinIntervention
Me.Saved = True
Cancel = False
Case vbCancel
Cancel = True
End Select
End If

End Sub
'------------------------------------------------




"LANIMAL" #
Bonsoir,
J'ai écrit une procédure "FinIntervention" destinée à remettre toutes
choses en ordre lors de chaque fermeture du classeur toto.xls
et j'ai inclu "FinIntervention" dans le code ci-après :
---------------
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Call FinIntervention
End Sub
-----------------
Mais, évidemment, ça marche pas car lors de la demande de fermeture de
toto.xls les tâches s'exécutent dans l'ordre suivant :
1 - Demande de fermeture
2 - Proposition de sauvegarde par Excel - Réponse = OUI
3 - Sauvegarde
4 - Exécution de la Sub "FinIntervention"
5 - Fermeture du classeur
PROBLEME : Les choses ne sont pas remises en ordre dans la sauvegarde.

Comment faire pour que "FinIntervention" s'exécute AVANT la sauvegarde ?
Merci







MichDenis
Le #19479481
Ta procédure fait le travail seulement si tu sauvegardes les modifications de ta feuille.
A ) tu dois t'assurer que cela soit fait !
B ) Est-ce qu'à chaque fois que tu enregistres ton fichier tu veux déclencher la procédure
?

Enregistrer le fichier n'est pas l'équivalent de le fermer!




"LANIMAL"
Excuse-moi, tu vas penser que je suis casse-pied...
Non, juste un peu pointilleux, et j'aime bien comprendre.
Alors, y a-t-il un intérêt que je ne verrais pas à écrire la procédure
que tu me conseilles, plutôt que :
----------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As
Boolean)
Call FinIntervention
End Sub
------------------------------
qui fait le job avec 3 lignes de code.
De toute façon, merci, j'ai appris des choses avec ta proposition.

MichDenis a écrit :
Tu as raison, tu aurais pu modifier la procédure comme ceci :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim X As VbMsgBoxResult

If Me.Saved = False Then
X = MsgBox("Voulez-vous enregistrer les " & _
"modifications apportées à " & _
ThisWorkbook.Name & ".", vbInformation + _
vbYesNoCancel, "Attention")
Select Case X
Case vbYes
FinIntervention
Me.Save
Cancel = False
Case vbNo
FinIntervention
Me.Saved = True
Cancel = False
Case vbCancel
Cancel = True
End Select
Else
FinIntervention
End If

End Sub




"LANIMAL"
Bonjour MichDenis
Encore merci car tu m'as décoincé, et j'ai progressé.
Simplement pour t'informer de la suite...
car j'ai rencontré un Pb :
Après avoir travaillé, si je lance une sauvegarde directement (Ctrl + S)
Et que ensuite je ferme le classeur, la procedure que tu me proposes
n'est pas activée, et donc "FinIntervention" ne s'exécute pas.

Alors j'ai utiliséPrivate Sub Workbook_BeforeSave(ByVal ....)
qui s'exécute systématiquement avant toute sauvegarde,
demandée directement ou par Excel, avant fermeture.
J'avais bien pensé à un tel évènement (BeforeSave), et j'étais étonné de
ne pas le trouver dans la liste déroulante des procédures de Workbook,
juste... j'avais pas assez déroulé ! ! !
Merci encore de m'avoir mis sur la route.


MichDenis a écrit :
Me : représente le module de classe où l'expression est utilisée.
Dans ce cas ci, il remplace (incarne) le classeur lui-même...
ou Thisworkbook.Save ou saved



"LANIMAL"
Merci MichDenis, je ne te ferai pas l'affront de te dire que ça marche.
Mais, je ne suis pas clair sur les lignes "Me.Save" et "Me.Saved"
OK pour Save et Saved, mais "Me", c'est quoi ?
Excuse mon ignorance.
Merci encore.


MichDenis a écrit :
Bonjour Lanimal,

Tu devrais utiliser ce type de procédure dans le ThisWorkbook

Il faut se rappeler qu'à la fermeture d'un classeur, Excel demande
à l'usager si ce dernier désire sauvegarder les modifications apportées.

il faut s'assurer de ne pas supprimer de ne pas modifier l'environnement
avant que l'usager ait répondu à cette question. Une façon de faire est de
créer une petite procédure qui va se substituer à la place de l'intervention
d'excel.

'------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim X As VbMsgBoxResult

If Me.Saved = False Then
X = MsgBox("Voulez-vous enregistrer les " & _
"modifications apportées à " & _
ThisWorkbook.Name & ".", vbInformation + _
vbYesNoCancel, "Attention")
Select Case X
Case vbYes
FinIntervention
Me.Save
Cancel = False
Case vbNo
FinIntervention
Me.Saved = True
Cancel = False
Case vbCancel
Cancel = True
End Select
End If

End Sub
'------------------------------------------------




"LANIMAL" #
Bonsoir,
J'ai écrit une procédure "FinIntervention" destinée à remettre toutes
choses en ordre lors de chaque fermeture du classeur toto.xls
et j'ai inclu "FinIntervention" dans le code ci-après :
---------------
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Call FinIntervention
End Sub
-----------------
Mais, évidemment, ça marche pas car lors de la demande de fermeture de
toto.xls les tâches s'exécutent dans l'ordre suivant :
1 - Demande de fermeture
2 - Proposition de sauvegarde par Excel - Réponse = OUI
3 - Sauvegarde
4 - Exécution de la Sub "FinIntervention"
5 - Fermeture du classeur
PROBLEME : Les choses ne sont pas remises en ordre dans la sauvegarde.

Comment faire pour que "FinIntervention" s'exécute AVANT la sauvegarde ?
Merci







LANIMAL
Le #19479941
OK, je vois la nuance.

MichDenis a écrit :
Ta procédure fait le travail seulement si tu sauvegardes les modifications de ta feuille.
A ) tu dois t'assurer que cela soit fait !


Oui, effectivement c'est un réflex que nos avonsde sauvegarder
avant de fermer (sur invite d'Excel). Quand on oublie, on n'a plus qu'à
reprendre les saisies ! ! ! :-(
B ) Est-ce qu'à chaque fois que tu enregistres ton fichier tu veux déclencher la procédure
?


Oui, c'est absolument essentiel, notamment pour re-masquer des données
confidentielles "dé-masquées" par ceux qui sont habilités à les voir,
mais qui ne doivent pas être vues par tous les utilisateurs.

Enregistrer le fichier n'est pas l'équivalent de le fermer!


OK

Merci encore pour ton aide.




"LANIMAL"
Excuse-moi, tu vas penser que je suis casse-pied...
Non, juste un peu pointilleux, et j'aime bien comprendre.
Alors, y a-t-il un intérêt que je ne verrais pas à écrire la procédure
que tu me conseilles, plutôt que :
----------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, Cancel As
Boolean)
Call FinIntervention
End Sub
------------------------------
qui fait le job avec 3 lignes de code.
De toute façon, merci, j'ai appris des choses avec ta proposition.

MichDenis a écrit :
Tu as raison, tu aurais pu modifier la procédure comme ceci :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim X As VbMsgBoxResult

If Me.Saved = False Then
X = MsgBox("Voulez-vous enregistrer les " & _
"modifications apportées à " & _
ThisWorkbook.Name & ".", vbInformation + _
vbYesNoCancel, "Attention")
Select Case X
Case vbYes
FinIntervention
Me.Save
Cancel = False
Case vbNo
FinIntervention
Me.Saved = True
Cancel = False
Case vbCancel
Cancel = True
End Select
Else
FinIntervention
End If

End Sub




"LANIMAL"
Bonjour MichDenis
Encore merci car tu m'as décoincé, et j'ai progressé.
Simplement pour t'informer de la suite...
car j'ai rencontré un Pb :
Après avoir travaillé, si je lance une sauvegarde directement (Ctrl + S)
Et que ensuite je ferme le classeur, la procedure que tu me proposes
n'est pas activée, et donc "FinIntervention" ne s'exécute pas.

Alors j'ai utiliséPrivate Sub Workbook_BeforeSave(ByVal ....)
qui s'exécute systématiquement avant toute sauvegarde,
demandée directement ou par Excel, avant fermeture.
J'avais bien pensé à un tel évènement (BeforeSave), et j'étais étonné de
ne pas le trouver dans la liste déroulante des procédures de Workbook,
juste... j'avais pas assez déroulé ! ! !
Merci encore de m'avoir mis sur la route.


MichDenis a écrit :
Me : représente le module de classe où l'expression est utilisée.
Dans ce cas ci, il remplace (incarne) le classeur lui-même...
ou Thisworkbook.Save ou saved



"LANIMAL"
Merci MichDenis, je ne te ferai pas l'affront de te dire que ça marche.
Mais, je ne suis pas clair sur les lignes "Me.Save" et "Me.Saved"
OK pour Save et Saved, mais "Me", c'est quoi ?
Excuse mon ignorance.
Merci encore.


MichDenis a écrit :
Bonjour Lanimal,

Tu devrais utiliser ce type de procédure dans le ThisWorkbook

Il faut se rappeler qu'à la fermeture d'un classeur, Excel demande
à l'usager si ce dernier désire sauvegarder les modifications apportées.

il faut s'assurer de ne pas supprimer de ne pas modifier l'environnement
avant que l'usager ait répondu à cette question. Une façon de faire est de
créer une petite procédure qui va se substituer à la place de l'intervention
d'excel.

'------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim X As VbMsgBoxResult

If Me.Saved = False Then
X = MsgBox("Voulez-vous enregistrer les " & _
"modifications apportées à " & _
ThisWorkbook.Name & ".", vbInformation + _
vbYesNoCancel, "Attention")
Select Case X
Case vbYes
FinIntervention
Me.Save
Cancel = False
Case vbNo
FinIntervention
Me.Saved = True
Cancel = False
Case vbCancel
Cancel = True
End Select
End If

End Sub
'------------------------------------------------




"LANIMAL" #
Bonsoir,
J'ai écrit une procédure "FinIntervention" destinée à remettre toutes
choses en ordre lors de chaque fermeture du classeur toto.xls
et j'ai inclu "FinIntervention" dans le code ci-après :
---------------
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
Call FinIntervention
End Sub
-----------------
Mais, évidemment, ça marche pas car lors de la demande de fermeture de
toto.xls les tâches s'exécutent dans l'ordre suivant :
1 - Demande de fermeture
2 - Proposition de sauvegarde par Excel - Réponse = OUI
3 - Sauvegarde
4 - Exécution de la Sub "FinIntervention"
5 - Fermeture du classeur
PROBLEME : Les choses ne sont pas remises en ordre dans la sauvegarde.

Comment faire pour que "FinIntervention" s'exécute AVANT la sauvegarde ?
Merci









Publicité
Poster une réponse
Anonyme