CommandBar

Résolu
Morgan Kermor Messages postés 20 Date d'inscription vendredi 9 décembre 2005 Statut Membre Dernière intervention 25 janvier 2006 - 20 janv. 2006 à 15:13
Morgan Kermor Messages postés 20 Date d'inscription vendredi 9 décembre 2005 Statut Membre Dernière intervention 25 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


S'il vous plait aider moi....

2 réponses

kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 2
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.

Bonne prog

[mailto:K@lobit K@lobit]
3
Morgan Kermor Messages postés 20 Date d'inscription vendredi 9 décembre 2005 Statut Membre Dernière intervention 25 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
0
Rejoignez-nous