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

Fermeture classeur par bouton de contrôle

8 réponses
Avatar
j-pascal
Bonsoir,

Je tourne en rond et c'est peu de le dire !!

Code :

'----
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !",
_
vbExclamation, " Veuillez utiliser fichier / fermer "
Cancel = True
Else
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " &
.Name
End With
End If
End Sub
'----

Question :

Pourquoi ce code fonctionne-t-il parfaitement (sauvegarde + copie
datée) dès lors qu'on ferme le classeur par "Fichier/Fermer", et qu'il
ne fonctionne pas quand on le ferme avec un Bouton de la boîte à outils
de contrôle ????????????

J'ai mis des "Stop" partout ; la procédure se déroule strictement de la
même façon dans les deux cas !!

Quand on ferme le classeur avec le bouton, le code passe bien par la
ligne :

'---
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
'---

et pourtant, la copie ne se fait pas !!

J'ai même fait une recherche sur tout le poste de travail au cas où la
sauvegarde se serait mise là où je ne l'attendais pas ... RIEN !!! Avec
ou sans actualisation ... avec des DoEvents et des Application.Enable =
True à droite, à gauche...

(Evidemment la procédure passe dans les deux cas par le
WorkBook.BeforeClose ...).

Je ne sais plus quoi faire ;-(

Help, please !!!

JP

8 réponses

Avatar
j-pascal
Bonjour Daniel,

Exactement ce qui est dans mon dernier post (cf. ci dessous) :

A l'ouverture, les feuilles passent en mode plein écran (je conserve
uniquement les onglets).

Pour fermer le classeur, j'ai prévu un bouton de la boite outils de
contrôle (puisque l'utilisateur n'a plus recours à Fichier/Fermer ...

Private Sub Fermer_Click()
ThisWorkbook.Close 'savechanges:úlse
End Sub

Quand on clique sur le bouton, on passe bien par :

Workbook_BeforeClose
puis
Workbook_BeforeSave

... mais le code de Workbook_BeforeSave ne fait pas ce qu'il semble
devoir faire :

'---
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
End With
'---

Le problème, c'est que si j'affecte à ce bouton une procédure qui
simplement annule le plein écran (dans ce cas là, Fichier/Fermer est
accessible...) et que l'utilisateur clique sur Annuler avant
d'enregitrer le classeur, ce dernier va rester en affichage "normal"
jusqu'à la prochaine fermeture !

jp



Bonsoir.
J'ai regardé de loin test derniers posts. Dis-nous plutôt ce que tu veux
faire, c'est plus facile de nous expliquer ce qui bugue.
Cordialement.
Daniel

Bonsoir,

Je tourne en rond et c'est peu de le dire !!

Code :

'----
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !", _
vbExclamation, " Veuillez utiliser fichier / fermer "
Cancel = True
Else
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " &
.Name
End With
End If
End Sub
'----

Question :

Pourquoi ce code fonctionne-t-il parfaitement (sauvegarde + copie datée)
dès lors qu'on ferme le classeur par "Fichier/Fermer", et qu'il ne
fonctionne pas quand on le ferme avec un Bouton de la boîte à outils de
contrôle ????????????

J'ai mis des "Stop" partout ; la procédure se déroule strictement de la
même façon dans les deux cas !!

Quand on ferme le classeur avec le bouton, le code passe bien par la ligne
:

'---
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
'---

et pourtant, la copie ne se fait pas !!

J'ai même fait une recherche sur tout le poste de travail au cas où la
sauvegarde se serait mise là où je ne l'attendais pas ... RIEN !!! Avec ou
sans actualisation ... avec des DoEvents et des Application.Enable = True à
droite, à gauche...

(Evidemment la procédure passe dans les deux cas par le
WorkBook.BeforeClose ...).

Je ne sais plus quoi faire ;-(

Help, please !!!

JP




Avatar
j-pascal
Bonjour Daniel,

Exactement ce qui est dans mon dernier post (cf. ci dessous) :

A l'ouverture, les feuilles passent en mode plein écran (je conserve
uniquement les onglets).

Pour fermer le classeur, j'ai prévu un bouton de la boite outils de
contrôle (puisque l'utilisateur n'a plus recours à Fichier/Fermer ...

Private Sub Fermer_Click()
ThisWorkbook.Close 'savechanges:úlse
End Sub

Quand on clique sur le bouton, on passe bien par :

Workbook_BeforeClose
puis
Workbook_BeforeSave

... mais le code de Workbook_BeforeSave ne fait pas ce qu'il semble
devoir faire :

'---
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
End With
'---

Le problème, c'est que si j'affecte à ce bouton une procédure qui
simplement annule le plein écran (dans ce cas là, Fichier/Fermer est
accessible...) et que l'utilisateur clique sur Annuler avant
d'enregitrer le classeur, ce dernier va rester en affichage "normal"
jusqu'à la prochaine fermeture !

jp



Bonsoir.
J'ai regardé de loin test derniers posts. Dis-nous plutôt ce que tu veux
faire, c'est plus facile de nous expliquer ce qui bugue.
Cordialement.
Daniel

Bonsoir,

Je tourne en rond et c'est peu de le dire !!

Code :

'----
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !", _
vbExclamation, " Veuillez utiliser fichier / fermer "
Cancel = True
Else
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " &
.Name
End With
End If
End Sub
'----

Question :

Pourquoi ce code fonctionne-t-il parfaitement (sauvegarde + copie datée)
dès lors qu'on ferme le classeur par "Fichier/Fermer", et qu'il ne
fonctionne pas quand on le ferme avec un Bouton de la boîte à outils de
contrôle ????????????

J'ai mis des "Stop" partout ; la procédure se déroule strictement de la
même façon dans les deux cas !!

Quand on ferme le classeur avec le bouton, le code passe bien par la ligne
:

'---
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
'---

et pourtant, la copie ne se fait pas !!

J'ai même fait une recherche sur tout le poste de travail au cas où la
sauvegarde se serait mise là où je ne l'attendais pas ... RIEN !!! Avec ou
sans actualisation ... avec des DoEvents et des Application.Enable = True à
droite, à gauche...

(Evidemment la procédure passe dans les deux cas par le
WorkBook.BeforeClose ...).

Je ne sais plus quoi faire ;-(

Help, please !!!

JP




Avatar
j-pascal
Re,

En désespoir de cause je vais ajouter :

Private Sub Fermer_Click()
Application.CommandBars(1).Enabled = True
End Sub

... et Fermer/Enregistrer le classeur depuis la barre de menus.
Ce n'est pas ce que je voulais, mais ça marche.

jp

Bonjour Daniel,

Exactement ce qui est dans mon dernier post (cf. ci dessous) :

A l'ouverture, les feuilles passent en mode plein écran (je conserve
uniquement les onglets).

Pour fermer le classeur, j'ai prévu un bouton de la boite outils de contrôle
(puisque l'utilisateur n'a plus recours à Fichier/Fermer ...

Private Sub Fermer_Click()
ThisWorkbook.Close 'savechanges:úlse
End Sub

Quand on clique sur le bouton, on passe bien par :

Workbook_BeforeClose
puis
Workbook_BeforeSave

... mais le code de Workbook_BeforeSave ne fait pas ce qu'il semble devoir
faire :

'---
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
End With
'---

Le problème, c'est que si j'affecte à ce bouton une procédure qui simplement
annule le plein écran (dans ce cas là, Fichier/Fermer est accessible...) et
que l'utilisateur clique sur Annuler avant d'enregitrer le classeur, ce
dernier va rester en affichage "normal" jusqu'à la prochaine fermeture !

jp



Bonsoir.
J'ai regardé de loin test derniers posts. Dis-nous plutôt ce que tu veux
faire, c'est plus facile de nous expliquer ce qui bugue.
Cordialement.
Daniel

Bonsoir,

Je tourne en rond et c'est peu de le dire !!

Code :

'----
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !", _
vbExclamation, " Veuillez utiliser fichier / fermer "
Cancel = True
Else
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " &
.Name
End With
End If
End Sub
'----

Question :

Pourquoi ce code fonctionne-t-il parfaitement (sauvegarde + copie datée)
dès lors qu'on ferme le classeur par "Fichier/Fermer", et qu'il ne
fonctionne pas quand on le ferme avec un Bouton de la boîte à outils de
contrôle ????????????

J'ai mis des "Stop" partout ; la procédure se déroule strictement de la
même façon dans les deux cas !!

Quand on ferme le classeur avec le bouton, le code passe bien par la ligne
:

'---
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
'---

et pourtant, la copie ne se fait pas !!

J'ai même fait une recherche sur tout le poste de travail au cas où la
sauvegarde se serait mise là où je ne l'attendais pas ... RIEN !!! Avec ou
sans actualisation ... avec des DoEvents et des Application.Enable = True
à droite, à gauche...

(Evidemment la procédure passe dans les deux cas par le
WorkBook.BeforeClose ...).

Je ne sais plus quoi faire ;-(

Help, please !!!

JP






Avatar
j-pascal
Re,

Pourquoi, lorsque je clique sur "Oui" à partir de ce nouvel essai :

'----
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Message As Byte
Message = MsgBox("Voulez-vous enregister les modifications ?",
vbYesNo)

If Message = vbNo Then Cancel = True Else : ThisWorkbook.Save
End Sub
'----

... Excel me demande une 2nd fois si je veux sauvegarder ????
Il est sourd ???

Si je dis "Oui", "If Message = vbNo Then Cancel = True Else :
ThisWorkbook.Save" aboutit bien à "ThisWorkbook.Save" !?!? Non ???

jp



Re,

En désespoir de cause je vais ajouter :

Private Sub Fermer_Click()
Application.CommandBars(1).Enabled = True
End Sub

... et Fermer/Enregistrer le classeur depuis la barre de menus.
Ce n'est pas ce que je voulais, mais ça marche.

jp

Bonjour Daniel,

Exactement ce qui est dans mon dernier post (cf. ci dessous) :

A l'ouverture, les feuilles passent en mode plein écran (je conserve
uniquement les onglets).

Pour fermer le classeur, j'ai prévu un bouton de la boite outils de
contrôle (puisque l'utilisateur n'a plus recours à Fichier/Fermer ...

Private Sub Fermer_Click()
ThisWorkbook.Close 'savechanges:úlse
End Sub

Quand on clique sur le bouton, on passe bien par :

Workbook_BeforeClose
puis
Workbook_BeforeSave

... mais le code de Workbook_BeforeSave ne fait pas ce qu'il semble devoir
faire :

'---
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
End With
'---

Le problème, c'est que si j'affecte à ce bouton une procédure qui
simplement annule le plein écran (dans ce cas là, Fichier/Fermer est
accessible...) et que l'utilisateur clique sur Annuler avant d'enregitrer
le classeur, ce dernier va rester en affichage "normal" jusqu'à la
prochaine fermeture !

jp



Bonsoir.
J'ai regardé de loin test derniers posts. Dis-nous plutôt ce que tu veux
faire, c'est plus facile de nous expliquer ce qui bugue.
Cordialement.
Daniel

Bonsoir,

Je tourne en rond et c'est peu de le dire !!

Code :

'----
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !", _
vbExclamation, " Veuillez utiliser fichier / fermer "
Cancel = True
Else
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " &
.Name
End With
End If
End Sub
'----

Question :

Pourquoi ce code fonctionne-t-il parfaitement (sauvegarde + copie datée)
dès lors qu'on ferme le classeur par "Fichier/Fermer", et qu'il ne
fonctionne pas quand on le ferme avec un Bouton de la boîte à outils de
contrôle ????????????

J'ai mis des "Stop" partout ; la procédure se déroule strictement de la
même façon dans les deux cas !!

Quand on ferme le classeur avec le bouton, le code passe bien par la
ligne :

'---
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
'---

et pourtant, la copie ne se fait pas !!

J'ai même fait une recherche sur tout le poste de travail au cas où la
sauvegarde se serait mise là où je ne l'attendais pas ... RIEN !!! Avec
ou sans actualisation ... avec des DoEvents et des Application.Enable =
True à droite, à gauche...

(Evidemment la procédure passe dans les deux cas par le
WorkBook.BeforeClose ...).

Je ne sais plus quoi faire ;-(

Help, please !!!

JP








Avatar
Merguez07
effectivement il semblerait qu'il ne puisse plus faire de copie après la
macro beforeclose.

Pourquoi ne met tu pas directement la sauvegarde dans la macro du bouton
Private Sub CommandButton1_Click()
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
.Close
End With
End Sub

Xavier



j-pascal a écrit :
Bonsoir,

Je tourne en rond et c'est peu de le dire !!

Code :

'----
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !", _
vbExclamation, " Veuillez utiliser fichier / fermer "
Cancel = True
Else
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " &
.Name
End With
End If
End Sub
'----

Question :

Pourquoi ce code fonctionne-t-il parfaitement (sauvegarde + copie datée)
dès lors qu'on ferme le classeur par "Fichier/Fermer", et qu'il ne
fonctionne pas quand on le ferme avec un Bouton de la boîte à outils de
contrôle ????????????

J'ai mis des "Stop" partout ; la procédure se déroule strictement de la
même façon dans les deux cas !!

Quand on ferme le classeur avec le bouton, le code passe bien par la
ligne :

'---
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
'---

et pourtant, la copie ne se fait pas !!

J'ai même fait une recherche sur tout le poste de travail au cas où la
sauvegarde se serait mise là où je ne l'attendais pas ... RIEN !!! Avec
ou sans actualisation ... avec des DoEvents et des Application.Enable =
True à droite, à gauche...

(Evidemment la procédure passe dans les deux cas par le
WorkBook.BeforeClose ...).

Je ne sais plus quoi faire ;-(

Help, please !!!

JP




Avatar
Daniel.C
Bonjour.
Pour éviter les malentendus, peux-tu poster ton classeur avec
uniquement les macros impliquées sur www.cjoint.com ? Supprime les
données et les feuilles inutiles.
Daniel

Re,

Pourquoi, lorsque je clique sur "Oui" à partir de ce nouvel essai :

'----
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Message As Byte
Message = MsgBox("Voulez-vous enregister les modifications ?", vbYesNo)

If Message = vbNo Then Cancel = True Else : ThisWorkbook.Save
End Sub
'----

... Excel me demande une 2nd fois si je veux sauvegarder ????
Il est sourd ???

Si je dis "Oui", "If Message = vbNo Then Cancel = True Else :
ThisWorkbook.Save" aboutit bien à "ThisWorkbook.Save" !?!? Non ???

jp



Re,

En désespoir de cause je vais ajouter :

Private Sub Fermer_Click()
Application.CommandBars(1).Enabled = True
End Sub

... et Fermer/Enregistrer le classeur depuis la barre de menus.
Ce n'est pas ce que je voulais, mais ça marche.

jp

Bonjour Daniel,

Exactement ce qui est dans mon dernier post (cf. ci dessous) :

A l'ouverture, les feuilles passent en mode plein écran (je conserve
uniquement les onglets).

Pour fermer le classeur, j'ai prévu un bouton de la boite outils de
contrôle (puisque l'utilisateur n'a plus recours à Fichier/Fermer ...

Private Sub Fermer_Click()
ThisWorkbook.Close 'savechanges:úlse
End Sub

Quand on clique sur le bouton, on passe bien par :

Workbook_BeforeClose
puis
Workbook_BeforeSave

... mais le code de Workbook_BeforeSave ne fait pas ce qu'il semble devoir
faire :

'---
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
End With
'---

Le problème, c'est que si j'affecte à ce bouton une procédure qui
simplement annule le plein écran (dans ce cas là, Fichier/Fermer est
accessible...) et que l'utilisateur clique sur Annuler avant d'enregitrer
le classeur, ce dernier va rester en affichage "normal" jusqu'à la
prochaine fermeture !

jp



Bonsoir.
J'ai regardé de loin test derniers posts. Dis-nous plutôt ce que tu veux
faire, c'est plus facile de nous expliquer ce qui bugue.
Cordialement.
Daniel

Bonsoir,

Je tourne en rond et c'est peu de le dire !!

Code :

'----
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !",
_
vbExclamation, " Veuillez utiliser fichier / fermer "
Cancel = True
Else
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " &
.Name
End With
End If
End Sub
'----

Question :

Pourquoi ce code fonctionne-t-il parfaitement (sauvegarde + copie datée)
dès lors qu'on ferme le classeur par "Fichier/Fermer", et qu'il ne
fonctionne pas quand on le ferme avec un Bouton de la boîte à outils de
contrôle ????????????

J'ai mis des "Stop" partout ; la procédure se déroule strictement de la
même façon dans les deux cas !!

Quand on ferme le classeur avec le bouton, le code passe bien par la
ligne :

'---
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
'---

et pourtant, la copie ne se fait pas !!

J'ai même fait une recherche sur tout le poste de travail au cas où la
sauvegarde se serait mise là où je ne l'attendais pas ... RIEN !!! Avec
ou sans actualisation ... avec des DoEvents et des Application.Enable =
True à droite, à gauche...

(Evidemment la procédure passe dans les deux cas par le
WorkBook.BeforeClose ...).

Je ne sais plus quoi faire ;-(

Help, please !!!

JP










Avatar
j-pascal
Bonsoir Xavier,

Désolé de ne pas avoir répondu plus tôt, mais je n'en finis pas de
patauger dans mon code ...

Ton idée est bonne, en tout cas, je l'ai adoptée !
Le problème, mais qui n'est pas très grave, c'est que si je renonce à
enregistrer les modifications dans le classeur ouvert, ma copie
renommée à la date du jour sera quant à elle enregistrée avec les
modifs. Comme cette copie n'a vocation qu'à être récupérée en cas de
crash du classeur unique sur lequel on travaille, exceptionnellement on
peut avoir une "petite surprise" !

Je ne voudrais pas être désagréable avec MS, mais je trouve qu'il y a
qqch de foireux dans ces procédures BeforeClose / BeforeSave ; je dis
ça parce qu'a priori, dès lors qu'on clique sur un bouton pour fermer
le classeur, la procédure est engagée et même l'annulation de ladite
fermeture ne rétablit pas la situation initiale ...

Encore merci pour ta bonne idée !

jp

effectivement il semblerait qu'il ne puisse plus faire de copie après la
macro beforeclose.

Pourquoi ne met tu pas directement la sauvegarde dans la macro du bouton
Private Sub CommandButton1_Click()
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
.Close
End With
End Sub

Xavier



j-pascal a écrit :
Bonsoir,

Je tourne en rond et c'est peu de le dire !!

Code :

'----
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !", _
vbExclamation, " Veuillez utiliser fichier / fermer "
Cancel = True
Else
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " &
.Name
End With
End If
End Sub
'----

Question :

Pourquoi ce code fonctionne-t-il parfaitement (sauvegarde + copie datée)
dès lors qu'on ferme le classeur par "Fichier/Fermer", et qu'il ne
fonctionne pas quand on le ferme avec un Bouton de la boîte à outils de
contrôle ????????????

J'ai mis des "Stop" partout ; la procédure se déroule strictement de la
même façon dans les deux cas !!

Quand on ferme le classeur avec le bouton, le code passe bien par la ligne
:

'---
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
'---

et pourtant, la copie ne se fait pas !!

J'ai même fait une recherche sur tout le poste de travail au cas où la
sauvegarde se serait mise là où je ne l'attendais pas ... RIEN !!! Avec ou
sans actualisation ... avec des DoEvents et des Application.Enable = True à
droite, à gauche...

(Evidemment la procédure passe dans les deux cas par le
WorkBook.BeforeClose ...).

Je ne sais plus quoi faire ;-(

Help, please !!!

JP






Avatar
j-pascal
Bonsoir Daniel,

Désolé de répondre si tard à ta proposition, mais j'ai fait un nombre
"incalculable" d'essais ...
Cette dernière version (de ce jour) semble fonctionner, mais je suis
sûr qu'il n'y a rien d'académique dans ce malheureux code de fermeture.

http://cjoint.com/?gowGnLxM24

@+ ?

jp

Bonjour.
Pour éviter les malentendus, peux-tu poster ton classeur avec uniquement les
macros impliquées sur www.cjoint.com ? Supprime les données et les feuilles
inutiles.
Daniel

Re,

Pourquoi, lorsque je clique sur "Oui" à partir de ce nouvel essai :

'----
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Message As Byte
Message = MsgBox("Voulez-vous enregister les modifications ?", vbYesNo)

If Message = vbNo Then Cancel = True Else : ThisWorkbook.Save
End Sub
'----

... Excel me demande une 2nd fois si je veux sauvegarder ????
Il est sourd ???

Si je dis "Oui", "If Message = vbNo Then Cancel = True Else :
ThisWorkbook.Save" aboutit bien à "ThisWorkbook.Save" !?!? Non ???

jp



Re,

En désespoir de cause je vais ajouter :

Private Sub Fermer_Click()
Application.CommandBars(1).Enabled = True
End Sub

... et Fermer/Enregistrer le classeur depuis la barre de menus.
Ce n'est pas ce que je voulais, mais ça marche.

jp

Bonjour Daniel,

Exactement ce qui est dans mon dernier post (cf. ci dessous) :

A l'ouverture, les feuilles passent en mode plein écran (je conserve
uniquement les onglets).

Pour fermer le classeur, j'ai prévu un bouton de la boite outils de
contrôle (puisque l'utilisateur n'a plus recours à Fichier/Fermer ...

Private Sub Fermer_Click()
ThisWorkbook.Close 'savechanges:úlse
End Sub

Quand on clique sur le bouton, on passe bien par :

Workbook_BeforeClose
puis
Workbook_BeforeSave

... mais le code de Workbook_BeforeSave ne fait pas ce qu'il semble
devoir faire :

'---
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
End With
'---

Le problème, c'est que si j'affecte à ce bouton une procédure qui
simplement annule le plein écran (dans ce cas là, Fichier/Fermer est
accessible...) et que l'utilisateur clique sur Annuler avant d'enregitrer
le classeur, ce dernier va rester en affichage "normal" jusqu'à la
prochaine fermeture !

jp



Bonsoir.
J'ai regardé de loin test derniers posts. Dis-nous plutôt ce que tu veux
faire, c'est plus facile de nous expliquer ce qui bugue.
Cordialement.
Daniel

Bonsoir,

Je tourne en rond et c'est peu de le dire !!

Code :

'----
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As
Boolean)

If SaveAsUI Then
MsgBox "Désolé, l'option Enregistrer sous... est impossible !",
_
vbExclamation, " Veuillez utiliser fichier / fermer "
Cancel = True
Else
With ThisWorkbook
ChDrive "C"
ChDir .Path
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " &
.Name
End With
End If
End Sub
'----

Question :

Pourquoi ce code fonctionne-t-il parfaitement (sauvegarde + copie
datée) dès lors qu'on ferme le classeur par "Fichier/Fermer", et qu'il
ne fonctionne pas quand on le ferme avec un Bouton de la boîte à outils
de contrôle ????????????

J'ai mis des "Stop" partout ; la procédure se déroule strictement de la
même façon dans les deux cas !!

Quand on ferme le classeur avec le bouton, le code passe bien par la
ligne :

'---
.SaveCopyAs Format(Now, "yyyymmdd-hh""h""nn") & " " & .Name
'---

et pourtant, la copie ne se fait pas !!

J'ai même fait une recherche sur tout le poste de travail au cas où la
sauvegarde se serait mise là où je ne l'attendais pas ... RIEN !!! Avec
ou sans actualisation ... avec des DoEvents et des Application.Enable =
True à droite, à gauche...

(Evidemment la procédure passe dans les deux cas par le
WorkBook.BeforeClose ...).

Je ne sais plus quoi faire ;-(

Help, please !!!

JP