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
j'avais oublié l'espace que tu désire
on simplifie tout on condense et:
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.Top) + 2 * (dpi / 100), 0)
    End With
    Target.Value = Trim(Target.Value) & " "
    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
Bonsoir BrunoM45, jmfmarques, Patrick, Pounet95, Modeste geedee, le Forum,

je reviens pour vous dire que je pense avoir trouvé, à force de recherches la solution au souci de désactivation du pavé numérique.
En fait, je n'y suis pas pour beaucoup lol,
J'ai trouvé le code de kiki29 de 2009 qui traitait le souci avec un code "pas trop lourd' et qui semble fonctionner : https://www.excel-downloads.com/threads/vba-commande-pour-activer-le-pave-numerique-ver-num.130298/

Je joins je fichier test c'est la feuille "lionel" :)
Cependant, pour que le curseur de postionne "à touts les coups" en bas et à la fin du texte dans la cellule, il me faut répéter plusieurs fois les deux codes suivants :
Application.SendKeys ("{bas}") x par 04 soit 04 lignes de code
Application.SendKeys ("{Droite}") x par 18 soit 18 lignes de code
Est-il possible de coder chaque action sur 1 seule ligne ?

Bonne fin de soirée :)
Amicalement,
lionel,
 

Pièces jointes

  • curseur_position.xlsm
    41.7 KB · Affichages: 2

patricktoulon

XLDnaute Barbatruc
tu pense avoir trouver mais t'en est loin
ce que tu vois dans le post de kiki est l'utilisation de l'api qui elle ne déactive pas le numlock sauf si tu simule cette touche bien sur

ton problème et de tout ordre c'est une histoire de focus de la cell en mode édition après double click

donc on prend la meme et on recommence en prenant en compte que la cellule peut avoir plusiuer ligne
il faut donc replacer le curseur en bas a droite de la celule avant de simuler le click

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) & " "
    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
voila ça fonctionne même sur les cellules mufti ligne
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 979
dernier inscrit
bderradji