IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Paramétrer les possibilités du menu clic droit [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 270
    Par défaut Paramétrer les possibilités du menu clic droit
    Bonjour,

    1 ) j'ai codé dans "ThisWorkbook" de mes fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
        Cancel = True
    End Sub
    Manifestement le clic droit continue d'afficher le menu contextuel des feuilles bien que je lise le contraire dans la littérature...

    Et un utilisateur a supprimé une feuille...

    Merci de votre éclairage

  2. #2
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    pour moi ce code ne bloque le clic droit que dans les feuilles donc en fait sur une cellule ou une plage.

    Pour empêcher la suppression des feuilles il faut utiliser la protection du classeur.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 270
    Par défaut
    Bonjour Tête de chat

    Protéger une feuille n'empêche pas de la supprimer, cela empêche seulement de modifier les cellules en fonction des paramètres choisis au moment de la protection (cellules verrouillées, déverrouillées, etc..)

    Ce que je veux c'est que le menu contextuel des feuilles n'apparaisse pas donc inhiber le clic droit

    Ce qui m'étonne c'est que d'après certains le code de #1 fonctionne pour cela

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 150
    Par défaut
    Hello,
    Chez moi le code du #1 fonctionne (excel 2019). Plus de menu contextuel dans les feuilles du classeur où il y a le code.

    As-tu mis un point d'arrêt dans le code pour voir si tu passez dedans ?

    Ami calmant, J.P

  5. #5
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 270
    Par défaut
    #4
    tu as raison, j'ai codé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
           MsgBox "Stop"
           Cancel = True
    End Sub
    Je n'ai jamais le message...

    Why ?

  6. #6
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Rebonjojur Jurassik Pork

    Je me permets d'insister un peu
    1. j'ai parlé de protection du classeur, pas de la feuille,

    Nom : Sans titre.png
Affichages : 144
Taille : 3,5 Ko

    2. si tu cherches à bloquer la suppression, tu dois tester avec un clic droit sur l'onglet, alors que l'événement Workbook_SheetBeforeRightClick correspond à un clic droit dans les cellules...

  7. #7
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 270
    Par défaut
    #6
    tu as mille fois raison

    je ne peux pas protéger mon classeur dans son ensemble car chaque feuille a des paramètres différents de protection, donc j'ai une protection par feuille

    Mon code du #1 est insuffisant, il ne bloque le clic droit que sur les cellules

    J'ai trouvé cela pour bloquer sur les onglets :
    dans Workbook_Open
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CommandBars("Ply").Enabled = False
    et dans Workbook_BeforeClose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CommandBars("Ply").Enabled = True
    Ca à l'air de fonctionner mais je ne maitrise pas les impacts ...

  8. #8
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 150
    Par défaut
    Hello,
    Pour personnaliser les menus contextuels et les rubans on peut utiliser Office RibbonX Editor de licence MIT :
    The Office RibbonX Editor is a standalone tool to edit the Custom UI part of Office open document file format. It contains both Office 2007 and Office 2010 custom UI schemas.


    The Office 2010 custom UI schema is the latest schema and it's still being used in the latest versions of Office including Office 2019, Office 2021 and Office 365.

    Le logiciel édite les fichiers de personnalisation customUIxx.xml qui se trouvent à l'intérieur des fichiers Office.
    Il est disponible ici (en bas de la page prendre plutôt le fichier OfficeRibbonXEditor-NETFramework-Installer.exe )
    L'ensemble des identificateurs des fichiers office se trouve ici :
    télécharger le fichier Office2013FluentUserInterfaceControlIdentifiers.zip
    Par exemple dans celui-ci on trouve l'ensemble des identificateurs des classeurs Excel dans le fichier excelcontrols.xlsx
    Voici un exemple qui :
    - crée un nouveau ruban avec 2 boutons.
    - crée un nouvel élément dynamique dans le menu contextuel de la feuille.
    - masque certains éléments du menu contextuel des onglets feuille.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     <?xml version="1.0" encoding="utf-8"?>
    <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
        <ribbon>
            <tabs>
                <tab id="customTab" label="MonRuban" insertAfterMso="TabHome">
                    <group id="customGroup" label="Outils MonRuban">
                        <button id="customButton1" label="Rafraîchissement" size="large" onAction="Refresh" imageMso="Refresh" />
                        <button id="customButton2" label="Validation données" size="large" onAction="Validation" imageMso="DataValidation" />
                    </group>
                </tab>
            </tabs>
        </ribbon>
       <contextMenus>
       <contextMenu idMso="ContextMenuCell">
             <dynamicMenu id="MyDynamicMenu" 
            label= "My Dynamic Menu" imageMso="HappyFace" 
            getContent="RDBdynamicMenuContent" insertBeforeMso="Cut"/>
          </contextMenu>
          <contextMenu idMso="ContextMenuWorkbookPly">
            <control idMso="SheetInsertPage"
                    visible="false" />  
            <control idMso="SheetDelete"
                    visible="false" /> 
            <control idMso="SheetRename"
                    visible="false" />
            <control idMso="SheetMoveOrCopy"
                    visible="false" />       
          </contextMenu>   
       </contextMenus>
    </customUI>

    Nom : RibbonXEditor.png
Affichages : 153
Taille : 68,6 Ko

    Nom : CustomUI.gif
Affichages : 133
Taille : 141,4 Ko

    Ami calmant, J.P

  9. #9
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 270
    Par défaut
    Merci très intéressant


    Le risque est l'évolution de ce logiciel par rapport aux futures versions Excel ?

  10. #10
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 150
    Par défaut
    Comme il est dit
    The Office 2010 custom UI schema is the latest schema and it's still being used in the latest versions of Office including Office 2019, Office 2021 and Office 365.
    tant que le schéma ne change pas il n'y pas de souci et je pense que si celui-ci change il y aura certainement compatibilité pour que l'ancien schéma soit pris aussi toujours en compte.

  11. #11
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    je me permets d'insister une dernière fois...

    J'ai cru comprendre que ton souci était d'empêcher qu'on supprime une feuille. Le bon outil pour ça est la protection du classeur, qui interdit de créer/supprimer/cacher/afficher les onglet, et ne concerne pas du tout la protection individuelle du contenu des feuilles.

  12. #12
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 270
    Par défaut
    #11

    je vais regarder cela

    il me faut protéger mes feuilles une par une puisque les options de protection sont différentes d'une feuille à l'autre

    Je vais tester en protégeant en plus le classeur mais j'ai aussi certaines feuilles non protégées

    Cela mérite des tests

    je te tiendrai au courant

  13. #13
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 270
    Par défaut
    #11

    effectivement cela marche, on peut protéger le classeur et en parallèle chaque feuille avec des paramètres différents

    Merci j'ignorai que cela soit possible

    il reste un problème dans le code VBA lorsque par exemple je veux cacher une feuille "test"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test.Visible = xlVeryHidden
    erreur 1004

    Cela marche en déprotégeant le classeur au début de chaque macro et le reprotégeant en fin de macro
    400 macros, gros travail et risque de bugs

    sauf si astuce, je vais réfléchir

  14. #14
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Re,

    tu peux aussi encapsuler le masquage dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    SetVisibilité Test, xlVeryHidden
     
    ...
     
    Sub SetVisibilité(MaSheet As Worksheet, MonAttribut As Long)
    Dim ProtActive As Boolean
    With MaSheet.Parent
        ProtActive = .ProtectStructure
        If ProtActive Then .Unprotect
        MaSheet.Visible = MonAttribut
        If ProtActive Then .Protect , True, False
    End With
    End Sub

  15. #15
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 270
    Par défaut
    Bonjour

    je reviens sur cette discussion, avec vos conseils j'ai résolu mes problèmes sauf un... la protection de mes boutons de commande que les utilisateurs risquent de supprimer par erreur (et par curiosité !) suite à un clic droit
    J'ai codé à l'open du fichier pour protéger les onglets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CommandBars("Ply").Enabled = False
    et au close
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.CommandBars("Ply").Enabled = True
    Parfait

    ensuite j'ai 2 cas
    1er cas simple : je protège ma feuille sans cocher "Modifier les objets" . les boutons sont inaccessibles, parfait

    2eme cas : je suis obligé sur certaines feuilles de cocher "Modifier les objets" car j'ai des formules qui permettent à l'utilisateur de choisir la ou les premières lettres de recherche dans une liste déroulante comportant bcp de lignes, par exemple "t" pour avoir l'affichage de la liste à partir de la lettre t
    Pour cela j'utilise les fonctions "DECALER" et sans l'option "Modifier les objets" lors de la protection cela ne marche pas.
    et "Modifier les objets" laisse à l'utilisateur la possibilité de sélectionner un bouton et de le supprimer...

    Cela fait des semaines que je reviens régulièrement sur ce pb sans avoir trouver une solution convenable
    J'en arrive à la conclusion que c'est plutôt dans le système d'affichage de mes listes déroulantes que peut être une solution surgira sans avoir à cocher "Modifier les objets" lors de la protection de la feuille

    Vous avez une expérience de ce type?

  16. #16
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    Pour cela j'utilise les fonctions "DECALER" et sans l'option "Modifier les objets" lors de la protection cela ne marche pas.
    Jamais vu un truc comme ça ! Je viens de faire un test spécifiquement avec un décaler sur un onglet protégé, aucun souci.
    Le problème doit venir d'autre chose...

    ExemplePourretraite83.xlsx

  17. #17
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 270
    Par défaut
    Bonjour

    c'est un peu plus compliqué que cela :

    tout d'abord dans le "Gestionnaire de noms" j'ai une référence "service" qui fait référence à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(catalServices!$A$2;;;NBVAL(catalServices!$A:$A)-1)
    cataServices étant une feuille contenant la liste des services à partir de la ligne 2 de la colonne A

    dans la cellule F2 de la feuille où l'utilisateur peut sélectionner un service j'ai une liste déroulante dont la source est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DECALER(service;EQUIV(F2&"*";service;0)-1;;NB.SI(service;F2&"*"))
    Ensuite je protège la feuille avec "Modifier les objets"

    quand l'utilisateur tape par exemple "TR" dans la cellule F2 il a la liste déroulante à partir du 1ere service commençant par TR. c'est ce que je veux, mais il peut aussi supprimer les boutons de la feuille (ce que je ne veux pas)

    Si je protège la feuille sans "Modifier les objets" il a la liste à partir du début de la liste (le 1er service), c'est ce que je ne veux pas, mais il ne peut plus supprimer les boutons de la feuille (ce que je veux)

    La quadrature du cercle pour Excel
    Y-a-t-il une solution en VBA ?

  18. #18
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Toujours pas de problème...

    ExemplePourretraite83a.xlsx

  19. #19
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 270
    Par défaut
    Voilà le fichier équivalent à mes paramètres

    Cela marche bien avec "Modifier les objets" et pas sans ce paramètre

    Il doit y avoir un truc qq part que je ne saisi pas

    Pour être dans le même contexte que mon fichier j'ai mis un mot de passe sur la feuille

    mot de passe "a" en minuscule

    Le bon fichier est celui qui fait 13,5 Ko

    Un dernier test montre que sans "Modifier les objets" cela marche en 2 temps
    exemple :
    1)
    saisi "ba" en A1
    clic sur le bouton de liste déroulante, rien ne se passe
    clic sur A1, la liste s'affiche depuis "ba"

    2)
    Le même test avec "Modifier les objets"
    exemple :
    saisi "ba" en A1
    clic sur le bouton de liste déroulante, la liste s'affiche depuis "ba"

    c'est le cas 2 que je souhaite

    En continuant mes tests je viens de découvrir (je ne savais pas) qu'une liste déroulante est en fait un objet (nommé "Drop down") ce qui explique que si le bouton est protégé, la liste l'est aussi (idem si déprotégé)

    Je me demande s'il n'y a pas une solution en protégeant les objets en décochant "Modifier les objets" et en déprotégeant l'objet "Drop down à l'open du fichier en VBA
    Fichiers attachés Fichiers attachés

  20. #20
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Re,

    je ne connaissais pas cette astuce... en fait tout se passe comme si quand les objets son protégés, on ne pouvait pas "sortir" du contrôle pour provoquer le recalcul de la liste lors du clic sur le bouton développer.

    On peut le faire en 2 temps en faisant entrée après la saisie partielle, mais ce n'est pas satisfaisant.

    Malheureusement je vois un autre inconvénient à cette méthode : comme l'astuce suppose qu'on enlève le contrôle strict sur la liste déroulante on peut saisir n'importe quoi et enchainer...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. ajouter au menu 'clic droit' de windows
    Par sp2308 dans le forum Débuter
    Réponses: 3
    Dernier message: 05/02/2010, 01h57
  2. Ajouter une entrée dans le menu clic-droit de window.
    Par mr_keyser dans le forum Windows
    Réponses: 2
    Dernier message: 28/12/2009, 17h38
  3. Projet ADD-in ajouter choix dans menu clic droit
    Par paf84 dans le forum Visual Studio
    Réponses: 0
    Dernier message: 20/10/2009, 18h55
  4. treeview menu clic droit
    Par tro2blabla dans le forum VB.NET
    Réponses: 3
    Dernier message: 06/08/2008, 14h54
  5. Menu clic droit envoyer vers
    Par PapiClod dans le forum Windows XP
    Réponses: 2
    Dernier message: 24/01/2006, 21h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo