mromain
XLDnaute Barbatruc
Bonjour le forum ,
Voici un petit code VBA qui permet de rajouter 2 évènements au classeur :
Il faut rajouter au projet le module de classe Cls_ShapesEvents contenant le code suivant :
Ainsi que ce code dans ThisWorkbook :
Ensuite, associer la macro ThisWorkbook.ClicShape aux formes du classeur.
Il ne reste qu’à implémenter la gestion des évènements depuis ThisWorkbook :
Le fichier ci-joint montre un exemple d’utilisation.
A+
Voici un petit code VBA qui permet de rajouter 2 évènements au classeur :
- prise de focus sur une Shape
- La perte de focus sur une Shape
Il faut rajouter au projet le module de classe Cls_ShapesEvents contenant le code suivant :
VB:
Option Explicit
Private memShp As Shape
Private WithEvents wbk As Workbook
Public Event GetFocus(shp As Shape)
Public Event LostFocus(shp As Shape)
Public Sub ShapeClic(shp As Shape)
FreeShape
Set memShp = shp
RaiseEvent GetFocus(memShp)
End Sub
Private Sub FreeShape()
If Not memShp Is Nothing Then RaiseEvent LostFocus(memShp)
Set memShp = Nothing
End Sub
Private Sub Class_Initialize()
Set wbk = ThisWorkbook
End Sub
Private Sub wbk_BeforeClose(Cancel As Boolean)
FreeShape
End Sub
Private Sub wbk_Deactivate()
FreeShape
End Sub
Private Sub wbk_SheetActivate(ByVal Sh As Object)
FreeShape
End Sub
Private Sub wbk_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
FreeShape
End Sub
VB:
Private WithEvents ShapesEvts As Cls_ShapesEvents
Public Sub ClickShape()
On Error Resume Next
If ShapesEvts Is Nothing Then Set ShapesEvts = New Cls_ShapesEvents
ShapesEvts.ShapeClic ActiveSheet.Shapes(Application.Caller)
End Sub
Ensuite, associer la macro ThisWorkbook.ClicShape aux formes du classeur.
Il ne reste qu’à implémenter la gestion des évènements depuis ThisWorkbook :
VB:
Private Sub ShapesEvts_GetFocus(shp As Shape)
End Sub
Private Sub ShapesEvts_LostFocus(shp As Shape)
End Sub
Le fichier ci-joint montre un exemple d’utilisation.
A+