Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ' On vérifie si le classeur est ouvert en lecture seule ou non 'If Not Me.ReadOnly Then ' On demande si l'utilisateur veut enregistrer les modifications Msgresult = MsgBox("Attention, vous êtes sur le point de quitter le fichier en mode écriture." & vbCrLf & _ " Souhaitez vous enregistrer les modifications apportées ?" & vbCrLf & vbCrLf & _ "Si vous sélectionnez NON, toutes les modifications seront perdues !" _ , vbYesNoCancel, "Sauvegarder les modifications ...") If Msgresult = vbYes Then ' On enregistre le classeur Me.Save ElseIf Msgresult = vbNo Then ' On ignore les modifications que le classeur a subi. Me.Saved = True Else Cancel = True Exit Sub End If ' On considére qu'il est enregistré pour ne pas afficher le message d'enregistrement ' et ainsi on ignore les modifications que le fichier a subi. Application.DisplayAlerts = False Application.Quit End Sub
Sub Quitter() Application.DisplayAlerts = False ThisWorkbook.Close End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPrivate Sub CommandButton1_Click() ThisWorkbook.Save Application.DisplayAlerts = False End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Me.Save Application.DisplayAlerts = False End sub
If Msgresult = vbYes Then ' On enregistre le classeur Me.Save ElseIf Msgresult = vbNo Then ' On ignore les modifications que le classeur a subi. ' Me.Saved = True --> Sans effet dans l'événement BeforeSave (puisque l'on a demandé l'enregistrement) Cancel = True Else Cancel = True Exit Sub End If
Est-il possible d'annuler la fermeture dans le BeforeSave ?
' A la fermeture du classeur Private Sub Workbook_BeforeClose(Cancel As Boolean) If Not Me.ReadOnly And Not Me.Saved Then Call Quitter ' Module6 End If End Sub
' ********************************************************************************************************** ' *************** Fermer le classeur Excel *************** ' ********************************************************************************************************** Sub Quitter() Dim Feuil As Worksheet Dim Msgresult As VbMsgBoxResult ' On vérifie si le classeur est ouvert en lecture seule ou non If Not ThisWorkbook.ReadOnly Then ' On demande si l'utilisateur veut enregistrer les modifications Msgresult = MsgBox("Attention, vous êtes sur le point de quitter le tableau de bord en mode écriture." & vbCrLf & _ " Souhaitez vous enregistrer les modifications apportées ?" & vbCrLf & vbCrLf & _ "Si vous selectionnez NON, toutes les modifications seront perdues !" _ , vbYesNoCancel, "Sauvegarder les modifications ...") If Msgresult = vbYes Then ' Affiche le bouton d'identification (Il réalise la même chose que l'ouverture du formulaire) Set Feuil = ThisWorkbook.Worksheets("Init") Feuil.Select ' On masque les onglets du classeur Windows(ThisWorkbook.Name).DisplayWorkbookTabs = False ' On enregistre le classeur ThisWorkbook.Save ElseIf Msgresult = vbNo Then ' On ignore les modifications que le classeur a subi. ThisWorkbook.Saved = True Else Exit Sub End If ' On modifie l'attribut du fichier en lecture seule SetAttr ThisWorkbook.FullName, vbReadOnly ' Evite l'affichage de la demande du mot de passe ou de la lecture seule à l'ouverture du fichier Else ' On considére qu'il est enregistré pour ne pas afficher le message d'enregistrement ' et ainsi on ignore les modifications que le fichier a subi. ThisWorkbook.Saved = True End If ' On ferme le classeur ThisWorkbook.Close ' On met fin à l'éxecution du code et on libère les ressources End End Sub