pb demande confirmation de fermeture de fichier Excel

homerlehamster

XLDnaute Nouveau
Bonjour,
J’ai un petit problème. Je dois faire une macro de fermeture de fichier Excel, selon les instructions suivantes :

Fermeture du fichier Section :
Demande Confirmation de fermeture
Non : Arrête la fermeture.
Oui :
o Garder comme dans la version en cours la question de l’Export,
Oui :
Lance la fonction Export.
Export OK
Demander si veux enregistrer les MàJ de Section et Eff.
Oui
Enregistre et ferme Effectifs (si ouvert)
Enregistre et ferme Section
Non
Ferme effectifs sans enregistrer (Si ouvert)
Ferme Section Sans enregistrer
Ferme Proba (Si ouvert)
Export OK
Arrête la fermeture.
Non :
Demander si veux enregistrer les MàJ de Section et Eff.
Oui
Enregistre et ferme Effectifs (si ouvert)
Enregistre et ferme Section
Non
Ferme effectifs sans enregistrer (Si ouvert)
Ferme Section Sans enregistrer
Ferme Proba (Si ouvert)


J’ai pu tout faire, le seul obstacle qu’il me reste à surmonter est celui de la première instruction : « demande de confirmation de fermeture : « non » ----> arrête la fermeture ». Je m’explique : j’ai fait une procédure « Workbook_BeforeClose » :


Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)


    
    If VarSecFile = "" Then
    VarSecFile = ActiveWorkbook.Name 'on récupère le nom de SecASGXX.xls sous forme de chaîne
    VarEffFile = Replace(VarSecFile, "Sec", "Eff") 'on remplace "Sec" par "Eff" dans la chaîne "SecASGXX.xls" pr obtenir le nom du fichier Effectif associé à ce fichier Section
    End If

    Application.DisplayAlerts = False

    varMsg = "Do you really want to close " & VarSecFile & "?"
            rpns = MsgBox(varMsg, vbQuestion + vbYesNo, cntTitre)
            If rpns = vbYes Then
                varMsg = "Do you want to EXPORT your data?"
                rpns = MsgBox(varMsg, vbQuestion + vbYesNo, cntTitre)
                If rpns = vbYes Then

                'Call exporter
                'flgCmdExport = False
                    If VarFlagExport = True Then
                        varMsg = "Do you want to save the modification of " & VarSecFile & " & " & VarEffFile & " files?"
                        rpns = MsgBox(varMsg, vbQuestion + vbYesNo, cntTitre)
                        If rpns = vbYes Then
                            If VerifOuvertureClasseur(VarEffFile) = True Then
                            Workbooks(VarEffFile).Close SaveChanges:=True
                            End If
                            Workbooks(VarSecFile).Close SaveChanges:=True
                        End If
                        If rpns = vbNo Then
                            If VerifOuvertureClasseur(VarEffFile) = True Then
                            Workbooks(VarEffFile).Close SaveChanges:=False
                            End If
                            Workbooks(VarSecFile).Close SaveChanges:=False
                            If VerifOuvertureClasseur(ConstProbFile) = True Then
                            Workbooks(ConstProbFile).Close SaveChanges:=False
                            End If
                        End If
                    End If

                Else
                        varMsg = "Do you want to save the modification of " & VarSecFile & " & " & VarEffFile & " files?"
                        rpns = MsgBox(varMsg, vbQuestion + vbYesNo, cntTitre)
                        If rpns = vbYes Then
                            If VerifOuvertureClasseur(VarEffFile) = True Then
                            Workbooks(VarEffFile).Close SaveChanges:=True
                            End If
                            Workbooks(VarSecFile).Close SaveChanges:=True
                        End If
                        If rpns = vbNo Then
                            If VerifOuvertureClasseur(VarEffFile) = True Then
                            Workbooks(VarEffFile).Close SaveChanges:=False
                            End If
                            Workbooks(VarSecFile).Close SaveChanges:=False
                            If VerifOuvertureClasseur(ConstProbFile) = True Then
                            Workbooks(ConstProbFile).Close SaveChanges:=False
                            End If
                        End If
                End If
            Else
              
              Cancel = True
              
            End If

    'Application.DisplayAlerts = True

 End Sub

Le problème vient du fait qu’en cliquant sur « la croix de fermeture » du fichier Sec, Excel me pose une premiere fois la question "Do you really want to close " & VarSecFile & "?", je clique sur « oui », puis quand j’arrive à la question « "Do you want to save the modification of " & VarSecFile & " & " & VarEffFile & « ? » , Excel étant appelé une seconde fois à fermer le fichier Sec (à cause de l’instruction « Workbooks(VarSecFile).Close SaveChanges:=True/false) , il recommence la procédure « workbook_beforeclose » du fichier Sec, et donc me repose logiquement la question "Do you really want to close " & VarSecFile & "?".

Je ne sais pas trop quoi faire pour éviter qu’Excel me pose à nouveau cette question "Do you really want to close " & VarSecFile & "?", au début j’utilisais une procédure de type « auto_close », le problème c’est que le « Cancel = true » ne fonctionne pas dans les procédures de type « auto_close », en cas d’annulation de fermeture du fichier.

Je ne sais pas si j’ai été très clair, mais merci d’avance à ceux qui me donneront un coup de main. :D
 

homerlehamster

XLDnaute Nouveau
Re : pb demande confirmation de fermeture de fichier Excel

Bon bé pour ceux qui rencontreront le même problème, je me réponds à moi-même : l'astuce consiste en l'utilisation d'une variable publique "flag" de type booléen, initialisée à "false" à l'ouverture du fichier :

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

    'init
    If VarSecFile = "" Then
    VarSecFile = ActiveWorkbook.Name 'on récupère le nom de SecASGXX.xls sous forme de chaîne
    VarEffFile = Replace(VarSecFile, "Sec", "Eff") 'on remplace "Sec" par "Eff" dans la chaîne "SecASGXX.xls" pr obtenir le nom du fichier Effectif associé à ce fichier Section
    End If

    Application.DisplayAlerts = False
    If VarQuestionConfirmFermeture = False Then
    varMsg = "Do you really want to close " & VarSecFile & "?"
            rpns = MsgBox(varMsg, vbQuestion + vbYesNo, cntTitre)
            If rpns = vbYes Then
                VarQuestionConfirmFermeture = True
                varMsg = "Do you want to EXPORT your data?"
                rpns = MsgBox(varMsg, vbQuestion + vbYesNo, cntTitre)
                If rpns = vbYes Then

                'Call exporter
                
                    If VarFlagExportOkFait = True Then
                        varMsg = "Do you want to save the modification of " & VarSecFile & " & " & VarEffFile & " files?"
                        rpns = MsgBox(varMsg, vbQuestion + vbYesNo, cntTitre)
                        If rpns = vbYes Then
                            If classeurExiste(VarEffFile) = True Then
                            Workbooks(VarEffFile).Close SaveChanges:=True
                            End If
                            If classeurExiste(ConstProbFile) = True Then
                            Workbooks(ConstProbFile).Close SaveChanges:=False
                            End If
                            Workbooks(VarSecFile).Close SaveChanges:=True
                            
                        End If
                        If rpns = vbNo Then
                            If classeurExiste(VarEffFile) = True Then
                            Workbooks(VarEffFile).Close SaveChanges:=False
                            End If
                            If classeurExiste(ConstProbFile) = True Then
                            Workbooks(ConstProbFile).Close SaveChanges:=False
                            End If
                            Workbooks(VarSecFile).Close SaveChanges:=False
                            
                        End If
                    Else
                    Cancel = True
                    End If

                Else
                        varMsg = "Do you want to save the modification of " & VarSecFile & " & " & VarEffFile & " files?"
                        rpns = MsgBox(varMsg, vbQuestion + vbYesNo, cntTitre)
                        If rpns = vbYes Then
                            If classeurExiste(VarEffFile) = True Then
                            Workbooks(VarEffFile).Close SaveChanges:=True
                            End If
                            If classeurExiste(ConstProbFile) = True Then
                            Workbooks(ConstProbFile).Close SaveChanges:=False
                            End If
                            Workbooks(VarSecFile).Close SaveChanges:=True
                            
                        End If
                        If rpns = vbNo Then
                            If classeurExiste(VarEffFile) = True Then
                            Workbooks(VarEffFile).Close SaveChanges:=False
                            End If
                            If classeurExiste(ConstProbFile) = True Then
                            Workbooks(ConstProbFile).Close SaveChanges:=False
                            End If
                            Workbooks(VarSecFile).Close SaveChanges:=False
                            
                        End If
                End If
            Else
              'End
              Cancel = True
              'Exit Sub
            End If

    'Application.DisplayAlerts = True
    Else
    
    End If
 End Sub

le "workbook_beforeclose" est à placer dans "This workbook" (sinon le "cancel = true" il va pas marcher)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
314 663
Messages
2 111 670
Membres
111 255
dernier inscrit
pascal.gib