Personalisation des menus contextuels via vba

Le
rodyrody Hors ligne
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)

Merci d'avance de vos réponses

bonne journée
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #24076941
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
------------------------------------------
rodyrody Hors ligne
Le #24277461
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é
Publicité
Poster une réponse
Anonyme