Excel se bloque après l'exécution d'une macro événementielle "BeforeClose"

Le
Emile63
Bonjour à tous,

Dans un document modèle (xltm), je souhaite remplacer le message standard=
d'Excel à la fermeture d'un classeur (Voulez-vous enregistrer.. etc) par=
celui-ci, le problème c'est que bien que la procédure fonctionne comme=
je l'attend, une fois le classeur fermé, Excel reste figé (planté).
Quelqu'un pourrait me venir en aide :-)

'-
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Reponse As String
'On Error Resume next
With Application
.StatusBar = "Exécution de macro."
.EnableEvents = False
.ScreenUpdating = False
.DisplayAlerts = False
End With
If ActiveWorkbook.Saved = False Then
Reponse = MsgBox("Désires-tu sauvegarder les modifications?", vb=
YesNoCancel + vbInformation, "Attention, à l'historique des factures?")
If Reponse = vbNo Then
Sheets("Facture").[NO_Fact].Value = ""
[Control].Value = 2
ActiveWorkbook.Saved = True
With Application
.DisplayAlerts = True
.StatusBar = False
.EnableEvents = True
.ScreenUpdating = True
End With
ActiveWorkbook.Close SaveChanges:=False
ElseIf Reponse = vbYes Then
Sheets("Facture").[NO_Fact].Value = ""
[Control].Value = 2
Insérer ' Cette macro copie les données de la facture dans =
un classeur de sauvegarde
ActiveWorkbook.Save
Else
Cancel = True
End If
End If
With Application
.DisplayAlerts = True
.StatusBar = False
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
'

Merci d'avance pour votre aide,
cordialement,
Emile
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
DanielCo
Le #26378303
Bonjour,
Testé sans exécution de la macro Insérer. Je ne reproduis pas ton problème.
Quelles sont tes versions de Windows et d'Excel ?
Cordialement.
Daniel
Emile63 a exposé le 16/11/2015 :
Bonjour à tous,

Dans un document modèle (xltm), je souhaite remplacer le message standard
d'Excel à la fermeture d'un classeur (Voulez-vous enregistrer.. etc) par
celui-ci, le problème c'est que bien que la procédure fonctionne comme je
l'attend, une fois le classeur fermé, Excel reste figé (planté). Quelqu'un
pourrait me venir en aide :-)
Emile63
DanielCo
Le #26378319
Est-ce que tu peux mettre ton classeur, sans données confidentielles, sur
http://cjoint.com et poster le lien généré ?
Daniel
Emile63 a exprimé avec précision :
Excel 2007
Emile63
Le #26378318
J'ajouterai que le blocage n'arrive pas en cliquant sur annuler.
Et arrive si répond: Non (VbNo)
Bien que dans le pas-à-pas il aille jusqu'à la fin de la procédure sa ns accrocs,
ActiveWorkbook.Close SaveChanges:úlse

Pas d'erreurs (on error resume next étant désactivé) !
C'est après que mon Excel se fige. Je n'ai plus accès au menu et bouton s. Si j'avais une autre feuille ouverte derrière, elle n'est plus accessi ble.
Alt+ Ctlr + Del :-(
MichD
Le #26378328
Bonjour

Essaie comme ceci. Dans la procédure, tu utilises l'expression "ActiveWorkbook"
est-ce possible que tu aies plus d'un classeur ouvert?
Si la macro désigne le classeur dans lequel la macro est écrite, pourquoi n'utilise
pas l'expression "ThisWorkbook" à la place de "ActiveWorkbook" ?

Que représente " [Control]" ? Une plage nommée?


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Reponse As String

With Application
.StatusBar = "Exécution de macro...."
.EnableEvents = False
.ScreenUpdating = False
.DisplayAlerts = False
End With
If ActiveWorkbook.Saved = False Then
Reponse = MsgBox("Désires-tu sauvegarder les modifications?", vbYesNoCancel + vbInformation,
"Attention, à l'historique des factures?")
If Reponse = vbNo Then
Sheets("Facture").[NO_Fact].Value = ""
[Control].Value = 2
With Application
.DisplayAlerts = True
.StatusBar = False
.EnableEvents = True
.ScreenUpdating = True
End With
ActiveWorkbook.Saved = True 'Modifier
ActiveWorkbook.Close 'Modifier
ElseIf Reponse = vbYes Then
Sheets("Facture").[NO_Fact].Value = ""
[Control].Value = 2
Insérer ' Cette macro copie les données de la facture dans un classeur de sauvegarde
ActiveWorkbook.Save
Else
Cancel = True
End If
End If
With Application
.DisplayAlerts = True
.StatusBar = False
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub



"Emile63" a écrit dans le message de groupe de discussion :


J'ajouterai que le blocage n'arrive pas en cliquant sur annuler.
Et arrive si répond: Non (VbNo)
Bien que dans le pas-à-pas il aille jusqu'à la fin de la procédure sans accrocs,
ActiveWorkbook.Close SaveChanges:úlse

Pas d'erreurs (on error resume next étant désactivé) !
C'est après que mon Excel se fige. Je n'ai plus accès au menu et boutons. Si j'avais une autre
feuille ouverte derrière, elle n'est plus accessible.
Alt+ Ctlr + Del :-(
Emile63
Le #26378336
C'est plutôt un document confidentiel, si je l'expurge de son contenu, il ne restera plus grand chose...

Avec un traitement d'erreur;
'----------------------------
'ErrorHandler:
' vtMessage = "Erreur détectée"
' vtMessage = vtMessage & _
' Chr(10) & _
' Chr(10) & "Erreur Numéro: " & Err & _
' Chr(10) & "Description: " & Error()
' MsgBox vtMessage, vbInformation, ctByg
'-----------------------------
il m'annonce tout de même le message suivant:
-Erreur N° 40040
Si ça peut éclairer quelqu'un..
DanielCo
Le #26378338
Oui, mais on n'a pas besoin du contenu.
Daniel
Emile63 vient de nous annoncer :
C'est plutôt un document confidentiel, si je l'expurge de son contenu, il ne
restera plus grand chose...
MichD
Le #26378348
Que représente " [Control]" ? Une plage nommée?

Ne te sens pas obliger de répondre aux questions que l'on te pose...

Si j'étais à ta place, je donnerais un autre nom à ce que tu appelles "Control"
afin d'éviter que VBA interprète mal cette expression.
Emile63
Le #26378364
Bonjour MichD
Désolé j'étais en RV.
Me revoici .

Oui, [Control] est une plage nommée.
Je vais la renommer [MonContrôle], si vous pensez qu'elle peut perturber.
Emile63
Le #26378363
Re-Bonjour MichD,

Oui, il est possible que plus d'un classeur soit ouvert.
Ne doit se fermer que celui ou se trouve cette procédure.
Merci pour ton support.

Emile
Publicité
Poster une réponse
Anonyme