Problème de fermeture classeur excel vba

Signaler
Messages postés
13
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
16 août 2010
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour,

J'ai créé un reporting sous Excel en VBA qui a la particularité de se fermer sans poser la question à l'utilisateur s'il veut sauver ou non car je ne souhaite pas que les utilisateurs sauvent le document.

Le problème est que lorsque je ferme ce reporting (classeur Excel), je n'ai plus accès à la fenêtre Excel. Il faut que je rétraississe la fenêtre puis que je la réaffiche.

Par exemple, si j'ai déjà un document ouvert dans la fenetre, je n'ai plus acces à ce document tant que je n'ai pas rafraichit la fenetre.

Mon code pour la fermeture du reporting est :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
ThisWorkbook.Close
Application.DisplayAlerts = True
End Sub

Est ce que vous avez déjà rencontré ce cas? Auriez-vous une solution?

Merci pour votre aide!

Lebcel

5 réponses

Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3
Bonjour,

Ce n'est pas beau de faire un close dans beforeclose.

Moi je ferai
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
   saved = true
End Sub 

pour dire de ne pas enregistrer quand on ferme le fichier. Mais as-tu prévu d'empêcher de cliquer sur Enregistrer (ou équivalent) ?

thip
Messages postés
13
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
16 août 2010

Merci pour ta réponse. Oui, je me rends compte que ce n'est pas beau du tout ce que j'ai fait.

Je ne sais pas comment faire pour empêcher de cliquer sur le bouton Enregistrer donc je ne l'ai pas fait. Si tu sais, je suis preneuse!

Lebcel
Messages postés
303
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
3 octobre 2013
1
Bonjour
voici pour enpêcher de d'enrigistrer
premiere version
Set D = Application.CommandBars
D.ActiveMenuBar.Controls("&Fichier").Visible = False

dans ce cas tout le menu déroulant est innaccessible
deuxième version
Set D = Application.CommandBars
D.ActiveMenuBar.Controls("&Fichier").contols("Enre&gistrer").visible=false
D.ActiveMenuBar.Controls("&Fichier").contols("En®istrer sous...").visible=false
dans ce cas seules les deux sous menus sont innacessibles

Attention rétablir la visibilité à la fermeture du classeur car ces modification sont valable pour Excel et restent activent même si l'on ferme excel pour ouvrir un autre classeur

Pour fermer un classeur sans enregistrer les modifications effectuées :
Workbooks("BOOK1.XLS").Close SaveChanges:=False

Bonne journée
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,

Pourquoi, dans un tel cas de figure, ne pas travailler tout simplement sur un miroir du vrai fichier et se désintéresser totalement de de que pourrait alors tenter ou non de faire l'utilisateur ?
Si l'on me répond qu'il pourrait être gênant qu'il s'amuse à le transformer et à le sauvegarder ensuite là où il saurait le retrouver, je réponds que rien ne l'empêcherait alors non plus de faire certaines autres manoeuvres....


___________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Et avec le principe du miroir, il est assez simple de vérifier l'absence de manoeuvres diverses.
Méthode :
- le fichier miroir est créé par (et à l') ouverture du fichier de base
- le fichier miroir ne continue que si sa date de création est celle du jour (voire pire, si l'on veut s'amuser)



____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.