Bonjour,
Je suis débutant sur VBA et je rencontre pas mal de souci à personaliser les menus contextuels et les barre d'outils avec VBA. Je cherche à limiter les possibilités proposées par les menus contextuels. Par exemple l'utilisateur ne pourra pas supprimer ou insérer des lignes.
Voici pour l'instand la macro que j'ai écrit :
Private Sub Workbook_Activate()
Application.CommandBars("Ply").Controls("supprimer").Enabled = False
Application.CommandBars("Ply").Controls("renommer").Enabled = False
Application.CommandBars("row").Controls("Insertion").Enabled = False
'Application.CommandBars("row").Controls("Supprimer").Enabled = False
Application.CommandBars("column").Controls("Insertion").Enabled = False
'Application.CommandBars("column").Controls("supprimer").Enabled = False
End Sub
Voici les problèmes que je rencontre :
1) la macro ne fonctionne pas lorque j'ouvre le fichier sur un excel en anglais...(ce fichier sera utilisé par des utilisateurs étrangers et son fonctionnement doit être indépendant de la langue et de la version excel utilisée par l'utilisateur)
2) Lors de l'ouverture/fermeture du fichier un mess d'erreur apparait sur les lignes de codes suivantes
'Application.CommandBars("row").Controls("Supprimer").Enabled = False
'Application.CommandBars("column").Controls("supprimer").Enabled = False
Ce que je ne comprends pas est que je n'ai pas de message d'erreur lorsque je "run" la procédure quand le fichier est ouvert....
3) la linge de code Application.CommandBars("Ply").Controls("Insérer").Enabled = False...
Ne fonctionne pas. Comment peut-on désacticver le bouton insérer du fichier contextuel Ply (onglet)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
MichD
Bonjour,
Voici un exemple comment supprimer l'action de la commande "supprimer" ou "insérer" dans tous les menus contextuels des barres "Cell", "Column", "Row". Attention, ces commandes existent aussi dans d'autres menus contextuels sur des objets particuliers. Elles ne devraient pas être affectées par ces procédures.
Ceci est valide pour toutes les versions d'Excel de 1997 à 2010
La procédure ne modifie pas le menu contextuel, mais affiche un message si l'usager tente d'exécuter une des commandes qui est interdite.
Tu peux utiliser les procédures événementielles d'une feuille particulière pour activer ou désactiver les restrictions. Si tu préfères, tu peux employer les mêmes événements, mais au niveau du classeur dans le ThisWorkbook.
N.B. Pour les raccourcis clavier, je n'ai pas vérifié s'il y en a d'autres...
Dans la feuille où tu veux établir un contrôle sur ces commandes, tu copies ceci :
'----------------------- Private Sub Worksheet_Activate() EnleverLaFonctionSupprimerLignesEtColonnes End Sub '----------------------- Private Sub Worksheet_Deactivate() RemettreLaFonctionSupprimerCommeAvant End Sub '-----------------------
Et dans un module standard, ces commandes :
'------------------------------------------------- Sub EnleverLaFonctionSupprimerLignesEtColonnes()
'déclaration des variables Dim Cbar As CommandBar, C As CommandBarControl On Error Resume Next For Each Cbar In Application.CommandBars Select Case Cbar.Name Case Is = "Cell", "Row", "Column" For Each C In Cbar.Controls Select Case C.ID Case 292, 293, 294, 3183 C.OnAction = "Bonjour" End Select Next End Select Next 'Pour le raccourci clavier de la commande "supprimer" Application.OnKey "^-", "Bonjour" 'Pour le raccourci clavier de la commande "Insérer" '{107} représente la touche + du clavier numérique Application.OnKey "^{107}", "Bonjour"
End Sub '------------------------------------------------- Sub Bonjour()
'Chaque fois que tu vas cliquer sur le bouton 'supprimer, c'est cette macro qui va s'excécuter 'Tu peux inscrire le code que tu veux. MsgBox "Cette commande n'est pas disponible présentement.", _ vbOKCancel + vbInformation, "Attention"
End Sub '-------------------------------------------------
Sub RemettreLaFonctionSupprimerCommeAvante() 'déclaration des variables Dim Cbar As CommandBar, C As CommandBarControl
On Error Resume Next For Each Cbar In Application.CommandBars Select Case Cbar.Name Case Is = "Cell", "Row", "Column" For Each C In Cbar.Controls Select Case C.ID Case 292, 293, 294, 3183 C.OnAction = "" End Select Next End Select Next 'Pour le raccourci clavier de la commande "supprimer" Application.OnKey "^-" 'Pour le raccourci clavier de la commande "Insérer" '{107} représente la touche + du clavier numérique Application.OnKey "^{107}"
End Sub '-------------------------------------------------
MichD ------------------------------------------
Bonjour,
Voici un exemple comment supprimer l'action de la commande "supprimer" ou "insérer" dans tous les menus contextuels des
barres "Cell", "Column", "Row". Attention, ces commandes existent aussi dans d'autres menus contextuels sur des objets
particuliers. Elles ne devraient pas être affectées par ces procédures.
Ceci est valide pour toutes les versions d'Excel de 1997 à 2010
La procédure ne modifie pas le menu contextuel, mais affiche un message si l'usager tente d'exécuter une des commandes qui
est interdite.
Tu peux utiliser les procédures événementielles d'une feuille particulière pour activer ou désactiver les restrictions. Si tu
préfères, tu peux employer les mêmes événements, mais au niveau du classeur dans le ThisWorkbook.
N.B. Pour les raccourcis clavier, je n'ai pas vérifié s'il y en a d'autres...
Dans la feuille où tu veux établir un contrôle sur ces commandes, tu copies ceci :
'-----------------------
Private Sub Worksheet_Activate()
EnleverLaFonctionSupprimerLignesEtColonnes
End Sub
'-----------------------
Private Sub Worksheet_Deactivate()
RemettreLaFonctionSupprimerCommeAvant
End Sub
'-----------------------
Et dans un module standard, ces commandes :
'-------------------------------------------------
Sub EnleverLaFonctionSupprimerLignesEtColonnes()
'déclaration des variables
Dim Cbar As CommandBar, C As CommandBarControl
On Error Resume Next
For Each Cbar In Application.CommandBars
Select Case Cbar.Name
Case Is = "Cell", "Row", "Column"
For Each C In Cbar.Controls
Select Case C.ID
Case 292, 293, 294, 3183
C.OnAction = "Bonjour"
End Select
Next
End Select
Next
'Pour le raccourci clavier de la commande "supprimer"
Application.OnKey "^-", "Bonjour"
'Pour le raccourci clavier de la commande "Insérer"
'{107} représente la touche + du clavier numérique
Application.OnKey "^{107}", "Bonjour"
End Sub
'-------------------------------------------------
Sub Bonjour()
'Chaque fois que tu vas cliquer sur le bouton
'supprimer, c'est cette macro qui va s'excécuter
'Tu peux inscrire le code que tu veux.
MsgBox "Cette commande n'est pas disponible présentement.", _
vbOKCancel + vbInformation, "Attention"
End Sub
'-------------------------------------------------
Sub RemettreLaFonctionSupprimerCommeAvante()
'déclaration des variables
Dim Cbar As CommandBar, C As CommandBarControl
On Error Resume Next
For Each Cbar In Application.CommandBars
Select Case Cbar.Name
Case Is = "Cell", "Row", "Column"
For Each C In Cbar.Controls
Select Case C.ID
Case 292, 293, 294, 3183
C.OnAction = ""
End Select
Next
End Select
Next
'Pour le raccourci clavier de la commande "supprimer"
Application.OnKey "^-"
'Pour le raccourci clavier de la commande "Insérer"
'{107} représente la touche + du clavier numérique
Application.OnKey "^{107}"
End Sub
'-------------------------------------------------
Voici un exemple comment supprimer l'action de la commande "supprimer" ou "insérer" dans tous les menus contextuels des barres "Cell", "Column", "Row". Attention, ces commandes existent aussi dans d'autres menus contextuels sur des objets particuliers. Elles ne devraient pas être affectées par ces procédures.
Ceci est valide pour toutes les versions d'Excel de 1997 à 2010
La procédure ne modifie pas le menu contextuel, mais affiche un message si l'usager tente d'exécuter une des commandes qui est interdite.
Tu peux utiliser les procédures événementielles d'une feuille particulière pour activer ou désactiver les restrictions. Si tu préfères, tu peux employer les mêmes événements, mais au niveau du classeur dans le ThisWorkbook.
N.B. Pour les raccourcis clavier, je n'ai pas vérifié s'il y en a d'autres...
Dans la feuille où tu veux établir un contrôle sur ces commandes, tu copies ceci :
'----------------------- Private Sub Worksheet_Activate() EnleverLaFonctionSupprimerLignesEtColonnes End Sub '----------------------- Private Sub Worksheet_Deactivate() RemettreLaFonctionSupprimerCommeAvant End Sub '-----------------------
Et dans un module standard, ces commandes :
'------------------------------------------------- Sub EnleverLaFonctionSupprimerLignesEtColonnes()
'déclaration des variables Dim Cbar As CommandBar, C As CommandBarControl On Error Resume Next For Each Cbar In Application.CommandBars Select Case Cbar.Name Case Is = "Cell", "Row", "Column" For Each C In Cbar.Controls Select Case C.ID Case 292, 293, 294, 3183 C.OnAction = "Bonjour" End Select Next End Select Next 'Pour le raccourci clavier de la commande "supprimer" Application.OnKey "^-", "Bonjour" 'Pour le raccourci clavier de la commande "Insérer" '{107} représente la touche + du clavier numérique Application.OnKey "^{107}", "Bonjour"
End Sub '------------------------------------------------- Sub Bonjour()
'Chaque fois que tu vas cliquer sur le bouton 'supprimer, c'est cette macro qui va s'excécuter 'Tu peux inscrire le code que tu veux. MsgBox "Cette commande n'est pas disponible présentement.", _ vbOKCancel + vbInformation, "Attention"
End Sub '-------------------------------------------------
Sub RemettreLaFonctionSupprimerCommeAvante() 'déclaration des variables Dim Cbar As CommandBar, C As CommandBarControl
On Error Resume Next For Each Cbar In Application.CommandBars Select Case Cbar.Name Case Is = "Cell", "Row", "Column" For Each C In Cbar.Controls Select Case C.ID Case 292, 293, 294, 3183 C.OnAction = "" End Select Next End Select Next 'Pour le raccourci clavier de la commande "supprimer" Application.OnKey "^-" 'Pour le raccourci clavier de la commande "Insérer" '{107} représente la touche + du clavier numérique Application.OnKey "^{107}"
End Sub '-------------------------------------------------
MichD ------------------------------------------
rodyrody
MichD a écrit le 16/12/2011 à 13h40 :
Bonjour,
Voici un exemple comment supprimer l'action de la commande "supprimer" ou "insérer" dans tous les menus contextuels des barres "Cell", "Column", "Row". Attention, ces commandes existent aussi dans d'autres menus contextuels sur des objets particuliers. Elles ne devraient pas être affectées par ces procédures.
Ceci est valide pour toutes les versions d'Excel de 1997 à 2010
La procédure ne modifie pas le menu contextuel, mais affiche un message si l'usager tente d'exécuter une des commandes qui est interdite.
Tu peux utiliser les procédures événementielles d'une feuille particulière pour activer ou désactiver les restrictions. Si tu préfères, tu peux employer les mêmes événements, mais au niveau du classeur dans le ThisWorkbook.
N.B. Pour les raccourcis clavier, je n'ai pas vérifié s'il y en a d'autres...
Dans la feuille où tu veux établir un contrôle sur ces commandes, tu copies ceci :
'----------------------- Private Sub Worksheet_Activate() EnleverLaFonctionSupprimerLignesEtColonnes End Sub '----------------------- Private Sub Worksheet_Deactivate() RemettreLaFonctionSupprimerCommeAvant End Sub '-----------------------
Et dans un module standard, ces commandes :
'------------------------------------------------- Sub EnleverLaFonctionSupprimerLignesEtColonnes()
'déclaration des variables Dim Cbar As CommandBar, C As CommandBarControl On Error Resume Next For Each Cbar In Application.CommandBars Select Case Cbar.Name Case Is = "Cell", "Row", "Column" For Each C In Cbar.Controls Select Case C.ID Case 292, 293, 294, 3183 C.OnAction = "Bonjour" End Select Next End Select Next 'Pour le raccourci clavier de la commande "supprimer" Application.OnKey "^-", "Bonjour" 'Pour le raccourci clavier de la commande "Insérer" '{107} représente la touche + du clavier numérique Application.OnKey "^{107}", "Bonjour"
End Sub '------------------------------------------------- Sub Bonjour()
'Chaque fois que tu vas cliquer sur le bouton 'supprimer, c'est cette macro qui va s'excécuter 'Tu peux inscrire le code que tu veux. MsgBox "Cette commande n'est pas disponible présentement.", _ vbOKCancel + vbInformation, "Attention"
End Sub '-------------------------------------------------
Sub RemettreLaFonctionSupprimerCommeAvante() 'déclaration des variables Dim Cbar As CommandBar, C As CommandBarControl
On Error Resume Next For Each Cbar In Application.CommandBars Select Case Cbar.Name Case Is = "Cell", "Row", "Column" For Each C In Cbar.Controls Select Case C.ID Case 292, 293, 294, 3183 C.OnAction = "" End Select Next End Select Next 'Pour le raccourci clavier de la commande "supprimer" Application.OnKey "^-" 'Pour le raccourci clavier de la commande "Insérer" '{107} représente la touche + du clavier numérique Application.OnKey "^{107}"
End Sub '-------------------------------------------------
MichD ------------------------------------------
Merci infiniment MichD
Ca m'a bcp BCP aidé
MichD a écrit le 16/12/2011 à 13h40 :
Bonjour,
Voici un exemple comment supprimer l'action de la commande
"supprimer" ou "insérer" dans tous les menus
contextuels des
barres "Cell", "Column", "Row". Attention, ces
commandes existent aussi dans d'autres menus contextuels sur des objets
particuliers. Elles ne devraient pas être affectées par ces
procédures.
Ceci est valide pour toutes les versions d'Excel de 1997 à 2010
La procédure ne modifie pas le menu contextuel, mais affiche un message
si l'usager tente d'exécuter une des commandes qui
est interdite.
Tu peux utiliser les procédures événementielles d'une
feuille particulière pour activer ou désactiver les restrictions.
Si tu
préfères, tu peux employer les mêmes
événements, mais au niveau du classeur dans le ThisWorkbook.
N.B. Pour les raccourcis clavier, je n'ai pas vérifié s'il y en a
d'autres...
Dans la feuille où tu veux établir un contrôle sur ces
commandes, tu copies ceci :
'-----------------------
Private Sub Worksheet_Activate()
EnleverLaFonctionSupprimerLignesEtColonnes
End Sub
'-----------------------
Private Sub Worksheet_Deactivate()
RemettreLaFonctionSupprimerCommeAvant
End Sub
'-----------------------
Et dans un module standard, ces commandes :
'-------------------------------------------------
Sub EnleverLaFonctionSupprimerLignesEtColonnes()
'déclaration des variables
Dim Cbar As CommandBar, C As CommandBarControl
On Error Resume Next
For Each Cbar In Application.CommandBars
Select Case Cbar.Name
Case Is = "Cell", "Row", "Column"
For Each C In Cbar.Controls
Select Case C.ID
Case 292, 293, 294, 3183
C.OnAction = "Bonjour"
End Select
Next
End Select
Next
'Pour le raccourci clavier de la commande "supprimer"
Application.OnKey "^-", "Bonjour"
'Pour le raccourci clavier de la commande "Insérer"
'{107} représente la touche + du clavier numérique
Application.OnKey "^{107}", "Bonjour"
End Sub
'-------------------------------------------------
Sub Bonjour()
'Chaque fois que tu vas cliquer sur le bouton
'supprimer, c'est cette macro qui va s'excécuter
'Tu peux inscrire le code que tu veux.
MsgBox "Cette commande n'est pas disponible présentement.", _
vbOKCancel + vbInformation, "Attention"
End Sub
'-------------------------------------------------
Sub RemettreLaFonctionSupprimerCommeAvante()
'déclaration des variables
Dim Cbar As CommandBar, C As CommandBarControl
On Error Resume Next
For Each Cbar In Application.CommandBars
Select Case Cbar.Name
Case Is = "Cell", "Row", "Column"
For Each C In Cbar.Controls
Select Case C.ID
Case 292, 293, 294, 3183
C.OnAction = ""
End Select
Next
End Select
Next
'Pour le raccourci clavier de la commande "supprimer"
Application.OnKey "^-"
'Pour le raccourci clavier de la commande "Insérer"
'{107} représente la touche + du clavier numérique
Application.OnKey "^{107}"
End Sub
'-------------------------------------------------
Voici un exemple comment supprimer l'action de la commande "supprimer" ou "insérer" dans tous les menus contextuels des barres "Cell", "Column", "Row". Attention, ces commandes existent aussi dans d'autres menus contextuels sur des objets particuliers. Elles ne devraient pas être affectées par ces procédures.
Ceci est valide pour toutes les versions d'Excel de 1997 à 2010
La procédure ne modifie pas le menu contextuel, mais affiche un message si l'usager tente d'exécuter une des commandes qui est interdite.
Tu peux utiliser les procédures événementielles d'une feuille particulière pour activer ou désactiver les restrictions. Si tu préfères, tu peux employer les mêmes événements, mais au niveau du classeur dans le ThisWorkbook.
N.B. Pour les raccourcis clavier, je n'ai pas vérifié s'il y en a d'autres...
Dans la feuille où tu veux établir un contrôle sur ces commandes, tu copies ceci :
'----------------------- Private Sub Worksheet_Activate() EnleverLaFonctionSupprimerLignesEtColonnes End Sub '----------------------- Private Sub Worksheet_Deactivate() RemettreLaFonctionSupprimerCommeAvant End Sub '-----------------------
Et dans un module standard, ces commandes :
'------------------------------------------------- Sub EnleverLaFonctionSupprimerLignesEtColonnes()
'déclaration des variables Dim Cbar As CommandBar, C As CommandBarControl On Error Resume Next For Each Cbar In Application.CommandBars Select Case Cbar.Name Case Is = "Cell", "Row", "Column" For Each C In Cbar.Controls Select Case C.ID Case 292, 293, 294, 3183 C.OnAction = "Bonjour" End Select Next End Select Next 'Pour le raccourci clavier de la commande "supprimer" Application.OnKey "^-", "Bonjour" 'Pour le raccourci clavier de la commande "Insérer" '{107} représente la touche + du clavier numérique Application.OnKey "^{107}", "Bonjour"
End Sub '------------------------------------------------- Sub Bonjour()
'Chaque fois que tu vas cliquer sur le bouton 'supprimer, c'est cette macro qui va s'excécuter 'Tu peux inscrire le code que tu veux. MsgBox "Cette commande n'est pas disponible présentement.", _ vbOKCancel + vbInformation, "Attention"
End Sub '-------------------------------------------------
Sub RemettreLaFonctionSupprimerCommeAvante() 'déclaration des variables Dim Cbar As CommandBar, C As CommandBarControl
On Error Resume Next For Each Cbar In Application.CommandBars Select Case Cbar.Name Case Is = "Cell", "Row", "Column" For Each C In Cbar.Controls Select Case C.ID Case 292, 293, 294, 3183 C.OnAction = "" End Select Next End Select Next 'Pour le raccourci clavier de la commande "supprimer" Application.OnKey "^-" 'Pour le raccourci clavier de la commande "Insérer" '{107} représente la touche + du clavier numérique Application.OnKey "^{107}"
End Sub '-------------------------------------------------