Empecher Before Close

B

BS

Guest
Re et Re le forum,

Décidemment aujourd'hui, je rame ! :) Bon allez, le dernier problème du jour...

J'ai une procedure Before_Close dans laquelle il y a des petites choses et si une option est choisie , j'aimerai tout annuler y compris la fermeture du fichier !!!

Voilà le code pour plus de compréhension :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'On enleve le message d'alerte "enregistrer les modifs" Mais ATTENTION !!
'les dernières modifications ne vont donc pas être enregistrées.
Saved = True

'On recrée un message d'enregistrement des modifications
Enr_Quest = MsgBox("Voulez-vous sauvegarder les modifications ?", vbYesNoCancel + vbExclamation, "Enregistrement")
If Enr_Quest = vbYes Then
dlgAnswer = Application.Dialogs(xlDialogSaveAs).Show

'si clique annuler dans fenetre SaveAs
If dlgAnswer = False Then
Exit Sub
End If

'si clique sur Enregistrer dans fenetre Save As
If dlgAnswer = True Then
MsgBox ("le fichier est enregistré")
End If
End If

If Enr_Quest = vbNo Then
Exit Sub
End If

If Enr_Quest = vbCancel Then
Cancel = True
End If

End Sub


MErci d'avance de votre grande générosité :)) parce que j'ai de plus en plus de cheveux blancs ! :)

BS
 
B

BS

Guest
Re,

Bon et bien j'ai trouvé la solution !! :)) youpi tralala !

en fait , j'avais oublié un Cancel = true au niveau de

'si clique annuler dans fenetre SaveAs
If dlgAnswer = False Then
Exit Sub
End If


Donc merci quand même à tous le monde , quant à moi , je crois que j'ai besoin de repos !!!

Bonne soirée à tous !

BS
 
@

@+Thierry

Guest
Salut BS, le Forum

Si cette macro est le résultat de ce que tu veux obtenir dans le fil Lien supprimé tu aurais dû rester dedans... Car pour la compréhension des gens qui seraient susceptible de t'aider c'est mille fois mieux.

Mais bon je connais le sujet pour avoir déjà cherché hier pour toi !

Tu n'es pas loin de ta solution mais tu t'es imbringué dans tes if... Faut faire gaffe c'est un piège les cascade de if...

If MaChemise is Red = True Then
Exit Sub
End If
If MaChemise is Blue = True Then
MsgBox "Belle Chemise Bleue"
If MaChemise is Dirty Then
Call MachineAlaver
End If
End If

Avec un Truc Comme çà on ne sera propre qu'avec des Chemises Bleues !! lol

Bon plus sérieusement, voici ton code revu et corrigé !

Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Enr_Quest As Byte
Dim dlgAnswer As Boolean

'On enleve le message d'alerte "enregistrer les modifs" Mais ATTENTION !!
'les dernières modifications ne vont donc pas être enregistrées.
ThisWorkbook.Saved = True


'On recrée un message d'enregistrement des modifications
Enr_Quest = MsgBox("Voulez-vous sauvegarder les modifications ?", _
vbYesNoCancel + vbExclamation, "Enregistrement")

'REPONSE OUI
If Enr_Quest = vbYes Then
dlgAnswer = Application.Dialogs(xlDialogSaveAs).Show

'si clique annuler dans fenetre SaveAs
If dlgAnswer = False Then
'msgBox "Changements non-enregistrés"(si nécessaire)
Exit Sub

'si clique sur Enregistrer dans fenetre Save As
ElseIf dlgAnswer = True Then
MsgBox ("Le fichier est enregistré")
End If


'REPONSE NON
ElseIf Enr_Quest = vbNo Then
Exit Sub

'REPONSE ANNULATION
ElseIf Enr_Quest = vbCancel Then
Cancel = True
End If

End Sub

Bonne Soirée
@+Thierry
 
@

@+Thierry

Guest
Re BS


Ah tiens je n'avais pas vu ton post de 18:10, (je fesais des tests pour toi)

Oui bien sûr, on peut agir aussi comme ceci alors :

'si clique annuler dans fenetre SaveAs
If dlgAnswer = False Then
Alerte = MsgBox("le fichier n'est pas enregistré, tous les changements" _
& "seront perdus, voulez-vous continuer ?", vbYesNo, "Alerte")
If Alerte = 6 Then
Exit Sub
Else: Cancel = True
End If

Etc etc

çà m'avais surpris d'ailleurs j'avais mis en commentaire un ptit message "'msgBox "Changements non-enregistrés"(si nécessaire)"...


Bonne Soirée
@+Thierry
 
B

BS

Guest
Bonjour @+Thierry,

Ce fil a en effet un rapport avec mon autre fil mais pas au même niveau, en fait il est dans la continuité ...
En effet, ici mon problème n'était pas de déclencher la fenetre Enregistrer sous mais d'empecher l'execution de la fermeture malgré la procedure Before _Close.

Voilà donc pourquoi, je n'ai pas intégré cette question dans la suite. De plus, je me suis dit dans ma petite tête que si les gens ne pouvaient pas répondre à la première question, il saurait peut être le faire pour ce problème différent.

En tout cas , je prend note de la remarque et je penserai à l'avenir à faire un "tout" :))

Merci encore de t'être penché sur mon problème !

BS
 

Discussions similaires

Réponses
2
Affichages
412

Statistiques des forums

Discussions
314 663
Messages
2 111 656
Membres
111 250
dernier inscrit
alinber