fermeture fichier par macro, empecher fermeture par la croix

cathodique

XLDnaute Barbatruc
Bonjour,

J'ai bien trouvé des exemples sur le forum, mais mes tentatives pour adapter ces différents codes ont échoué.
Je voudrai éviter la fermeture du fichier par la petite croix en haut à droite pour fermer excel.
Donc quand je clique sur la croix, un msgbox m'invite à cliquer sur un shapes qui déclenche une macro qui enregistre et quitte excel . Et, c'est ce message qui me gène, il réapparait une seconde fois. je n'ai pas compris pourquoi. je vous remercie beaucoup.

Code dans thisworkbook:
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not flag Then Cancel = True
Sheets(1).Activate              'retour sur la feuille "tableau de bord'
MsgBox "Cliquez sur Sortie!", vbCritical
Exit Sub
End Sub
Code macro module standard:
Code:
Public flag As Boolean
Sub Sortie()
flag = True
Application.DisplayAlerts = False
With ThisWorkbook
  .Save
  If Workbooks.Count = 1 Then Application.Quit Else .Close
End With
End Sub
Je voudrai donc qu'en cliquant sur la croix, afficher message et retour sur la feuille "tableau de bord" où se trouve le shapes qui declenchera la macro de fermeture.
Je vous remercie beaucoup.

Cordialement,
 

Pièces jointes

  • Fermeture classeur.xls
    40 KB · Affichages: 100
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : fermeture fichier par macro, empecher fermeture par la croix

Bonsoir cathodique,

peut-être avec ce code:
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not flag Then
  Cancel = True
  Sheets(1).Activate              'retour sur la feuille "tableau de bord'
  MsgBox "Cliquez sur Sortie!", vbCritical
End If
End Sub
 

Pièces jointes

  • Fermeture classeur v1.xls
    39 KB · Affichages: 90
Dernière édition:

cathodique

XLDnaute Barbatruc
Re : fermeture fichier par macro, empecher fermeture par la croix

Bonsoir mapomme,

Je te remercie beaucoup pour ton aide, ça fonctionne très bien. Et, je n'ai toujours pas compris pourquoi. En fait, tu as juste fait passer "Cancel=True" sur une nouvelle ligne.
Code:
'mon code
If Not flag Then Cancel = True      
'ton code
If Not flag Then 
Cancel = True
Pourrais-tu m'expliquer pourquoi, le fait de faire passer "cancel=true" à la ligne suivante ça fonctionne bien?

Je te remercie beaucoup.

Cordialement,
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : fermeture fichier par macro, empecher fermeture par la croix

(re)Bonsoir cathodique,
[...]En fait, tu as juste fait passer "Cancel=True" sur une nouvelle ligne.[...]

Si tu examines bien mon code, le IF engloble:
  • le passage de Cancel à true
  • l'activation de la feuille Sheets(1)
  • et l'affichage du message.

et non pas seulement l'instruction "Cancel=True"

Donc tant qu'on n'a pas cliqué sur la forme "Sortie" (i.e. Flag à False), on exécute les trois instructions ci-dessus: on ne ferme pas le fichier (cancel = True), on sélectionne Sheets(1) et on affiche le message.

Si on a cliqué sur la forme "Sortie", Workbook_BeforeClose ne fait rien car Flag est à True et donc on autorise la fermeture du fichier sans afficher le message.

Ton code n'incluait que le "Cancel=True" dans le If. On affichait donc toujours le message quelque soit la méthode de fermeture du fichier (par la croix ou en cliquant sur la forme)
 
Dernière édition:

cathodique

XLDnaute Barbatruc
[Résolu] fermeture fichier par macro, empecher fermeture par la croix

Bonjour,

Je te remercie beaucoup pour tes explications très claires. Je savais que j'avais fait une erreur, mais vu mon niveau en VBA je ne suis pas parvenu à le déceler. Merci encore.
Cordialement,
 

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T