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 :

Menus conceptuels - suppression de commandes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 120
    Par défaut Menus conceptuels - suppression de commandes
    Bonjour
    Je souhaite sur une application, supprimer un certain nombre de commande du menu conceptuel.
    J'utilise la solution de microsoft sur le lien suivant : https://docs.microsoft.com/fr-fr/pre...2(v=office.14)
    Cela donne une routine comme celle-ci :
    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
    16
    17
    18
    19
    20
     
    Sub DeleteFromCellMenu(Etiquettemenu As String)
        Dim ContextMenu As CommandBar
        Dim ctrl As CommandBarControl
     
        ' Set ContextMenu to the Cell context menu.
        Set ContextMenu = Application.CommandBars("Cell")
     
        ' Delete the custom controls with the Tag : My_Cell_Control_Tag.
        For Each ctrl In ContextMenu.Controls
            If ctrl.Caption = Etiquettemenu Then
                ctrl.Delete
            End If
        Next ctrl
     
        ' Delete the custom built-in Save button.
        On Error Resume Next
        ContextMenu.FindControl(ID:=3).Delete
        On Error GoTo 0
    End Sub
    Sur un classeur vierge de test, cela fonctionne parfaitement. Sur mon appli, pas du tout.
    J’intègre l'appel à la procédure directement dans le démarrage de l’application de cette façon :

    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
    16
    17
    18
    19
    20
     
        If ThisWorkbook.Name = "Base opérationnelle de test version 2-1-0-1.xlsm" Then GoTo Suite
        Call DeleteFromCellMenu("A&fficher/Masquer les commentaires")
        Call DeleteFromCellMenu("Insérer un co&mmentaire")
        Call DeleteFromCellMenu("&Trier")
        Call DeleteFromCellMenu("&Supprimer...")
        Call DeleteFromCellMenu("E&ffacer le contenu")
        Call DeleteFromCellMenu("Filtr&er")
        Call DeleteFromCellMenu("For&mat de cellule")
        Call DeleteFromCellMenu("Collage &spécial...")
        Call DeleteFromCellMenu("Coller le ta&bleau")
        Call DeleteFromCellMenu("&Insérer...")
        Call DeleteFromCellMenu("Anal&yse rapide")
        Call DeleteFromCellMenu("&Définir un nom...")
        Call DeleteFromCellMenu("Modifier le lien &hypertexte...")
        Call DeleteFromCellMenu("Lien &hypertexte...")
        Call DeleteFromCellMenu("C&oller")
        Call DeleteFromCellMenu("&Copier")
        Call DeleteFromCellMenu("Lien &hypertexte...")
        Call DeleteFromCellMenu("Lien &hypertexte...")
    Le premier test me permet de ne pas supprimer sur ma base test
    Mais quand je vais sur ma feuille principale, clic droit sur une cellule ne change rien
    Si quelqu'un pourrait me donner une piste, il serait bien venu.
    Merci d'avance

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonsoir
    tu peux nous en dire plus sur le contexte
    par exemple a quoi te sert ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ThisWorkbook.Name = "Base opérationnelle de test version 2-1-0-1.xlsm" Then GoTo Suite
    parce que si la macro est dans ce classeur je n'en vois pas l'interet
    apres nommer le control pour le supprimer n'est pas une bonne idée ,j'ai dis idée heu... pardon j'ai voulu dire "ID"
    tu veux les connaitre?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
    Cells(1, 1).Resize(1, 2).Value = Array("caption", "id")
    For Each ctrl In CommandBars("cell").Controls
    i = i + 1
    Cells(i + 1, 1) = ctrl.Caption
    Cells(i + 1, 2) = ctrl.ID
    Next
    End Sub
    resultat
    caption id
    Cou&per 21
    &Copier 19
    C&oller 22
    Colla&ge spécial... 755
    &Insérer... 3181
    &Supprimer... 292
    E&ffacer le contenu 3125
    Filtr&er 31402
    &Trier 31435
    Insérer un co&mmentaire 2031
    Effacer le comme&ntaire 1592
    A&fficher/Masquer les commentaires 1593
    Fo&rmat de cellule 855
    &Liste déroulante de choix... 1966
    &Afficher le champ phonétique 1614
    Nomme&r une plage... 13380
    Lien &hypertexte 1576
    &Modifier le lien hypertexte... 1577
    &Ouvrir le lien hypertexte... 1015
    Supp&rimer le lien hypertexte 3626
    Développer jusqu'au&x détails 11299
    Actions s&upplémentaires 31595
    Plein é&cran 178

    parti de la
    exemple
    application.commandbars.findcontrol(id:=755).enabled=false

    petite parentheze mais qui resume tout
    quand tu fait (ctrl.Delete) sur un control buildin tu risque pas de l'enlever c'est impossible tout du moins sur 2007tu peux seulement les deactiver
    tu ne peux supprimer que ceux que tu a créé
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 120
    Par défaut
    Bonjour

    Comme je l'ai écrit, le premier test sert à faire la différence entre la base test qui me permet de faire évoluer l'application et les versions opérationnelles qui évoluent en fonction des versions.

    J'ai fait (et j'avais fait) le test avec ID ou Caption et le résultat est le même, le menu conceptuel n'est pas impacté.
    Sur un excel vierge, cela a fonctionné avec la routine suivante qui est la routine Microsoft[B]
    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
    16
    17
    18
     
    Sub DeleteAllFromCellMenu()
        Dim ContextMenu As CommandBar
        Dim ctrl As CommandBarControl
     
        ' Set ContextMenu to the Cell context menu.
        Set ContextMenu = Application.CommandBars("Cell")
     
        ' Delete the custom controls with the Tag : My_Cell_Control_Tag.
        For Each ctrl In ContextMenu.Controls
                ctrl.Delete
        Next ctrl
     
        ' Delete the custom built-in Save button.
        On Error Resume Next
        ContextMenu.FindControl(ID:=3).Delete
        On Error GoTo 0
    End Sub
    Je peux revenir en arrière avec un Ctrl.reset

    Cette même routine ne fonctionne pas sur la base test

    Pour ta proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    application.commandbars.findcontrol(id:=755).enabled=false
    Je l'a fait tourner à partir d'appel successifs du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Call test2(22)     '("Coller")
    '----------------------------------------------------------------------------
    Sub Test2
           application.commandbars.findcontrol(id:=755).enabled=false
    End sub
    Elle ne fonctionne ni sur un classeur vierge ni sur la base test

    Je ne comprend pas bien ce qu'il se passe

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 120
    Par défaut
    Correction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub Test2(ID as integer)
           application.commandbars.findcontrol(id:=ID).enabled=false
    End sub

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2004
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 120
    Par défaut
    En continuant mes recherches, j'ai découvert que les procédures utilisées fonctionnaient mais en dehors des plages tableaux.
    En dehors, le menu conceptuel était modifié mais sur les cellules composant le tableau, le menu conceptuel est différent de celui des cellules.
    Reste à connaitre le menu conceptuel associé au tableau
    Si quelqu'un a une idée...

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    c'est peut etre le meme juste modifié
    je vais regarder ca
    et c'est poas conceptuel c'est contextuel (click droit)
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Menus conceptuels - suppression de commandes
    Par com-ace dans le forum Excel
    Réponses: 1
    Dernier message: 17/11/2018, 13h18
  2. Suppression des commandes d'un employé sur 2 tables
    Par CACHOU_UOHCAC dans le forum Langage SQL
    Réponses: 2
    Dernier message: 30/06/2007, 17h46
  3. Script pour créer une commande de suppression de fichiers
    Par romain.1105 dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 10/12/2006, 03h28
  4. Réponses: 4
    Dernier message: 02/06/2004, 12h19
  5. Ajout de bouton de commandes dans la barre de menus
    Par vanessaf22 dans le forum IHM
    Réponses: 9
    Dernier message: 21/07/2003, 12h38

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