Pb sur évènement beforeclose

Airone784

XLDnaute Occasionnel
BOnjour,

Voici le code que j'utilise à la fermeture d'un fichier :
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim nom As String, dateprep As Variant
On Error Resume Next

Application.DisplayAlerts = False
Application.EnableEvents = False

If MsgBox("Voulez-vous sauvegarder les changements apportés au fichier ?", vbQuestion + vbYesNo, "Sauvegarde modifications") = vbYes Then
    
    dateprep = Sheets("PLAN").Range("BE1").Value
    If dateprep <> 0 Then
    
    nom = Format(dateprep, "yyyymmdd") & " Plan du " & Format(dateprep, "dddd dd mmmm yyyy") & ".xlsm"
    
    jour = Format(dateprep, "yyyymmdd")
        fichier = Dir("C:\Users\Plan\" & jour & "*")
        
        If ActiveWorkbook.Name = "Plan.xlsm" Then
        While Mid(fichier, 1, 8) = Mid(jour, 1, 8)
        Kill ("C:\Users\Plan\" & Mid(fichier, 1, 8) & "*")
        fichier = Dir("C:\Users\Plan\" & jour & "*")
        Wend
    
        Application.ActiveWorkbook.save
        
        ActiveWorkbook.SaveAs "C:\Users\Plan\" & nom
        End If
        
    Application.DisplayAlerts = True
    Application.EnableEvents = True
    
    Else
    MsgBox "Vous devez préciser la date pour sauvegarder votre plan !" & vbLf & _
    "Pour se faire, dans l'onglet options, cliquez sur le bouton." _
    , vbInformation, "Date non renseignée"
    Cancel = True
    End If

Else
Cancel = True
ThisWorkbook.Close
End If

End Sub

Concrètement, lorsque je clique sur oui à la question MsgBox("Voulez-vous sauvegarder les changements apportés au fichier ?, le fichier s'enregistre, je créé une sauvegarde qui dépend de la date renseignée en cellule BE1 (save as) puis se ferme. Vous remarquerez que si je créé une sauvegarde et qu'il en existe déjà une à la même date que celle en cellule BE1, je procède à la suppression de la sauvegarde d'abord (kill...) puis j'enregistre le fichier Plan et créé une sauvegarde dans un répertoire défini.

Si je clique sur non à la question MsgBox("Voulez-vous sauvegarder les changements apportés au fichier ? je souhaite que le fichier se ferme sans s'enregistrer et sans créer de sauvegarde sauf que quand je clique sur non dans ma msgbox, mon code beforeclose repart du début et du coup j'ai une seconde fois la question issue de ma msgbox qui s'affiche. Si je clique de nouveau sur non mon classeur se ferme sans sauvegarde. C'est bien sauf que je ne veux pas avoir à répondre 2 fois à cette question???

J'espère que mes explications sont claires et que allez pouvoir me donner un coup de pouce ce serait super.

Merci d'avance.
 

JBARBE

XLDnaute Barbatruc
Re : Pb sur évènement beforeclose

Bonjour à tous,

Peut-être comme ceci :

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim nom As String, dateprep As Variant, vReponse as String
On Error Resume Next

Application.DisplayAlerts = False
Application.EnableEvents = False

vReponse =  MsgBox("Voulez-vous sauvegarder les changements apportés au fichier ?", vbQuestion + vbYesNo, "Sauvegarde modifications") 

If vReponse = vbYes Then
   
    dateprep = Sheets("PLAN").Range("BE1").Value
    If dateprep <> 0 Then
   
    nom = Format(dateprep, "yyyymmdd") & " Plan du " & Format(dateprep, "dddd dd mmmm yyyy") & ".xlsm"
   
    jour = Format(dateprep, "yyyymmdd")
        fichier = Dir("C:\Users\Plan\" & jour & "*")
       
        If ActiveWorkbook.Name = "Plan.xlsm" Then
        While Mid(fichier, 1, 8) = Mid(jour, 1, 8)
        Kill ("C:\Users\Plan\" & Mid(fichier, 1, 8) & "*")
        fichier = Dir("C:\Users\Plan\" & jour & "*")
        Wend
   
        Application.ActiveWorkbook.save
       
        ActiveWorkbook.SaveAs "C:\Users\Plan\" & nom
        End If
       
    Application.DisplayAlerts = True
    Application.EnableEvents = True
   
    Else
    MsgBox "Vous devez préciser la date pour sauvegarder votre plan !" & vbLf & _
    "Pour se faire, dans l'onglet options, cliquez sur le bouton." _
    , vbInformation, "Date non renseignée"
    Cancel = True
    End If

ElseIf vReponse = vbNo Then
Cancel = True
ThisWorkbook.Close False
End If

End Sub

bonne journée
 
Dernière édition:

Airone784

XLDnaute Occasionnel
Re : Pb sur évènement beforeclose

Bonjour et merci pour cette première réponse.
Le code que tu proposes JBARBE fonctionne bien. En revanche, si je rouvre mon classeur sans avoir quitté complètement excel, comme application.enableevents n'est pas repassé à true, je n'ai pas le même comportement à la fermeture suivante de mon fichier à savoir l’événement beforeclose ne se déclenche pas...

Une idée???

Merci encore pour l'aide.

PS : j'ai bien tenté application.enabelevents=true dans le workbook_open mais forcément ça ne marche puisque les événements sont désactivés... Grrrrrr!!!
 
Dernière édition:

eriiic

XLDnaute Barbatruc
Re : Pb sur évènement beforeclose

Si tu penses que c'est dû à enabledEvents tu peux le remplacer par :
Code:
Dim noEvents As BooleanPrivate Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim nom As String, dateprep As Variant


    If noEvents Then Exit Sub
    
    On Error Resume Next
    Application.DisplayAlerts = True
    noEvents = True


    ' reste de ton code
    ' ...


    noEvents = False
End Sub
Mais à mon avis c'est autre chose.

eric
 

Airone784

XLDnaute Occasionnel
Re : Pb sur évènement beforeclose

Bonjour Eric,

Ton code fonctionne bien me semble t-il. J'en ai profité pour légèrement épuré. J'ai enlevé le application.displayAlerts qui ne sert plus et je n'ai pas repris le noevents=false à la fin du code puisque la variable est à false à l'ouverture suivante.

Mais à mon avis c'est autre chose.

Je crois bien que c'était bien ça qui posait problème. Tu vois qu'il ne fallait pas être pessimiste ;)

Merci pour l'aide en tout cas.

Air'one
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 848
dernier inscrit
Djigbenou