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 :

Menu contextuel que sur certaines cellules


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut Menu contextuel que sur certaines cellules
    Bonjour

    Je ne voudrai que une fonction d'un menu contextuel du bouton droit n'apparaisse que dans une plage de cellules. Ex: C1:G1

    Mon code dans le classeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Private Sub Workbook_Open()
     
    MenuCell "Ferie", "Jour férié"
     
    End Sub
    et dans le module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Function MenuCell(stCde As String, stMess As String)
        Dim Mc As CommandBarControls
        Dim Bo As CommandBarButton
     
        Set Mc = CommandBars("Cell").Controls
        Set Bo = Mc.Add(msoControlButton, Temporary:=True)
        Bo.Caption = stMess
        Bo.OnAction = stCde
    End Function
    Merci par avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Regardes du coté de l'évènement BeforeRightClick de la feuille, il y a un paramètre Target avec tout cela tu devrais pouvoir de débrouiller pour lancer la génération du menu sur la plage souhaitée.

    Philippe

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut
    Merci pour la réponse rapide

    Je pensais pour mettre mon code dans worksheet mais il semble qu'il faille le mettre dans chaque feuille.

    Voici un code qui marche pour moi:

    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
     
     
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
        Dim cmdNew As CommandBarButton
     
        For Each icbc In Application.CommandBars("cell").Controls
            If icbc.Tag = "brccm" Then icbc.Delete
        Next icbc
     
        If Not Application.Intersect(Target, Range("c1:G1")) Is Nothing Then
            Set cmdNew = CommandBars("cell").Controls.Add
            With cmdNew
                .Caption = "Jour férié"
                .OnAction = "Ferie"
                .BeginGroup = True
                .Tag = "brccm"
            End With
        End If
    End Sub

    voici un autre code qui marche de façon générique en attribuant un code pour chaque item dans le menu contextuel.

    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
     
     
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
     
    Dim Liste_codes(1 To 10), Liste_Actions(1 To 10) As String
    Liste_codes(1) = "Code 1" ' Ce sont les items qui apparissent dans le menu
    Liste_codes(2) = "Code 2"
    Liste_codes(3) = "Code 3"
    'etc...
     
    Liste_Actions(1) = "code1" ' le nom de la macro a lancer
    Liste_Actions(2) = "code2"
    Liste_Actions(3) = "code3"
    'etc...
     
    For Each icbc In Application.CommandBars("cell").Controls
    If Left(icbc.Tag, 5) = "brccm" Then icbc.Delete
    Next icbc
     
    For Each icbc In Application.CommandBars("cell").Controls
    If icbc.Tag = "brccm" Then icbc.Delete
    Next icbc
     
    For i = 1 To 3 
    With Application.CommandBars("Cell").Controls _
    .Add(Type:=msoControlButton, before:=1, temporary:=True)
    .Caption = Liste_codes(i)
    .OnAction = Liste_Actions(i)
    .Tag = "brccm" + Str(i)
    End With
    Next i
    End Sub
    Merci encore pour le conseil. Ne me demandez pas à quoi correspond "bcrm" ou "icbc", car j'aimerai aussi le savoir !

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Une proposition
    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
    Public Sub MenuCell(stCde As String, stMess As String, Vsble As Boolean)
    Dim Mc As CommandBarControls
    Dim Bo As CommandBarButton
     
    Set Mc = CommandBars("Cell").Controls
        On Error Resume Next
        Mc(stMess).Delete
        If Vsble Then
            Set Bo = Mc.Add(msoControlButton, Temporary:=True)
                Bo.Caption = stMess
                Bo.OnAction = stCde
            Set Bo = Nothing
        End If
    Set Mc = Nothing
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Dim blVisible As Boolean
     
    blVisible = Not Application.Intersect(Target, Sh.Range("C1:G1")) Is Nothing
    MenuCell "Ferie", "Jour férié", blVisible
    End Sub

Discussions similaires

  1. Readonly sur certaines cellules d'un datagrid
    Par MetalGearBe dans le forum Windows Forms
    Réponses: 1
    Dernier message: 26/03/2007, 18h00
  2. Synchroniser 2 serveur Master Slave que sur certaine tables?
    Par berceker united dans le forum Administration
    Réponses: 2
    Dernier message: 18/09/2006, 14h33
  3. [HTML/CSS] a:hover sur certaines cellules
    Par kahya dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 13/06/2006, 16h30
  4. [MFC] execution possible que sur certains ordinateur
    Par Sky_Raspoutine dans le forum MFC
    Réponses: 5
    Dernier message: 10/02/2006, 08h51
  5. Programme ne fonctionnant que sur certaines machines
    Par Marekh dans le forum DirectX
    Réponses: 14
    Dernier message: 30/08/2005, 14h09

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