Queryclose sur worksheet

Bonjour a tous.

J'ai un fichier excel avec des boutons de macro, et je voudrais empêcher l'utilisateur de fermer la worksheet avec le queryclose et l'obliger a utiliser les boutons de macro.

Je trouve pas mal d'info pour désactiver le queryclose dans des formulaires, mais je ne trouve rien pour le faire sur une feuille Excel "standard"

Est ce que ca n'est juste pas possible?

Salut,

Tu entends quoi en disant :

je voudrais empêcher l'utilisateur de fermer la worksheet

J'avoue ne ps comprendre un iota...

Bonjour JPB,

Une solution pourrait être :

' 1 - Dans un module de code déclarer une variable publique qui sera initialisée à False et  uniquement à True via le bouton de fermeture contenu dans les formulaires ou dans le code associé au bouton
Public glWbCloseAutorise as Boolean   ' par défaut vaut False

'2 - Dans Thisworkbook 
'Par précaution mais pas obligatoire car False par défaut. Dans l'événement WorkBook_Open associé à ThisWorkbook ou si l'événement n'existe pas en 2003 (je ne sais plus) créer une "Sub Auto_open()"
Private Sub Workbook_Open()
    glWbCloseAutorise  = False
End Sub
'dans l'événement 
Private Sub Workbook_BeforeClose(Cancel As Boolean)
   ' Si la sortie n'est pas autorisée elle est annulée
    Cancel = (glWbCloseAutorise  = False)
End Sub

'3 - Dans le formualire ou le code associé au bouton
'Par précaution mais pas obligatoire. Dans l'événement Initialize ou Activate du formulaire, placer l'instruction suivante
    glWbCloseAutorise  = False

'Dans le l'événement Click() associé au bouton de fermeture, placer l'instruction suivante avant de gérer la fermeture du classeur
    glWbCloseAutorise  = True

Cdlt,

Cylfo

Dsl si je n'ai pas été clair

Je voudrais empêcher les utilisateur de fermer le fichier en utilisant la croix "query close" et les obliger a suivre les boutons de macro qui vont permettre de sauvegarder les données en meme temps que de fermer le fichier

Donc en résumé, désactiver le "queryclose sur un fichier excel

J'espère que c'est plus clair

Merci

Merci Cylfo,

Je ne m'attendais a quelque chose d'aussi complexe quand on voit comment c'est simple sur un formulaire.

Je vais essayer, si d'autres "membres devoués" ont une autre solution, je sui spreneur

Merci en tout cas

Bonjour,

Pour empêcher la fermeture du classeur par la croix :

Dans le code ThisWorkbook

Private Sub Workbook_BeforeClose(Cancel As Boolean)

MsgBox "Utilisez le bouton .. pour fermer le classeur.", vbCritical, "Fermeture."

Cancel = True

End Sub

Bonne journée

Re bonjour,

Voici une procédure complète qui permet de tester si le classeur a été modifié et de proposer l'enregistrement.

Si le classeur est le seul ouvert, Excel est fermé sinon le classeur est fermé et on repasse sur un des classeurs encore ouverts.

A placer au début du module ThisWorkbook
Option Explicit
Dim a$ ' Variable locale pour ce module
'

Puis alimenter la procédure :
Private Sub Workbook_BeforeClose(Cancel As Boolean)

If a$ = "Quitter" Then Exit Sub ' Empêche relance

' Fermeture du classeur par la croix
If ThisWorkbook.Saved = False Then ' Modif ? (=False si modif / =True aucune modif)
    Select Case MsgBox("Enregistrer avant de Quitter ?", vbYesNoCancel, "Fermeture du classeur.")
        Case 6
        ' Oui : Enregistre
        ThisWorkbook.Save
        If Application.Workbooks.Count = 1 Then ' Ferme Excel si 1 seul classeur ouvert
                Application.Quit
            Else
                ThisWorkbook.Close ' Ferme et laisse Excel ouvert
        End If

        Case 7
        ' Non : Sort sans enregistrer
        If Application.Workbooks.Count = 1 Then  ' Seul classeur ouvert
               Application.DisplayAlerts = False ' Pas de confirmation
               Application.Quit                  ' Quitte (ferme le classeur)
            Else
               ' Autre(s) classeur(s) ouvert(s)
               ' ** Problème si utilisation de Enableevents=false
               a$ = "Quitter" ' Empêche la relance
               Cancel = True
               ThisWorkbook.Close savechanges:=False ' Ferme sans sauvegarde
            End If

        Case 2
        ' Abandon (ou fermeture par la croix du message)
        Cancel = True
        Exit Sub    ' Retour au classeur
    End Select
End If

End Sub

A tester et à modifier selon votre configuration.

Re bonne journée

Rechercher des sujets similaires à "queryclose worksheet"