XL 2019 Sub BeforeClose(Cancel As Boolean)

pat66

XLDnaute Impliqué
Bonjour le forum, je souhaiterai qu'avant de fermer sans modification, cette macro s’exécute quand même
" Application.CommandBars("Ply").Enabled = True "

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Saved = True 'thisWorkbook.Close Savechanges:=False
End Sub

Est ce possible ? merci pour votre aide

Pat66
 
Solution
Bonsoir, voici la solution à mon problème grâce à votre aide


VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ret As Integer
ret = MsgBox("Souhaitez vous fermer ce classeur ?", vbYesNo + vbInformation)
If ret = vbNo Then
Cancel = True
Else
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
Application.CommandBars("Ply").Enabled = -True
Application.CommandBars("Cell").Enabled = True
Application.CellDragAndDrop = True
Application.DisplayFullScreen = False
Application.ScreenUpdating = False
Application.EnableEvents = True
Application.DisplayAlerts = True
ThisWorkbook.Saved = True
End If
End Sub

Merci pour votre aide

pat66

XLDnaute Impliqué
re

je crois que c'est pas aussi simple car lorsque j'ouvre un autre classeur après avoir fermé le classeur avec cette macro, il ne tient pas compte de ces 2 instructions :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayFullScreen = false
Application.CommandBars("Ply").Enabled = True
ThisWorkbook.Saved = True
End Sub



merci
 

soan

XLDnaute Barbatruc
Inactif
Bonjour pat66, juvaxe,

essaye :

VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  With ThisWorkbook
    .DisplayFullScreen = 0: .CommandBars("Ply").Enabled = -1: .Saved = -1
  End With
End Sub



edit : désolé, ce code VBA est erroné ; voir mon post #9.

soan
 
Dernière édition:

pat66

XLDnaute Impliqué
Bonsoir Soan

J'ai copié ta macro et j'ai fais une capture d'écran du bug lorsque je clique sur la croix rouge du classeur pour fermer sans enregistrer et en plus juste après il me demande si je veux enregistrer les modifs, bizarre non ?
et tout çà parce que je souhaite qu'à l'ouverture le classeur se mette en plein écran et qu'il annule le clic droit sur les onglets et que l'on puisse fermer le classeur sans enregistrer les modifications
 

Pièces jointes

  • capture1.jpg
    capture1.jpg
    33.3 KB · Affichages: 29

soan

XLDnaute Barbatruc
Inactif
Bonjour pat66,

j'en suis pas sûr, mais comme ton message d'erreur parle de « plateforme » et « architecture », c'est p't'être un bug qui survient au cas où tu utilises une version d'Office 64 bits ? si c'est ça, je n'peux pas t'aider, et j'ai rien d'autre à proposer ; mais un autre intervenant pourra peut-être te trouver une solution ? alors continue de surveiller les futures réponses... bonne chance ! 🍀

soan
 

cp4

XLDnaute Barbatruc
Bonjour pat66, soan, juvaxe, :)

@pat66 : ce message survient à ma connaissance lorsque le projet est protégé par mot de passe. Il faudrait le déprotéger pour connaitre sur quelque ligne ton code plante. Normal que soan ne puisse plus t'aider avec peu d'information.

Bonne journée.
 

pat66

XLDnaute Impliqué
Bonjour soan, juvaxe, cp4

je précise que ma version d'office est en 32 bits et voila le message que j'ai avec ces instructions, et ensuite il me demande si je veux enregistrer le classeur, en tout cas merci de m'aider

Private Sub Workbook_BeforeClose(Cancel As Boolean)
With ThisWorkbook
.Unprotect ("aze"): .DisplayFullScreen = 0: .CommandBars("Ply").Enabled = -1: .Saved = -1
End With
End Sub
 

Pièces jointes

  • capture2.jpg
    capture2.jpg
    26.2 KB · Affichages: 12

soan

XLDnaute Barbatruc
Inactif
@pat66 (salut cp4, juvaxe)

pour le mot de passe, c'est inutile de mettre des parenthèses ; pour la 2ème erreur "membre de méthode ou de données introuvable", désolé, c'est ma faute : y'a 2 instructions qui dépendent en fait de Application et pas de ThisWorkbook (d'ailleurs, c'est ce que tu avais fait au départ ; donc il semble qu'il fallait juste ajouter la déprotection du classeur, puisqu'elle n'y était pas dans ton post #3) ; j'ai testé le code ci-dessous : compilation et exécution : ok, pas de plantage ; à toi de vérifier si ça fait bien le résultat attendu sur les fichiers que tu utilises en réalité.​

VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  ThisWorkbook.Unprotect "aze"
  Application.DisplayFullScreen = 0
  Application.CommandBars("Ply").Enabled = -1
  ThisWorkbook.Saved = -1
End Sub

si tout est ok : parfait ! 😊 sinon, essaye en remplaçant ThisWorkbook par ActiveWorkbook :

VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  ActiveWorkbook.Unprotect "aze"
  Application.DisplayFullScreen = 0
  Application.CommandBars("Ply").Enabled = -1
  ActiveWorkbook.Saved = -1
End Sub

à part ça, et sans tes fichiers, j'ai rien d'autre à proposer.

soan
 

pat66

XLDnaute Impliqué
re,

le classeur se ferme normalement, le classeur suivant s'ouvre toujours en plein écran mais Application.CommandBars("Ply").Enabled = -1 est bien désactivé, je dois avoir une procédure qui intercepte après tout c'est pas grave je ferais avec, merci quand même pour votre aide

Cdt

Pat66
 

pat66

XLDnaute Impliqué
Bonsoir, voici la solution à mon problème grâce à votre aide


VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ret As Integer
ret = MsgBox("Souhaitez vous fermer ce classeur ?", vbYesNo + vbInformation)
If ret = vbNo Then
Cancel = True
Else
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
Application.CommandBars("Ply").Enabled = -True
Application.CommandBars("Cell").Enabled = True
Application.CellDragAndDrop = True
Application.DisplayFullScreen = False
Application.ScreenUpdating = False
Application.EnableEvents = True
Application.DisplayAlerts = True
ThisWorkbook.Saved = True
End If
End Sub

Merci pour votre aide
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 077
Membres
103 455
dernier inscrit
saramachado