Menu souris perso LMA, STephane, André

F

FDinguirard

Guest
Bonjour,

Ce fichier ci-joint a pour but de faciliter la saisie en colonnes. Je m'explique : la colonne contient des valeurs (noms de clients) qui changent peu.

L'utilisateur ne veut pas faire clic droit + liste de choix, mais clic droit + nom déjà saisi au dessus. Ce besoin nous vient de LMA.

Le fichier joint le résoud sur mon poste.

PB : chez andre cela plante en erreur :

"L'erreur suivante est signalée : -2147467259 (80004005), aux les lignes
suivantes :
With Application.CommandBars("cell").Controls _
.Add(Type:=msoControlButton, before:=6, _
temporary:=True)
"
Stéphane, peux tu nous éclairer car j'y perds mon latin. S'agit il d'un pb de références externes ?
 

Pièces jointes

  • menusouris.xls
    38 KB · Affichages: 80
M

MacrophageXL

Guest
André, voici un code qui t'économisera un clic, à ajouter dans thisworkbook à la suite de l'optimisation de Ti...

Tiens moi au courant si satisfaisant stp, Merci, FD

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
ByVal Target As Excel.Range)

Dim Ctrl As CommandBarControl
Dim Cel As Range, Plage As Range
Dim NbItem As Long, Boucle As Long
Dim DejaPris As Boolean
For Each Ctrl In Application.CommandBars("cell").Controls
If Ctrl.Tag = "brccm" Then Ctrl.Delete
Next Ctrl
With ActiveCell
If .Row = 1 Then Exit Sub
ReDim ListItem(1 To .Row)
Set Plage = Range(Cells(1, .Column), .Offset(-1, 0))
End With

For Each Cel In Plage
'inutile de boucler au delà de NbItem, le reste sera vide !
For Boucle = 1 To NbItem
If Cel.Value = ListItem(Boucle) Then
DejaPris = True
Exit For
End If
Next Boucle

If Not DejaPris And Cel.Value <> "" Then
NbItem = NbItem + 1
ListItem(NbItem) = Cel.Value
With Application.CommandBars("cell").Controls _
.Add(Type:=msoControlButton, before:=6, temporary:=True)
.Caption = CStr(Cel.Value)
.OnAction = "EcrisValeur(" & NbItem & ")"
.Tag = "brccm"
End With
End If
DejaPris = False
Next Cel
Application.CommandBars("cell").ShowPopup
End Sub
 
T

Ti

Guest
En prime, pour éviter de laisser "des traces" dans le menu Cellule en changeant de fichier, vous pouvez ajouter cette procédure dans Thisworkbook. Elle fera le ménage dans le menu cellule chaque fois qu'on désactivera le fichier

Private Sub Workbook_Deactivate()
Dim Ctrl As CommandBarControl
For Each Ctrl In Application.CommandBars("cell").Controls
If Ctrl.Tag = "brccm" Then Ctrl.Delete
Next Ctrl
End Sub
 
C

Celeda

Guest
Bonjour,
Elle est très bien ta macro Ti, mais pourrais-tu encore l'améliorer un petit peu. Je ne voudrais surtout pas te donner du boulot en plus mais.....

Je t'envoie le fichier zippé avec mon interrogation dedans :

Imagine que je doive remplir au fur et à mesure des infos diverses dans la colonne, si on doit faire des allers et retours sur des cellules vides il faut que le menussouris se souvienne qu'en ligne 20 par exemple, il y a eu quelque chose de noté. Et quand on revient à la ligne 17, il doit avoir une liste de choix complète. Ce qu'il ne sait pas faire en ce moment.
C'est peut-etre une autre version que je te demande (?)....

Merci à l'avance
 

Pièces jointes

  • menusourisTiTri_Test.zip
    15.6 KB · Affichages: 17
  • menusourisTiTri_Test.zip
    15.6 KB · Affichages: 17
  • menusourisTiTri_Test.zip
    15.6 KB · Affichages: 15
F

Frédéric

Guest
Bonjour Celeda, Ti, andré etc...

Le fichier ci joint répond à la demande de Celeda mais... il ne fonctionne que pour les xlcelltype = "constantes"... jusqu'à l'amélioration suivante !

Cordialement, FD
 

Pièces jointes

  • menusourisTiTriFD.zip
    17.3 KB · Affichages: 17
T

Ti

Guest
Pas de problème Celeda, pour afficher les données insérées de toute la colonne, il suffit de remplacer la ligne :

Set Plage = Range(Cells(1, .Column), .Offset(-1, 0))

par celle-ci :

Set Plage = Range(Cells(1, .Column), Cells(65536, .Column).End(xlUp))

Et voilà !
 

Statistiques des forums

Discussions
313 071
Messages
2 095 026
Membres
106 159
dernier inscrit
MACHANI