Barre de boutons flottante
Bonjour,
Dans un tableur, je souhaite créer une barre de boutons flottante de sorte que quelle que soir la cellule dans laquelle je me trouve, je puisse voir et actionner l'ensemble des boutons personnalisés (macros).
Point important, j'utilise un mac avec Excel 2016 et je ne connais quasiment rien à Excel. Les macros sont fabriquées uniquement à partir du bouton "Enregistrement" donc s'il faut en écrire de nouvelles il faut me dire quoi taper et où le taper.
Savez-vous comment faire svp ?
Cordialement
Bonjour,
Je n'est pas Excel pour Mac donc impossible de tester le bon fonctionnement !
Ci dessous, la procédure pour créer une barre d'outils Popup avec deux boutons et un ComboBox (tout ceci est pour le test bien sûr) à mettre dans un module standard :
Private Sub MenuPopup()
Dim Barre As CommandBar
Dim Btn As CommandBarButton
Dim Cmb As CommandBarComboBox
Dim I As Integer
'supprime la barre si elle existe avant de la re créer
On Error Resume Next
CommandBars("MaBarre").Delete
On Error GoTo 0
'céation d'une barre d'outils pop up
Set Barre = CommandBars.Add("MaBarre", msoBarPopup)
'ajout de deux boutons et d'un ComboBox
With Barre
Set Btn = .Controls.Add(msoControlButton)
With Btn
.OnAction = "Macro1"
.Caption = "Macro 1"
.FaceId = 3648
End With
Set Btn = .Controls.Add(msoControlButton)
With Btn
.OnAction = "Macro2"
.Caption = "Macro 2"
.FaceId = 3650
End With
Set Cmb = .Controls.Add(msoControlComboBox)
With Cmb
For I = 1 To 7: .AddItem WeekdayName(I): Next I
.OnAction = "MacroCombo"
.BeginGroup = True
End With
End With
End Subci-dessous les procédures appelées par les boutons et ComboBox à mettre elles aussi dans un module standard qui peut être le même pour toutes les procédures :
Sub MacroCombo()
With CommandBars.ActionControl: MsgBox (.List(.ListIndex)): End With
End Sub
Sub Macro2()
MsgBox "Macro 2"
With CommandBars("MaBarre").Controls("M&acro 2")
If .FaceId = 3650 Then .FaceId = 220 Else .FaceId = 3650
End With
End Sub
Sub Macro1()
MsgBox "Macro 1"
With CommandBars("MaBarre").Controls("&Macro 1")
If .FaceId = 3648 Then .FaceId = 220 Else .FaceId = 3648
End With
End Subet ce dernier code est la procédure événementielle sur clic droit à mette dans le module de la feuille :
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
CommandBars("MaBarre").ShowPopup
Cancel = True
End SubDonc, en tout premier, il faut exécuter la procédure de création de la barre d'outils "MenuPopup" puis sur la feuille faire un clic droit sur n'importe quelle cellule de la feuille où se trouve la procédure événementielle
Bonsoir et merci pour le script. Pouvez-vous m'indiquer où je dois coller ce(s) script(s) svp ?
Bonsoir MacUser, Theze,
fais Alt F11 ➯ fenêtre "Microsoft Visual Basic"
fais Alt i m ➯ ça insère Module1, dont la page blanche est à droite ; c'est là que tu dois copier /coller la 1ère partie du code VBA de Theze, ici la 1ère sub : Private Sub MenuPopup() ; ensuite, fais de nouveau Alt i m pour insérer un 2ème module standard : Module2 ; dans la page blanche de droite, fais un copier / coller des 3 subs qui suivent : MacroCombo(), Macro2(), et Macro1() ; enfin, regarde à gauche et en haut, au-dessus de « Modules » ; si ton classeur contient par exemple 3 feuilles, alors tu peux voir « Feuil1 », « Feuil2 », « Feuil3 » ; si la feuille à partir de laquelle tu veux lancer le script est la 2ème feuille : fais 1 clic droit dessus et choisis l'item « Code » ; ou clic gauche sur Feuil2 puis Entrée (au choix) ➯ à droite : page de code de Feuil2 ; tu dois y copier / coller la dernière sub : Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
@Theze : j'espère que tu ne m'en voudras pas d'être intervenu sur ce sujet ; j'ai voulu t'épargner d'avoir à faire une description longue et rébarbative !
ajout : y'a pas un article où tout ça est déjà décrit, et il suffirait d'mettre un lien dessus ?
dhany
Bonjour à toutes et tous, bonjour dhany,
@Theze : j'espère que tu ne m'en voudras pas d'être intervenu sur ce sujet ; j'ai voulu t'épargner d'avoir à faire une description longue et rébarbative !
(tout au moins pour ceux qui connaissent tout ça par cœur)
Je te remercie de ta sollicitude