2 pièce(s) jointe(s)
Détection de changement de sélection TextFrame2 sur une zone de texte.
Bonjour,
J'ai une dérive par rapport à l'utilisation de zone de texte que je n'arrive pas à résoudre. J'ai crée une classe afin d'ajouter deux évènement GetFocus et LostFocus sur des shapes :
Code:
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 30 31 32 33 34 35 36 37 38 39 40 41
| 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 |
J'ai ensuite inséré dans le module thisWorkbook le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 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
Private Sub ShapesEvts_GetFocus(shp As Shape)
shp.TextFrame2.TextRange.Characters.Select
End Sub
Private Sub ShapesEvts_LostFocus(shp As Shape)
End Sub |
Lors que je click sur une zone de texte j'active l'évènement getFocus :
Code:
1 2 3
| Private Sub ShapesEvts_GetFocus(shp As Shape)
shp.TextFrame2.TextRange.Characters.Select
End Sub |
Pièce jointe 177497
Je sélectionne ainsi la zone de texte. Par contre lorsque je clique directement sur une seconde zone de texte, je rentre directement dans l'éditeur de texte sans déclencher de LostFocus.
Pièce jointe 177498
Le lostFocus se déclenche uniquement lorsque je click sur une cellule à côté ou un Shape n'ayant pas de texte, et uniquement pour la première forme sélectionnée. Y a t-il moyen d'ajouter un évènement qui détecte le changement de selection de TextFrame2 des zones de textes ?? Ou bien de désactiver le changement de souris en mode édition de texte lorsque la souris survol d'autre zone de texte (afin de retrouver une main permettant de déclencher la propriété onaction qui renvoie sur shapeclick )
Merci d'avance.