Morgan Kermor
Messages postés20Date d'inscriptionvendredi 9 décembre 2005StatutMembreDernière intervention25 janvier 2006
-
20 janv. 2006 à 15:13
Morgan Kermor
Messages postés20Date d'inscriptionvendredi 9 décembre 2005StatutMembreDernière intervention25 janvier 2006
-
25 janv. 2006 à 11:14
Bonjour tout le monde...!
Voici ma macro:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Débloque la commande (Enregistrer Sous)
Application.CommandBars("File").FindControl(ID:=748).Enabled = True
'Débloque la commande (Edition)
Application.CommandBars.FindControl(ID:=30003).Enabled = True
'Débloque la commande (Affichage)
Application.CommandBars.FindControl(ID:=30004).Enabled = True
'Débloque la commande (Insertion)
Application.CommandBars.FindControl(ID:=30005).Enabled = True
'Débloque la commande (Format)
Application.CommandBars.FindControl(ID:=30006).Enabled = True
'Débloque la commande (Outils)
Application.CommandBars.FindControl(ID:=30007).Enabled = True
'Débloque la commande (Fenêtre)
Application.CommandBars.FindControl(ID:=30009).Enabled = True
'Débloque la commande (Aide)
Application.CommandBars.FindControl(ID:=30010).Enabled = True
'Débloque la commande (Données)
Application.CommandBars.FindControl(ID:=30011).Enabled = True
End Sub
Private Sub Workbook_Open()
'Bloque l'outil si son délai d'utilisation a expiré
test
'Bloque la commande (Enregistrer Sous)
Application.CommandBars("File").FindControl(ID:=748).Enabled = False
'Bloque la commande (Edition)
Application.CommandBars.FindControl(ID:=30003).Enabled = False
'Bloque la commande (Affichage)
Application.CommandBars.FindControl(ID:=30004).Enabled = False
'Bloque la commande (Insertion)
Application.CommandBars.FindControl(ID:=30005).Enabled = False
'Bloque la commande (Format)
Application.CommandBars.FindControl(ID:=30006).Enabled = False
'Bloque la commande (Outils)
Application.CommandBars.FindControl(ID:=30007).Enabled = False
'Bloque la commande (Fenêtre)
Application.CommandBars.FindControl(ID:=30009).Enabled = False
'Bloque la commande (Aide)
Application.CommandBars.FindControl(ID:=30010).Enabled = False
'Bloque la commande (Données)
Application.CommandBars.FindControl(ID:=30011).Enabled = False
End Sub
Seulement, j'ai un petit problème...
En fait, 1èrement quand elle s'éxécute et que "mon classeur" est toujours ouvert, elle s'éxécute sur tous les classeurs qui seront déjà ouvert ou à ouvrir, jusqu'à que je ferme "mon classeur".
2èment on peut feinter ma procédure, car si l'on fait fermer et finalement on annule toutes mes commandbar son débloquées
kalobit
Messages postés169Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention 7 avril 20082 24 janv. 2006 à 14:35
Salut,
utlise les évènements activate et deactivate de workbook pour limiter l'application des modifications à ce classeur.
Ensuite, sache que les ID des contrôles peuvent différer d'une version de Excel à une autre ( 97 - 2000 - 2003). Tu riques d'avoir des soucis avec ce type de manipulation si tu distribue ton classeur.
Ensuite, pour éviter d'avoir des pb si les utilisateurs ferment et annulent, il faut programmer la fermeture de ton classeur avec l'affichage d'une msgbox et traitement de la réponse.
ex:
public Closing as boolean
workbook_beforeclose
if closing = true then exit sub
rep = msgbox("Fermeture du classeur", vbyesnocancel)
if rep vbcancel then cancel true :exit sub
else closing = true ' hé oui, variable obligatoire car on va coder la fermeture, ce qui va appeler l'evennement workbookbeforeclose une nouvelle fois
end if
désactiver_mes_modifications ' macro pour remettre les menus comme avant
if rep = vbyes then
thisworkbook.close, true
else
thisworkbook.close, false
end if
end sub
voilà, c'est du vite fait mais ce te donne l'idée générale. L'utilisation de la variable publique est indispensable pour gérer la récursivité (ça ce dit ?) du code et éviter l'affichage infini de la msgbox.
Morgan Kermor
Messages postés20Date d'inscriptionvendredi 9 décembre 2005StatutMembreDernière intervention25 janvier 2006 25 janv. 2006 à 11:14
Merci
La réponse est parfaite, en fait le fait de activate et deactivate résoud tous mes problème...
Comme un idiot je le faisais dans la procédure et pas en tant que private sub Workbook_Activate...
Thanks at all