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 :

Modifier un menu contextuel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Sapeurs Pompiers
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Sapeurs Pompiers
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Par défaut Modifier un menu contextuel
    Bonjour,

    Je suis sous Excel 2013, après plusieurs recherches sur différents site, je n’arrive pas à trouver la solution que je cherche.

    Bien que plusieurs sujets équivalents soient traités aucune des macros que j’ai essayées ne fonctionne correctement.

    Je souhaite modifier le menu contextuel sur une page d’un classeur Excel. Ce que j’appelle menu contextuel et donc celui que je veux modifier, c’est le menu qui s’affiche au clic droit lorsque l’on survole une cellule.

    Mon 1er objectif est donc dans ce menu de limiter le « Coller » à la seule fonction de « coller la valeur ».
    Mon fichier comporte énormément de mise en forme et mise en forme conditionnelle c’est pour cela que je veux limiter la seule option de collage à la valeur sur ce menu contextuel. D’autant plus que l’utilisateur final va énormément utiliser la fonction copier-coller.

    Mon 2eme objectif est également la suppression dans ce menu des items suivant : « couper », « insérer », « supprimer », « effacer le contenu », « format cellule », « liste déroulante de choix », « définir un nom » ainsi que la fenêtre de mise en page qui s’affiche en dessous !

    Si quelqu’un peut me donner le code pour mon 1er objectif ce serait vraiment cool , et si on peut m’amener à mes 2 objectifs, là ce serait merveilleux.

    Pour info je suis même pas encore un Padawan en VBA. Mes recherches et mes essais ne mon même pas conduit à la compréhension des lignes que j'ai copier !!!! il m'a semblé que l'on pouvait utiliser une macro appeler ribbonX pour faire ce que je cherche mais je n'ai rien obtenu !

    Merci de vos reponse.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    POUR LE MENU CONTEXTUEL
    Il faut énumérer toutes les CommandBars et tous ses Controls. On les inscrit dans la feuille active.
    Puis on identifie la bonne CommandBar et le Control qu'on veut désactivé/activé.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Dim CB As CommandBar
    Dim CT As CommandBarControl
     
    '#########################################################
    '### Enumère toutes les CommandBars et tous ses Controls
    '### et les inscrit dans la feuille active.
    '### Il faut identifier quelle est la bonne CommandBar
    '### et le Control qu'on veut désactivé/activé
    '#########################################################
    Sub EnumCommandBarControl()
    Dim i&
    For Each CB In Application.CommandBars
      i& = i& + 1
      Range("a" & i& & "") = CB.Name
      For Each CT In CB.Controls
        Range("b" & i& & "") = CT.Caption
        Range("c" & i& & "") = CT.ID
        i& = i& + 1
      Next CT
    Next CB
    End Sub
    '#########################################################
     
    '/////////////////////////////////////
    '//// Concerne le Control "Copier" de la
    '//// CommandBar "Cell" du menu contextuel
    '//// obtenu avec un clic droit dans une cellule
    '/////////////////////////////////////
    Sub InterditColler()
    Set CB = Application.CommandBars("Cell")
    For Each CT In CB.Controls
      If CT.ID = 19 Then CT.Enabled = False
      'un autre
      'etc
    Next CT
    End Sub
     
    Sub PermetColler()
    Set CB = Application.CommandBars("Cell")
    For Each CT In CB.Controls
      If CT.ID = 19 Then CT.Enabled = True
      'un autre
      'etc
    Next CT
    End Sub
    '//////////////////////////////////////
    Fichiers attachés Fichiers attachés

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Sapeurs Pompiers
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Sapeurs Pompiers
    Secteur : Service public

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Par défaut
    Salut PMO2017,

    Si j ai bien compris le code que tu m'a donné permet de lister les ID, et il intègre également un test avec la suppression de l'option copier du menu CELL.

    J ai bien les ID qui s'affichent, mais ton test concernant "interditcoller" ne fonctionne pas
    Je me suis aperçu qu'il fallait peut-être mettre 22 et pas 19 pour l'ID coller. Mais cela ne fonctionne pas non plus

    Si toutefois j'arrive à faire fonctionner ce code, pour désactiver d'autre ID, il aurait fallu simplement que j' ajoute des lignes comme ceci :

    1er partie du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CT.ID = idvoulu then CT.Enabled = FALSE
    puis afin de réactiver l'option a la fermeture du document dans la 2eme partie du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CT.ID = idvoulu then CT.Enabled = TRUE

    Dois je laisser ce code dans module, ou dois je le placer sur Feuil 1 sachant que je souhaite faire disparaitre ces options seulement sur la feuille 1

    Si chez toi ce code fonctionne qu'est-ce que je n'aurais pas activé sur ma version d'Excel 2013 pour qu'il fonctionne sachant qu'Aucune erreur de code ne s'affiche et que mon classeur est enregistré en XSLM !.

    Merci beaucoup

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,

    Je mets un nouvel exemple en Excel 2007, je n'ai pas la version 2013.

    1) Copiez le code suivant dans la fenêtre de code de la feuille concernée ("Feuil1")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Activate()
    Call SwitchContextuelCell(False)
    End Sub
     
    Private Sub Worksheet_Deactivate()
    Call SwitchContextuelCell(True)
    End Sub
    2) Copiez le code suivant dans un module Standard
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    Dim CB As CommandBar
    Dim CT As CommandBarControl
     
    '#########################################################
    '### Enumère toutes les CommandBars et tous ses Controls
    '### et les inscrit dans la feuille active.
    '### Il faut identifier quelle est la bonne CommandBar
    '### et le Control qu'on veut désactivé/activé
    '#########################################################
    Sub EnumCommandBarControl()
    Dim i&
    For Each CB In Application.CommandBars
      i& = i& + 1
      Range("a" & i& & "") = CB.Name
      For Each CT In CB.Controls
        Range("b" & i& & "") = CT.Caption
        Range("c" & i& & "") = CT.ID
        i& = i& + 1
      Next CT
    Next CB
    End Sub
    '#########################################################
     
    '/////////////////////////////////////
    '//// Concerne les Controls de la CommandBar
    '//// "Cell" du menu contextuel obtenu
    '//// avec un clic droit dans une cellule
    '/////////////////////////////////////
    'Menu contextuel "Cell"
    '  Cou&per 21
    '  &Copier 19
    '  C&oller 22
    '  Colla&ge spécial... 755
    '  Insérer les c&ellules copiées...  3185
    '  &Supprimer... 292
    '  E&ffacer le contenu 3125
    '  Filtr&er  31402
    '  &Trier  31435
    '  Insérer un co&mmentaire 2031
    '  Effacer le comme&ntaire 1592
    '  &Masquer le commentaire 1595
    '  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
    '  &Insérer... 3181
    Sub SwitchContextuelCell(bool As Boolean)
    '--- On veut agir sur ces contrôles
    '  Cou&per 21
    '  &Copier 19
    '  C&oller 22
    '  Colla&ge spécial... 755
    '  Insérer les c&ellules copiées...  3185
    '  &Supprimer... 292
    '  E&ffacer le contenu 3125
    '  Fo&rmat de cellule  855
    '  &Insérer... 3181
     
    Dim LesCibles As Variant
    Dim i&
    LesCibles = Array(21, 19, 22, 755, 3185, 292, 3125, 855, 3181)
    '---
    Set CB = Application.CommandBars("Cell")
    For Each CT In CB.Controls
      For i& = LBound(LesCibles) To UBound(LesCibles)
        If CT.ID = LesCibles(i&) Then CT.Enabled = bool
      Next i&
    Next CT
    End Sub
    '//////////////////////////////////////
    Après avoir énumérer toutes les CommandBars et leurs Controls, il faut aller à la pêche des IDs des Controls qui vont bien.
    Fichiers attachés Fichiers attachés

  5. #5
    Nouveau candidat au Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2017
    Messages : 3
    Par défaut masquer afficher dans menu contectuel excel
    Bonjour,
    Je cherche absolument le code vba pour masquer afficher lors du clic droit (menu contextuel)
    merci d'avance

  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
    bonjour

    bloquer le bouton "coller"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub bloque_item_coller()
    remet_menu_normal
    CommandBars("cell").Controls(3).Enabled = False
    End Sub
    bloquer le sub menu collage special

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub bloque_item_collage_special()
    remet_menu_normal
    CommandBars("cell").Controls(4).Enabled = False
    End Sub
    bien entendu pour bloquer les deux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub bloque_les_deux_bouton_de_collage()
    remet_menu_normal
    For i = 3 To 4: CommandBars("cell").Controls(i).Enabled = False: Next
    End Sub
    pour remettre le mebu normal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub remet_menu_normal()
    CommandBars("cell").Reset
    End Sub
    apres il y a la solution de vider le clipboard dans l'evenement selection_change dans le sheets concerné ou le meme evenement pour tout les sheets dans le thisworkbook
    tu trouvera ca dans les contrib avec mon pseudo
    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. Modifier le menu contextuel au sein d'une application
    Par Creenshaw dans le forum Langage
    Réponses: 3
    Dernier message: 18/08/2009, 14h09
  2. [S60 5800]Modifier le menu contextuel
    Par SfJ5Rpw8 dans le forum Débuter
    Réponses: 8
    Dernier message: 12/07/2009, 23h36
  3. Modifier le menu contextuel d'un edit
    Par PetitPapaNoël dans le forum MFC
    Réponses: 2
    Dernier message: 21/05/2008, 08h08
  4. VSTO - Excel : modifier le menu contextuel
    Par Chandy dans le forum C#
    Réponses: 2
    Dernier message: 15/05/2007, 11h24

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