Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 afficher les onglets du classeur dans menu clic droit

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

bobinut60

XLDnaute Nouveau
Bonjour,
je suis pas doué en excel mais je cherche une solution en VBA pour atteindre d'un clic droit les différents onglets du classeur actif (la ou je clique).
pourrais avoir votre aide svp?
merci
 
Re,

L'ami Patrick a raison, c'est plus simple d'utiliser l'événement BeforeRightClick, la liste des feuilles est toujours à jour comme cela, et toujours pas besoin de module standard ou de modifier un module de feuille.

Bien cordialement, @+

VB:
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Application.CommandBars("Cell").Reset
Dim Compteur%
With Application.CommandBars("Cell")
    With .Controls.Add(msoControlPopup, , , 1, True)
        .Caption = "Aller à l'onglet ..."
        For Compteur = ThisWorkbook.Sheets.Count To 1 Step -1
            If ThisWorkbook.Sheets(Compteur).Visible And Not ThisWorkbook.Sheets(Compteur).Name = Sh.Name Then
                With .Controls.Add(Type:=msoControlButton, Before:=1)
                    .Caption = ThisWorkbook.Sheets(Compteur).Name
                    .FaceId = 350
                    .OnAction = ThisWorkbook.Name & "!'Thisworkbook.Select_Feuille " & Chr(34) & .Caption & Chr(34) & "'"
                End With
            End If
        Next Compteur
    End With
    .Controls(2).BeginGroup = True
End With
End Sub
Private Sub Select_Feuille(Nom_Feuille$)
    Sheets(Nom_Feuille).Select
End Sub
Private Sub Workbook_Deactivate()
    Application.CommandBars("Cell").Reset
End Sub
 

Pièces jointes

Dernière édition:
re
Bonjour a tous
meilleurs veux pour cette nouvelles année

on enlève le reset du before_rightclick et on le met dans la sub select_feuille

le menu sera toujours a jour et pas la peine de se soucier de garder la barre à la fermeture (aucun autre event n'est utile )
après l'action la barre est d'origine
 
on enlève le reset du before_rightclick et on le met dans la sub select_feuille

le menu sera toujours a jour et pas la peine de se soucier de garder la barre à la fermeture (aucun autre event n'est utile )

Bonjour Patrick

Pas vraiment d'accord, on peut faire un clic bouton droit pour autre chose que la sélection d'une autre feuille.
Du coup, le menu contextuel serait créé et resterait actif à la fermeture ou au basculement sur un autre classeur sans l'event déactivate.

Bien cordialement, @+
 
re
Bonjour @Yeahou
exact oupss!!
alors on va faire plus simple
on utilise la méthode des popup perso à la patrick 😉
on le showpopup tout simplement avant de le reset directement dans le beforerightclick
et on cancel pour ne pas avoir le popup 2 fois

en gros on l'utilise comme un popup perso

VB:
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Dim i%
    With Application.CommandBars("Cell")
        .Reset
        With .Controls.Add(msoControlPopup, , , 1, True)
            .Caption = "Aller à l'onglet ..."
            For i = 1 To ThisWorkbook.Sheets.Count
                If ThisWorkbook.Sheets(i).Visible And Not ThisWorkbook.Sheets(i).Name = Sh.Name Then
                    With .Controls.Add(Type:=msoControlButton)
                        .Caption = ThisWorkbook.Sheets(i).Name
                        .FaceId = 350
                        .OnAction = ThisWorkbook.Name & "!'Thisworkbook.Select_Feuille " & Chr(34) & .Caption & Chr(34) & "'"
                    End With
                End If
            Next i
        End With
        .Controls(2).BeginGroup = True
        .ShowPopup
        .Reset
    Cancel = True
    End With
End Sub
Private Sub Select_Feuille(Nom_Feuille$)
    Sheets(Nom_Feuille).Select
End Sub
 
re,
on le showpopup tout simplement avant de le reset directement dans le beforerightclick
et on cancel pour ne pas avoir le popup 2 fois

en gros on l'utilise comme un popup perso
ça, par contre, c'est pas mal et ça fonctionne bien sans l'event déactivate.
je pense qu'on va avoir du mal à faire plus light et polyvalent.

Bien cordialement, @+
 
Bonjour et bonne année à à tous,

Mon code n'utilise pas le Workbook_SheetBeforeRightClick car sinon cela concernerait toutes les feuilles et je ne suis pas sur que cela soit le but initial.

Le code ne nécessite aucun activate ou déactivate,
la barre créée est une barre temporaire et est immédiatement détruite après affichage ,
du coup on prend en compte à chaque fois les feuilles existantes .

Attention, il peut y avoir deux types de barre contextuelle pour une cellule : Cell et "List Range Popup"
 
re
et oui le ShowPopup fait comme si c’était un menu modal

donc ce qui suit "ShowPopup" dans le code est exécuté APRES!!!!! que la sub appelée ai effectué son travail

autrement dit c'est comme si la sub appelée faisait partie a part entière du menu
le reste du code est libéré qu’après

démonstration avec 2 msgbox
regardez bien a quel moment les msgbox apparaissent
VB:
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Dim i%
    With Application.CommandBars("Cell")
        .Reset
        With .Controls.Add(msoControlPopup, , , 1, True)
            .Caption = "Aller à l'onglet ..."
            For i = 1 To ThisWorkbook.Sheets.Count
                If ThisWorkbook.Sheets(i).Visible And Not ThisWorkbook.Sheets(i).Name = Sh.Name Then
                    With .Controls.Add(Type:=msoControlButton)
                        .Caption = ThisWorkbook.Sheets(i).Name
                        .FaceId = 350
                        .OnAction = ThisWorkbook.Name & "!'Thisworkbook.Select_Feuille " & Chr(34) & .Caption & Chr(34) & "'"
                    End With
                End If
            Next i
        End With
        .Controls(2).BeginGroup = True
        .ShowPopup
        MsgBox "la feuille " & ActiveSheet.Name & " a été activé" & " donc la sub déja fait son job"   ' ici on a le message APRES!!!!!!!!! QUE LA SUB AI ACTIVE LA FEUILLE
        .Reset
        Cancel = True
        'juste pour tester voir quel est le 1er control de la commandbar cell"
        MsgBox "le 1er control  de la commandbar Cell est """ & Application.CommandBars("Cell").Controls(1).Caption & """   "
    End With
End Sub

Private Sub Select_Feuille(Nom_Feuille$)
    Sheets(Nom_Feuille).Select
End Sub
😉
 
Bonjour le fil, le forum

@fanch55 , ne vois aucune critique dans ce que j'ai dit, il s'agit simplement de façons de faire différentes. Ce qui m'intéressait dans ce problème était de faire un menu le plus light possible sans utiliser un autre module que ThisWorkbook. Ta solution est tout à fait valable et a toute sa place dans cette discussion.

Bien cordialement, @+
 
no pb, je n'ai rien pris pour une critique 😉, je suis pour toutes les alternatives ...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
128
Réponses
5
Affichages
142
Réponses
4
Affichages
144
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…