Microsoft 365 menu_contextuel (Marcel32)

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,
J'espère que vous allez bien :)

Il y a quelques temps, Marcel32, m'avait demandé de tester sur office365 un code fait pour un demandeur :

Bien lui en a pris et je l'en remercie :).
J'ai testé son fichier et au fil des tests une "idée", pour mon fichier de travail, m'est apparu (OUI ça m'arrive lol) :) :

Dans mon fichier de travail j'utilise des UserForm "successifs" pour commenter nos appels
Est-de la cause de certains ralentissements d'exécution de code, je ne sais pas vraiment !

Toutefois, "l'idée" qui m'est venue est de voir pour remplacer ces UserForm par le code "menu_contextuel" de Marcel32 qui est instantané en exécution.
J'ai avancer et modifier "un peu" la codification pour que ça puisse fonctionner dans mon fichier.

Il me reste plusieurs adaptations à coder que je ne sais pas faire et je fais appel à votre aide :
Onglet Motifs et Glossaire
obligé de doubler les motifs pour que ça fonctionne
ma demande
Serait-il possible que ça fonctionne uniquement avec col B et C ?

Onglet Planning
ma demande

si sélection catégorie "Rappels"
1 - envoie sélection "Vendeur OK rappel" avant écriture du texte
2 - pas de date devant "Vendeur OK rappel"
3 - écriture du texte après sélection

Auriez-vous la solution ?
Je joins un fichier test.

Avec mes remerciements,
Je vous souhaite à toutes et à tous un beau dimanche,
Amicalement,
lionel,
 

Pièces jointes

  • menu_contextuel3.xlsm
    29.6 KB · Affichages: 22
Dernière édition:

patricktoulon

XLDnaute Barbatruc
deja pour commencer
regarde avec quoi je construit ton menu contextuel
demo4.gif
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Il me reste plusieurs adaptations à coder que je ne sais pas faire et je fais appel à votre aide :
Onglet Motifs et Glossaire
obligé de doubler les motifs pour que ça fonctionne
ma demande
Serait-il possible que ça fonctionne uniquement avec col B et C ?
Ce que j'avais proposé en fonction de ce qui avait été demandé, c'était une 1ère colonne avec l'intitulé apparaissant dans le menu, et une 2de colonne avec le libellé bref devant apparaître lors de la sélection de l'intitulé correspondant.

Mais sa liste étant très longue, j'avais transformé le tableau servant à générer le menu contextuel pour permettre de regrouper des intitulés en catégories.

1ère colonne : intitulé ou catégorie, apparaissant dans le menu contextuel.

2ème colonne :
- inutile si la 1ère colonne contient un intitulé,
- intitulé si la 1ère colonne contient une catégorie ou rien.

- 3ème colonne : libellé devant apparaître quand on sélectionne un intitulé.


Tu vois qu'il n'y a aucune raison de doubler quoi que ce soit. ;)
Mais il faut probablement adapter, car je doute que tes besoins soient exactement les mêmes, camarade. ;)
 

patricktoulon

XLDnaute Barbatruc
Tu es vraiment génial ... de la à t'épouser , il n'y a q'1 pas lol :)

ben je t'aime bien mais tu sais MAIS .......de là a prendre cupidon à l'envers je me sent pas prêt encore ;) ;) :D :D :D :D

bon donc reprenons ton fichier en exemple
on vire le module 1 hop!!! poubelle
on vire le module 2 hop!!! poubelle
dans ta table pour menu on la modifie comme ceci

Capture.JPG


ensuite on met un nouveau module
et on lui colle ce code
VB:
Option Explicit
Sub CreatePopupMenupat()
    Dim MaBarre As CommandBar, i&, MaRef As Range, t$, nombre&, cell As Range, ctrlparent As Object, bout
    On Error Resume Next
    Application.CommandBars("MenuContextuelPerso").Delete
    Err.Clear
    With Sheets("Motifs et glossaire"): Set MaRef = .Range("B3", .Cells(Rows.Count, "B").End(xlUp).Offset(-1)): End With
    Set MaBarre = Application.CommandBars.Add(Name:="MenuContextuelPerso", Position:=msoBarPopup)
    For Each cell In MaRef.Cells
        t = cell.Offset(, 1).Text
        If cell <> "" Then
            Set ctrlparent = MaBarre.Controls.Add(msoControlPopup, , , , True)
            ctrlparent.Caption = cell
        End If
        nombre = cell.Offset(, 2).Value
        If Val(nombre) > 0 Then
            For i = 1 To nombre
                If Not ActiveCell.Text Like "*" & t & i & "*" Then
                    Set bout = ctrlparent.Controls.Add(msoControlButton)
                    With bout: .Caption = t & i: .OnAction = "Remplir": .Tag = i: End With
                End If
            Next
        End If

    Next
    MaBarre.ShowPopup
    'la barre est Autodestructible(pas besoin de la supprimer a la fermeture du fichier!!!!!)
    On Error Resume Next
    Application.CommandBars("MenuContextuelPerso").Delete
    Err.Clear
End Sub
Sub Remplir()
    Dim itemChoisi$
        itemChoisi = CommandBars.ActionControl.Caption
    With ActiveCell
        If .Value <> "" Then .Value = .Value & " "
        .Value = .Value & Format(Date, "dd/mm/yy") & " - " & itemChoisi & "-"
    End With
End Sub

dans le beforerightclick de la feuille
VB:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, [s:s]) Is Nothing Then
        Cancel = True
        CreatePopupMenupat
    Else
        Cancel = False
    End If
End Sub

voila tu es parré
a chaque item que tu met il est éliminé du menu et cela indépendamment pour chaque cellule
demonstration



demo4.gif


et on peu faire bien mieux encore
et il est auto destructible en prime
 

Pièces jointes

  • menu_contextuelpatricktoulon .xlsm
    32.3 KB · Affichages: 6

TooFatBoy

XLDnaute Barbatruc
Je ne sais pas quel est ton réel besoin, mais si j'en crois l'animation #12, le sous-menu me semble totalement inutile et donc tu dois pouvoir simplifier son code et surtout la vie de l'utilisateur (c'est toujours ce qui compte le plus : rendre l'utilisation la moins désagréable possible). ;)
 

Discussions similaires

  • Question
Power Query RAPPEL
Réponses
6
Affichages
375

Statistiques des forums

Discussions
312 211
Messages
2 086 295
Membres
103 171
dernier inscrit
clemm