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...

patricktoulon

XLDnaute Barbatruc
re
VB:
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.Offset(1).Top) - 2 * (dpi / 100), 0)
    End With
    Target.Value = Trim(Target.Value) & IIf(Right(Trim(Target.Value), 1) = "-", " ", " - ")
    ExecuteExcel4Macro ("CALL(""user32"",""SetCursorPos"",""JJJJJ""," & X & ", " & Y & ")")
    ExecuteExcel4Macro ("CALL(""user32"",""mouse_event"",""JJJJJJ""," & &H2 & ", " & 0 & ", " & 0 & ", " & 0 & ", " & 0 & ")")
    ExecuteExcel4Macro ("CALL(""user32"",""mouse_event"",""JJJJJJ""," & &H4 & ", " & 0 & ", " & 0 & ", " & 0 & ", " & 0 & ")")
End Sub
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Patrick JM, BrunoM45, jmfmarques, Pounet95, Modeste geedee, le Forum,

@ Patrick
J'ai un souci de blocage quand j'entre ton code dans mon fichier de travail ... ça beug !
"erreur de compilation"
ci-dessous copie écran :
Sans titre.jpg

Peux-tu encore m'aider ?
Un grand merci Patrick,

Je vous souhaite, à toutes et à tous, une belle journée.
lionel :
 

patricktoulon

XLDnaute Barbatruc
bonjour Staple1600 ca n'a rien a voir avec les api
-->lionel ta version n'est pas bonne
tes sendkeys bas sont valables uniquement pour la valeur actuelle, quand il y aura 1 ligne de plus ben walouh!!!!

vire moi tout ça et
VB:
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim Z&, dpi#, x&, y&
    If Not Application.Intersect(Target, Range("i3:i20")) Is Nothing Then
        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.Offset(1).Top) - 2 * (dpi / 100), 0)
        End With
        Target.Value = Trim(Target.Value) & IIf(Right(Trim(Target.Value), 1) = "-", " ", " - ")
        ExecuteExcel4Macro ("CALL(""user32"",""SetCursorPos"",""JJJJJ""," & x & ", " & y & ")")
        ExecuteExcel4Macro ("CALL(""user32"",""mouse_event"",""JJJJJJ""," & &H2 & ", " & 0 & ", " & 0 & ", " & 0 & ", " & 0 & ")")
        ExecuteExcel4Macro ("CALL(""user32"",""mouse_event"",""JJJJJJ""," & &H4 & ", " & 0 & ", " & 0 & ", " & 0 & ", " & 0 & ")")
    End If
End Sub
point barre ;)
 

patricktoulon

XLDnaute Barbatruc
re
ecoute je viens de teste 50 fois et je n'ai pas le soucis du numlock
pour ton model sendkeys cela suffit
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
For i = 1 To Len(Target.Value): Application.SendKeys ("{bas}"): Next
End Sub
quand on arrive a la next ligne la touche bas fait office de touche droite
demonstration manuelle
demo4.gif
 

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 327
Membres
103 518
dernier inscrit
hbenaoun63