bonsoir
Pb 1 est-il possible de créer un bouton dans une cellule
Pb 2 est-il possible d'automatiser ça,
cet exemple ajoute des boutons au dessus de chaque cellule de la plage A1:A5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| Option Explicit
Sub AjoutCommandButton_Feuille()
Dim Ws As Worksheet
Dim Obj As OLEObject
Dim Cell As Range
'Définit la feuille qui va contenir les boutons
Set Ws = ActiveSheet
'Boucle sur la plage de cellule qui va contenir les boutons
For Each Cell In Range("A1:A5")
'Ajout CommandButton dans la feuille
Set Obj = Ws.OLEObjects.Add("Forms.CommandButton.1")
With Obj
.Left = Cell.Left 'position horizontale
.Top = Cell.Top 'position verticale
.Width = Cell.Width 'largeur
.Height = Cell.Height 'hauteur
.Object.Caption = Cell.Value
End With
Next Cell
End Sub |
Ensuite, on pourrait imaginer qu'à chaque fois que tu ouvres le classeur, un module de classe gère tous les boutons de la feuille.
Il te restera à indiquer l'action de chaque bouton dans le module de classe comme par exemple déclencher le lien hypertexte contenu dans une cellule:
Cellule.Hyperlinks(1).Follow NewWindow:=True
1 2 3 4 5 6
| '--------------------------------------
'dans un module standard
Option Explicit
Public Collect As Collection
'-------------------------------------- |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| '--------------------------------------
'dans un module de classe nommé "Classe1"
'
Option Explicit
Public WithEvents CmdGroup As MSForms.CommandButton
Private Sub CmdGroup_Click()
'Exemple qui renvoie le nom du bouton,
'le nom de la feuille et la position.
MsgBox CmdGroup.Name & vbCrLf & _
CmdGroup.Parent.Name & vbCrLf & _
CmdGroup.TopLeftCell.Address
End Sub
'-------------------------------------- |
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
| '--------------------------------------
'à placer dans le module objet ThisWorbook pour que la classe
'soit initialisée lors de l'ouverture du classeur.
Option Explicit
Private Sub Workbook_Open()
Dim Obj As OLEObject
Dim Cl As Classe1
Dim Ws As Worksheet
Set Collect = Nothing
Set Collect = New Collection
'Boucle sur les feuilles du classeur
For Each Ws In ThisWorkbook.Worksheets
'boucle sur les objets de la Feuil1
For Each Obj In Ws.OLEObjects
'verifie s'il s'agit d'un CommandButton
If TypeOf Obj.Object Is MSForms.CommandButton Then
Set Cl = New Classe1
Set Cl.CmdGroup = Obj.Object
Collect.Add Cl
End If
Next Obj
Next Ws
End Sub
'-------------------------------------- |
bonne soirée
michel
Partager