If Rs = vbYes Then w.Close savechanges:=True 'Réponse OUI... Enregistre et ferme If Rs = vbNo Then w.Close savechanges:=False 'Réponse NON... Ferme sans enregistrer
Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.EnableEvents = False 'on desavtive les évenements For Each w In Workbooks If w.Name <> ThisWorkbook.Name Then Dim Ms, Ss, Ts, Rs 'définition Ms = "Voulez_vous enregistrer " & w.Name & " ?" 'définit le message. Ss = vbYesNo + vbExclamation + vbDefaultButton1 'définit les boutons. Ts = "Enegistrer avant de quitter" 'définit le titre. Rs = MsgBox(Ms, Ss, Ts) 'demande une réponse If Rs = vbYes Then w.Close savechanges:=True 'Réponse OUI... Enregistre et ferme If Rs = vbNo Then w.Close savechanges:=False 'Réponse NON... Ferme sans enregistrer End If DoEvents Next w Workbooks("Prog.xls").Save 'Sauvegarde seulement le fichier Application.EnableEvents = true 'il est toujours préférable de réactiver les évenements même si on ferme l'application Application.Quit 'Ferme Excel DoEvents End sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Static bIsClosing As Boolean If Not bIsClosing Then bIsClosing = True For Each w In Workbooks If w.Name <> ThisWorkbook.Name Then Dim Ms, Ss, Ts, Rs 'définition Ms = "Voulez_vous enregistrer " & w.Name & " ?" 'définit le message. Ss = vbYesNo + vbExclamation + vbDefaultButton1 'définit les boutons. Ts = "Enegistrer avant de quitter" 'définit le titre. Rs = MsgBox(Ms, Ss, Ts) 'demande une réponse If Rs = vbYes Then w.Close SaveChanges:=True 'Réponse OUI... Enregistre et ferme If Rs = vbNo Then w.Close SaveChanges:=False 'Réponse NON... Ferme sans enregistrer End If DoEvents Next w Workbooks("Prog.xls").Save 'Sauvegarde seulement le fichier Application.Quit 'Ferme Excel DoEvents bIsClosing = False End If End Sub
If w.Name <> "Prog.xls" Then
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim w As Workbook For Each w In Workbooks If w.Name <> ThisWorkbook.Name Then Dim Ms, Ss, Ts, Rs 'définition Ms = "Voulez_vous enregistrer " & w.Name & " ?" 'définit le message. Ss = vbYesNo + vbExclamation + vbDefaultButton1 'définit les boutons. Ts = "Enegistrer avant de quitter" 'définit le titre. Rs = MsgBox(Ms, Ss, Ts) 'demande une réponse If Rs = vbYes Then w.Save 'Réponse OUI... Enregistre et ferme w.Saved = True End If Next w ThisWorkbook.Save ThisWorkbook.Saved = True End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPrivate Sub Workbook_BeforeClose(Cancel As Boolean) Dim w As Workbook For Each w In Workbooks If w.Name <> ThisWorkbook.Name Then Dim Ms, Ss, Ts, Rs 'définition Ms = "Voulez_vous enregistrer " & w.Name & " ?" 'définit le message. Ss = vbYesNo + vbExclamation + vbDefaultButton1 'définit les boutons. Ts = "Enegistrer avant de quitter" 'définit le titre. Rs = MsgBox(Ms, Ss, Ts) 'demande une réponse If Rs = vbYes Then w.Save 'Réponse OUI... Enregistre et ferme w.Saved = True End If Next w ThisWorkbook.Save ThisWorkbook.Saved = True Application.Quit End Sub
Workbook_BeforeClose est un evenement de fermeture de classeur et qui sera déclenché à chaque fermeture de classeur.
Ta boucle "For Each w In Workbooks" va donc declencher cet evenement pour chaque fichier ouvert et que tu fermes avec les lignes