Microsoft 365 Position curseur quand double clic dans ma cellule

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,
J'espère que vous allez bien :)

Toujours dans ma recherche de gains de temps et d'éviter les erreurs,
Je bute sur un codage que je n'arrive pas à faire malgré mes tentatives et recherches.

Quand on double clic dans une cellule, le curseur se positionne automatiquement là où on clique dans la cellule et souvent au milieu du texte existant..
Je voudrais, quand je double clic dans ma cellule : que le curseur se positionne après le texte
ce qui éviterait d'écrire par erreur dans le texte existant.

Auriez-vous la solution ?

Je joins une petit fichier test
Avec mes remerciements,
Je vous souhaite une belle journée,
Amicalement,
lionel,
 

Pièces jointes

  • curseur_position.xlsm
    13.1 KB · Affichages: 49
Solution
bien vu job75
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Application.Intersect(Target, Range("s7:s20000")) Is Nothing Then
        Application.EnableEvents = False
        With Target
            .Value = Trim(Target.Value) & IIf(Right(Trim(Target.Value), 1) = "-", " ", " - ")
           If .Value = " - " Then .Value = ""
            Application.SendKeys ("{Down " & Len(.Value) & "}")
            Application.SendKeys "" 'visiblement a pour effet d'annuler la touche precedente donc pas d'association de touche
            'qui ammene la plupart du temps a transformer les touches 4,6,2,8 en fleche et annule les autre du pavé
        End With
    End If
    Application.EnableEvents = True...

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
qu'est ce qu'on se marre alors :D:D:D
sacré lionel toi tu mérite la palme
ayant vu ou participer tout tout tes posts concernant ton fichier j'ai peur qu'un jour ca te pete a la gueule on va retrouver des bouts de carte mère jusqu'à Tombouctou
:cool::D:p:p:p:p:p

Mais non ... mais non, mon fichier, grâce à vous tous, il marche à merveille :)
Si tu veux, je te l'enverrai pour que tu vois
 

jmfmarques

XLDnaute Accro
A arthour973
Redevenons sérieux.
Je te propose de relire la dernière phrase de mon tout premier message (le N° 4) dans cette discussion.
Il n'est pas impossible que je te propose une solution indemne de surprise, mais en fonction de l'expression rigoureuse et détaillée des interventions/utilisateurs que tu acceptes ou refuses.
 

patricktoulon

XLDnaute Barbatruc
gif-ordinateur-qui-explose-1.gif
 

patricktoulon

XLDnaute Barbatruc
re
sinon j'ai ca mais ca n'empeche pas de reselectionner par la suite
VB:
Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
'Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
'Const MOUSEEVENTF_RIGHTUP As Long = &H10



Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    With ActiveWindow.ActivePane
        Z = (ActiveWindow.Zoom) / 100
        dpi = ((((.PointsToScreenPixelsY(72) - .PointsToScreenPixelsY(0)) / 72) / Z) * 72)
        X = .PointsToScreenPixelsX(Target.Offset(, 1).Left) - 1 * (dpi / 100)
        Y = .PointsToScreenPixelsY(Target.Top) + 2 * (dpi / 100)
    End With
     SetCursorPos X, Y
       Application.EnableEvents = False
     mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    Application.EnableEvents = True

End Sub

et si tu veux pas t'ennuyer avec les declarations api
la même
VB:
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
'Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
'Const MOUSEEVENTF_RIGHTUP As Long = &H10



Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    With ActiveWindow.ActivePane
        Z = (ActiveWindow.Zoom) / 100
        dpi = ((((.PointsToScreenPixelsY(72) - .PointsToScreenPixelsY(0)) / 72) / Z) * 72)
        X = Round(.PointsToScreenPixelsX(Target.Offset(, 1).Left) - 1 * (dpi / 100), 0)
        Y = Round(.PointsToScreenPixelsY(Target.Top) + 2 * (dpi / 100), 0)
    End With
    ExecuteExcel4Macro ("CALL(""user32"",""SetCursorPos"",""JJJJJ""," & X & ", " & Y & ")")
    ExecuteExcel4Macro ("CALL(""user32"",""mouse_event"",""JJJJJJ""," & MOUSEEVENTF_LEFTDOWN & ", " & 0 & ", " & 0 & ", " & 0 & ", " & 0 & ")")
    ExecuteExcel4Macro ("CALL(""user32"",""mouse_event"",""JJJJJJ""," & MOUSEEVENTF_LEFTUP & ", " & 0 & ", " & 0 & ", " & 0 & ", " & 0 & ")")
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 322
Messages
2 087 279
Membres
103 507
dernier inscrit
tapis23