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! =)
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 :
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...
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
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