Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Personalisation des menus contextuels via vba

2 réponses
Avatar
rodyrody
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

2 réponses

Avatar
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
------------------------------------------
Avatar
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é