Excel se bloque après l'exécution d'une macro événementielle "BeforeClose"
23 réponses
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
J'ai testé la proposition que je t'ai faite et elle fonctionne très bien sans se planter ou planter Excel. As-tu testé la procédure sans exécuter la procédure "Insérer" ? Ceci pourrait te donner une idée à savoir laquelle des procédures génère une erreur
J'ai testé la proposition que je t'ai faite et elle fonctionne très bien
sans se planter ou planter Excel.
As-tu testé la procédure sans exécuter la procédure "Insérer" ?
Ceci pourrait te donner une idée à savoir laquelle des procédures
génère une erreur
J'ai testé la proposition que je t'ai faite et elle fonctionne très bien sans se planter ou planter Excel. As-tu testé la procédure sans exécuter la procédure "Insérer" ? Ceci pourrait te donner une idée à savoir laquelle des procédures génère une erreur
J'essaie de cerner le problème, car la proc. fonctionne et c'est Excel qu i plante. Oui j'ai testé sans l'appel à l'autre procédure, et ça ne change ri en. En fait j'ai constaté que si je répond OUI ou ANNULER au message tout v a bien, Excel ne bronche pas. C'est quand je lui dit NON, qu'il tousse... Cet événement se situant avant l'appel à la procédure Insérer, je pense que cette proc. n'a pas de rapport. J'ai suivi tes conseils et changé [Control] par[Mon_Control] ainsi que Ac tiveWorkbook par ThisWorkbook mais sans résultat malheureusement.
J'ai l'impression que lors du VbNo c'est à ce niveau que ça pêche: .DisplayAlerts = True .StatusBar = False .EnableEvents = True .ScreenUpdating = True
Parceque en désactivant tous ces blocs (les 3), j'ai l'impression que c'e st plus stable. Par contre ça bouge... Voilà ou j'en suis!
Re-Bonjour Mich1D,
J'essaie de cerner le problème, car la proc. fonctionne et c'est Excel qu i plante.
Oui j'ai testé sans l'appel à l'autre procédure, et ça ne change ri en.
En fait j'ai constaté que si je répond OUI ou ANNULER au message tout v a bien, Excel ne bronche pas.
C'est quand je lui dit NON, qu'il tousse...
Cet événement se situant avant l'appel à la procédure Insérer, je pense que cette proc. n'a pas de rapport.
J'ai suivi tes conseils et changé [Control] par[Mon_Control] ainsi que Ac tiveWorkbook par ThisWorkbook mais sans résultat malheureusement.
J'ai l'impression que lors du VbNo c'est à ce niveau que ça pêche:
.DisplayAlerts = True
.StatusBar = False
.EnableEvents = True
.ScreenUpdating = True
Parceque en désactivant tous ces blocs (les 3), j'ai l'impression que c'e st plus stable. Par contre ça bouge...
Voilà ou j'en suis!
J'essaie de cerner le problème, car la proc. fonctionne et c'est Excel qu i plante. Oui j'ai testé sans l'appel à l'autre procédure, et ça ne change ri en. En fait j'ai constaté que si je répond OUI ou ANNULER au message tout v a bien, Excel ne bronche pas. C'est quand je lui dit NON, qu'il tousse... Cet événement se situant avant l'appel à la procédure Insérer, je pense que cette proc. n'a pas de rapport. J'ai suivi tes conseils et changé [Control] par[Mon_Control] ainsi que Ac tiveWorkbook par ThisWorkbook mais sans résultat malheureusement.
J'ai l'impression que lors du VbNo c'est à ce niveau que ça pêche: .DisplayAlerts = True .StatusBar = False .EnableEvents = True .ScreenUpdating = True
Parceque en désactivant tous ces blocs (les 3), j'ai l'impression que c'e st plus stable. Par contre ça bouge... Voilà ou j'en suis!
Emile63
Heu.. Non je retire ce que j'ai dit: Ca ne va pas mieux avec les événem ents désactivés.. C'était une fausse joie! :-(
Est-ce qu'il ne manquerait pas quelque chose pour redonner la main a Excel ? Je pense a un: DoEvents quelque part ... Je sais pas.
Heu.. Non je retire ce que j'ai dit: Ca ne va pas mieux avec les événem ents désactivés..
C'était une fausse joie! :-(
Est-ce qu'il ne manquerait pas quelque chose pour redonner la main a Excel ?
Je pense a un: DoEvents
quelque part ... Je sais pas.
Heu.. Non je retire ce que j'ai dit: Ca ne va pas mieux avec les événem ents désactivés.. C'était une fausse joie! :-(
Est-ce qu'il ne manquerait pas quelque chose pour redonner la main a Excel ? Je pense a un: DoEvents quelque part ... Je sais pas.
Emile63
Re Bonjour MichD,
Dans ton cas, quand ton classeur se ferme via la procédure et si tu n'as pas d'autres classeurs ouverts derrière, si tu fermes alors Excel par la [X], Excel se ferme normalement ?
Merci de me redire, :-) Bonne soirée
Re Bonjour MichD,
Dans ton cas, quand ton classeur se ferme via la procédure et si tu n'as pas d'autres classeurs ouverts derrière, si tu fermes alors Excel par la [X], Excel se ferme normalement ?
Dans ton cas, quand ton classeur se ferme via la procédure et si tu n'as pas d'autres classeurs ouverts derrière, si tu fermes alors Excel par la [X], Excel se ferme normalement ?
Merci de me redire, :-) Bonne soirée
DanielCo
Recopie toutes les feuilles de ton classeur dans classeur vierge, ainsi que les macros et les userforms, au besoin. Enregistre-le et teste. Il est possible que ton classeur soit corrompu. Daniel Emile63 a émis l'idée suivante :
Re Bonjour MichD,
Dans ton cas, quand ton classeur se ferme via la procédure et si tu n'as pas d'autres classeurs ouverts derrière, si tu fermes alors Excel par la [X], Excel se ferme normalement ?
Merci de me redire, :-) Bonne soirée
Recopie toutes les feuilles de ton classeur dans classeur vierge, ainsi que les
macros et les userforms, au besoin. Enregistre-le et teste. Il est possible que
ton classeur soit corrompu.
Daniel
Emile63 a émis l'idée suivante :
Re Bonjour MichD,
Dans ton cas, quand ton classeur se ferme via la procédure et si tu n'as pas
d'autres classeurs ouverts derrière, si tu fermes alors Excel par la [X],
Excel se ferme normalement ?
Recopie toutes les feuilles de ton classeur dans classeur vierge, ainsi que les macros et les userforms, au besoin. Enregistre-le et teste. Il est possible que ton classeur soit corrompu. Daniel Emile63 a émis l'idée suivante :
Re Bonjour MichD,
Dans ton cas, quand ton classeur se ferme via la procédure et si tu n'as pas d'autres classeurs ouverts derrière, si tu fermes alors Excel par la [X], Excel se ferme normalement ?
Merci de me redire, :-) Bonne soirée
Patrick
Le 16/11/2015 18:47, DanielCo a écrit :
Recopie toutes les feuilles de ton classeur dans classeur vierge, ainsi que les macros et les userforms, au besoin. Enregistre-le et teste. Il
est possible que ton classeur soit corrompu.
mais que fait la police ??? :)
--- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. https://www.avast.com/antivirus
Le 16/11/2015 18:47, DanielCo a écrit :
Recopie toutes les feuilles de ton classeur dans classeur vierge, ainsi
que les macros et les userforms, au besoin. Enregistre-le et teste. Il
est possible que ton classeur soit corrompu.
mais que fait la police ??? :)
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Recopie toutes les feuilles de ton classeur dans classeur vierge, ainsi que les macros et les userforms, au besoin. Enregistre-le et teste. Il
est possible que ton classeur soit corrompu.
mais que fait la police ??? :)
--- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. https://www.avast.com/antivirus
Jacquouille
Salut Patrick La police est fort occupée ces jours-ci et n'a pas le temps pour quelques virus. Mais, elle prend le temps de te saluer bien bas.
Jacques " Le vin est au repas ce que le parfum est à la femme." . "Patrick" a écrit dans le message de groupe de discussion : n2d791$qo3$
Le 16/11/2015 18:47, DanielCo a écrit :
Recopie toutes les feuilles de ton classeur dans classeur vierge, ainsi que les macros et les userforms, au besoin. Enregistre-le et teste. Il
est possible que ton classeur soit corrompu.
mais que fait la police ??? :)
--- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. https://www.avast.com/antivirus
--- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. http://www.avast.com
Salut Patrick
La police est fort occupée ces jours-ci et n'a pas le temps pour quelques
virus.
Mais, elle prend le temps de te saluer bien bas.
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"Patrick" a écrit dans le message de groupe de discussion :
n2d791$qo3$1@speranza.aioe.org...
Le 16/11/2015 18:47, DanielCo a écrit :
Recopie toutes les feuilles de ton classeur dans classeur vierge, ainsi
que les macros et les userforms, au besoin. Enregistre-le et teste. Il
est possible que ton classeur soit corrompu.
mais que fait la police ??? :)
---
L'absence de virus dans ce courrier électronique a été vérifiée par le
logiciel antivirus Avast.
https://www.avast.com/antivirus
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
http://www.avast.com
Recopie toutes les feuilles de ton classeur dans classeur vierge, ainsi que les macros et les userforms, au besoin. Enregistre-le et teste. Il
est possible que ton classeur soit corrompu.
mais que fait la police ??? :)
Bonsoir, ;-))) A vrai dire, je n'avais pas compris. Merci Jacquouille. Daniel
MichD
Essaie cette macro...
'------------------------------------------------- Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim Reponse As VbMsgBoxResult With ThisWorkbook If .Saved = False Then Reponse = MsgBox("Désires-tu sauvegarder les modifications?", _ vbYesNoCancel + vbInformation, "Attention, à l'historique des factures?")
If Reponse = vbNo Then With .Sheets("Facture") .[NO_Fact].Value = "" .[Control].Value = 2 End With Application.EnableEvents = False ThisWorkbook.Saved = True Application.EnableEvents = True Exit Sub ElseIf Reponse = vbYes Then With .Sheets("Facture") .[NO_Fact].Value = "" .[Control].Value = 2 End With With Application .StatusBar = "Exécution de macro...." .EnableEvents = False .ScreenUpdating = False .DisplayAlerts = False 'Cette macro copie les données de la facture dans un classeur de sauvegarde Call Insérer .StatusBar = "Exécution de macro...." .EnableEvents = True .ScreenUpdating = True .DisplayAlerts = True End With ThisWorkbook.Save
ElseIf Reponse = True Then vbCancel = True End If End If End With End Sub '-------------------------------------------------
Essaie cette macro...
'-------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Reponse As VbMsgBoxResult
With ThisWorkbook
If .Saved = False Then
Reponse = MsgBox("Désires-tu sauvegarder les modifications?", _
vbYesNoCancel + vbInformation, "Attention, à l'historique des factures?")
If Reponse = vbNo Then
With .Sheets("Facture")
.[NO_Fact].Value = ""
.[Control].Value = 2
End With
Application.EnableEvents = False
ThisWorkbook.Saved = True
Application.EnableEvents = True
Exit Sub
ElseIf Reponse = vbYes Then
With .Sheets("Facture")
.[NO_Fact].Value = ""
.[Control].Value = 2
End With
With Application
.StatusBar = "Exécution de macro...."
.EnableEvents = False
.ScreenUpdating = False
.DisplayAlerts = False
'Cette macro copie les données de la facture dans un classeur de sauvegarde
Call Insérer
.StatusBar = "Exécution de macro...."
.EnableEvents = True
.ScreenUpdating = True
.DisplayAlerts = True
End With
ThisWorkbook.Save
ElseIf Reponse = True Then
vbCancel = True
End If
End If
End With
End Sub
'-------------------------------------------------
'------------------------------------------------- Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim Reponse As VbMsgBoxResult With ThisWorkbook If .Saved = False Then Reponse = MsgBox("Désires-tu sauvegarder les modifications?", _ vbYesNoCancel + vbInformation, "Attention, à l'historique des factures?")
If Reponse = vbNo Then With .Sheets("Facture") .[NO_Fact].Value = "" .[Control].Value = 2 End With Application.EnableEvents = False ThisWorkbook.Saved = True Application.EnableEvents = True Exit Sub ElseIf Reponse = vbYes Then With .Sheets("Facture") .[NO_Fact].Value = "" .[Control].Value = 2 End With With Application .StatusBar = "Exécution de macro...." .EnableEvents = False .ScreenUpdating = False .DisplayAlerts = False 'Cette macro copie les données de la facture dans un classeur de sauvegarde Call Insérer .StatusBar = "Exécution de macro...." .EnableEvents = True .ScreenUpdating = True .DisplayAlerts = True End With ThisWorkbook.Save
ElseIf Reponse = True Then vbCancel = True End If End If End With End Sub '-------------------------------------------------
MichD
La dernière section de la procédure : ElseIf Reponse = True Then vbCancel = True
devrait plutôt se lire comme ceci : ElseIf Reponse = vbCancel Then Cancel = True