Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

23 réponses
Avatar
Emile63
Bonjour =E0 tous,

Dans un document mod=E8le (xltm), je souhaite remplacer le message standard=
d'Excel =E0 la fermeture d'un classeur (Voulez-vous enregistrer.. etc) par=
celui-ci, le probl=E8me c'est que bien que la proc=E9dure fonctionne comme=
je l'attend, une fois le classeur ferm=E9, Excel reste fig=E9 (plant=E9).
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 =3D "Ex=E9cution de macro...."
.EnableEvents =3D False
.ScreenUpdating =3D False
.DisplayAlerts =3D False
End With
If ActiveWorkbook.Saved =3D False Then
Reponse =3D MsgBox("D=E9sires-tu sauvegarder les modifications?", vb=
YesNoCancel + vbInformation, "Attention, =E0 l'historique des factures?")
If Reponse =3D vbNo Then
Sheets("Facture").[NO_Fact].Value =3D ""
[Control].Value =3D 2
ActiveWorkbook.Saved =3D True
With Application
.DisplayAlerts =3D True
.StatusBar =3D False
.EnableEvents =3D True
.ScreenUpdating =3D True
End With
ActiveWorkbook.Close SaveChanges:=3DFalse
ElseIf Reponse =3D vbYes Then
Sheets("Facture").[NO_Fact].Value =3D ""
[Control].Value =3D 2
Ins=E9rer ' Cette macro copie les donn=E9es de la facture dans =
un classeur de sauvegarde
ActiveWorkbook.Save
Else
Cancel =3D True
End If
End If
With Application
.DisplayAlerts =3D True
.StatusBar =3D False
.EnableEvents =3D True
.ScreenUpdating =3D True
End With
End Sub
'---------------------------------------------------

Merci d'avance pour votre aide,
cordialement,
Emile

10 réponses

1 2 3
Avatar
DanielCo
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 :-)
Avatar
Emile63
Avatar
DanielCo
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
Avatar
Emile63
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 :-(
Avatar
MichD
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 :-(
Avatar
Emile63
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..
Avatar
DanielCo
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...
Avatar
MichD
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.
Avatar
Emile63
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.
Avatar
Emile63
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
1 2 3