Empêcher la fermeture d'un classeur

pacoako

XLDnaute Occasionnel
Bonjour à vous tous!

Je cherche si il y a une possibilité de bloquer la fonction de fermer manuellement un classeur...

Je voudrais qu'un de mes classeur(Tableau.xls)ne se ferme que lorsque mon classeur «maître» se ferme..

J'ai trouvé une façon assez simple sauf que je suis bloqué car même si j'essaie de le fermer avec la command workbooks("Tableau.xls").close le cancel = true bloque le tout.

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Cancel = true

End Sub

=====
Et si jamais vous avez un ptit 2 secondes de plus, j'me demandais pourquoi ma ligne de code ne semble pas fonctionner... j'essaie de dire à excel de faire les mise à jour du classeur que j'ouvre, automatiquement... sans qu'il nous le demande...

Code:
Sub Workbook_Open()
ThisWorkbook.UpdateLinks = xlUpdateLinksAlways
...
End Sub

Est-ce bien la bonne commande?

Dans les 2 cas, merci d'avance! & bonne journée! =)
 

tototiti2008

XLDnaute Barbatruc
Re : Empêcher la fermeture d'un classeur

Bonjour pacoako,

pour la question 1, le mieux est sans doute de créer un booléen dans ton code qui permet la fermeture de ton classeur temporairement dans la code.
Par exemple :
 

Pièces jointes

  • Classeur1.xls
    23.5 KB · Affichages: 172
  • Classeur1.xls
    23.5 KB · Affichages: 170
  • Classeur1.xls
    23.5 KB · Affichages: 172

tototiti2008

XLDnaute Barbatruc
Re : Empêcher la fermeture d'un classeur

Re,

pour la question 2, la mise à jour des liens se fait avant le "Workbook_open", donc ça pose problème....

plusieurs solutions :

Dans le Menu Outils-Options, onglet Modifications, tu décoches
Confirmation de la mise à jour automatique des liens
et dans le Menu Edition-Liaisons, tu sélectionnes tes liens et en cliquant sur Invite de démarrage tu dis de mettre à jour les liaisons automatiquement.
Le soucis c'est que je crois (à tester) que dans ce cas, il ne te demandera plus jamais s'il faut mettre à jour les liaisons (sur aucun classeur).

Autre solution, tu prends le problème dans l'autre sens :
dans le Menu Edition-Liaisons, tu sélectionnes tes liens et en cliquant sur Invite de démarrage tu dis de ne jamais mettre à jour les liaisons automatiquement
Dans Workbook_Open, tu mets :

Code:
Private Sub Workbook_Open()
    ThisWorkbook.UpdateLink Name:=ActiveWorkbook.LinkSources
End Sub

qui met à jour tous les liens

Ce ne sont que des pistes de travail, à adapter éventuellement...
 

pacoako

XLDnaute Occasionnel
Re : Empêcher la fermeture d'un classeur

Bonjour pacoako,

pour la question 1, le mieux est sans doute de créer un booléen dans ton code qui permet la fermeture de ton classeur temporairement dans la code.
Par exemple :

Salut Tototiti! Et merci infiniment pour tes pistes ça m'a beaucoup aider à avancer dans mon projet.. sauf que la je bloque à un endroit... en fait tout fonctionne si je ferme les classeurs avec le petit "x" du classeur, mais si je ferme le tout avec le gros "X" d'excel un des 2 classeurs reste toujours ouvert...

En fait maintenant mno exemple à un peu changé, j'ai mit des fonctions aux 2 classeurs qui permet à un classeur de fermer l'autre..

voici le code utilisé :

=========== FICHIER TABLEAU======================

Code:
Tableau.xls - MODULE 1
Public ClosedFromAgent As Boolean

Sub ForceClose()

ClosedFromAgent = True
ThisWorkbook.Close True

End Sub
Code:
Tableau.xls - ThisWorkbook

Private Sub Workbook_Open()

ClosedFromAgent = False

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If ClosedFromAgent = True Then

    MsgBox "Agents a demandé de fermer Tableau"
    
    Sheets(2).EnableCalculation = True
    Sheets(2).PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
    Sheets(2).Calculate
    Sheets(2).EnableCalculation = False

Else
    MsgBox "Tableau se ferme de lui-même"
    Application.Run "'Agents Recouvrement.xls'!ForceClose"
    Sheets(2).EnableCalculation = True
    Sheets(2).PivotTables("Tableau croisé dynamique1").PivotCache.Refresh
    Sheets(2).Calculate
    Sheets(2).EnableCalculation = False
    ThisWorkbook.Save
    ThisWorkbook.Saved = True
End If

End Sub

=========== FICHIER AGENTS RECOUVREMENT======================

Code:
Agents Recouvrement.xls - MODULE1
Sub ForceClose()

ClosedFromTableau = True
ThisWorkbook.Close True

End Sub
Code:
Agents Recouvrement.xls - ThisWorkBook

Sub Workbook_Open()

ClosedFromTableau = False

end sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If ClosedFromTableau = True Then
    MsgBox "Tableau a demandé de fermer Agent"
    Quitter
Else
    MsgBox "Agents se ferme de lui-même"
    Application.Run "'Tableau.xls'!ForceClose"
    Quitter
End If

End Sub
 
Dernière édition:

Discussions similaires