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
Bonjour Patrick, merci pour ton #Post 75 :)
Je le garde en cas de besoin ;)
Mais je préfère ton code du #Post 74 car fonctionne super bien et le code est cours sans autre ajout :)

Toutefois, à l'intégration dans mon fichier, j'ai encore un souci :
Avant le double clic dans l'une des cellules "Range("i3:i20")",
Je suis obligé de désactiver les macros "Application.EnableEvents = False"
Si je ne le fais pas, les codes de "Private Sub Worksheet_Change(ByVal Target As Range)" s'exécutent et ça me pose un problème.

A l'inverse si je désactive "Application.EnableEvents = False" ça ne fonctionne plus
J'ai aussi la particularité de d'adapter l'affichage de la feuille à ma résolution et à mon écran :
Range(Cells(1, 26), Cells(1, 1)).Select
ActiveWindow.Zoom = True ..... ce qui correspond chez moi à zoom 91 % mais qui pourrait correspondre à un autre % de zoom sur un autre ordi.
Est-ce que le zoom a aussi une importance ?

Je tiens à m'excuser pour le temps que je te prends et je te remercie de toute ton aide :)
lionel,
 

patricktoulon

XLDnaute Barbatruc
ben tu peux pas jouer sur les deux tableaux dclick et sélection change
et oui le zoom est important car avec ta feuille zoomée a 100 ou a 200 le .width ou height d'une cellule donnera la même chose il faut donc ramener ça a la réalité sur l’écran
 

patricktoulon

XLDnaute Barbatruc
ferme ton fichier , repose tes neuronnes , bois un café

ouvre un fichier vierge
met ca dans le module de la feuille
VB:
Dim dblclick As Boolean
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
dblclick = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
t = Timer
Do While Timer - t < 0.5: DoEvents: Loop

If dblclick Then dblclick = False: Exit Sub
Target.Value = "toto"
End Sub
et test sur plusieurs cellules en sélectionnant ou en double cliquant
;)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Encore merci Patrick, je vais tester :)

Mais en insistant avec mon fichier de travail, ça fini par fonctionner :)
Toutefois :
- au 1er double clic, ça ne fonctionne pas et il me positionne sur un "+",
- au second double clic ça fonctionne
ci-dessous photo au 1er double clic
Sans titre.jpg
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bon ... mais c'est bien sur :)
J'ai fait ça :
Z = (ActiveWindow.Zoom) / 100
dpi = ((((.PointsToScreenPixelsY(72) - .PointsToScreenPixelsY(0)) / 72) / Z) * 72)
x = Round(.PointsToScreenPixelsX(Target.Offset(, 1).Left) - 2 * (dpi / 100), 0)
y = Round(.PointsToScreenPixelsY(Target.Offset(1).Top) - 3 * (dpi / 100), 0)

Mon zoom est à 91 %, je n'ai pas changé "Z = (ActiveWindow.Zoom) / 100" et ......
ça marche :) youpy

Génial ! Merci Patrick ... je pense que cette fois c'est tout bon,
lionel,
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Patrick,

Je ne me suis pas servi de ce code :
VB:
Dim dblclick As Boolean
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
dblclick = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
t = Timer
Do While Timer - t < 0.5: DoEvents: Loop

If dblclick Then dblclick = False: Exit Sub
Target.Value = "toto"
End Sub
J'ai pris celui-là :
Code:
If Not Application.Intersect(Target, Range("s7:s20000")) Is Nothing Then
    Application.EnableEvents = False
    Dim Z&, dpi#, x&, y&
        With ActiveWindow.ActivePane
            Z = (ActiveWindow.Zoom) / 100
            dpi = ((((.PointsToScreenPixelsY(72) - .PointsToScreenPixelsY(0)) / 72) / Z) * 72)
            x = Round(.PointsToScreenPixelsX(Target.Offset(, 1).Left) - 2 * (dpi / 100), 0)
            y = Round(.PointsToScreenPixelsY(Target.Offset(1).Top) - 3 * (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 & ")")
    Application.EnableEvents = True
    Exit Sub
    End If
et c'est bon :)
 

job75

XLDnaute Barbatruc
Bonjour Lionel, le fil,
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.
Sauf erreur la touche F2 positionne toujours le curseur en fin de texte :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
CreateObject("wscript.shell").SendKeys "{F2}" 'évite la désactivation du pavé numérique
End Sub
Je n'ai pas du tout suivi, faudrait qu'on m'explique pourquoi nous en sommes à 89 messages :oops::rolleyes:

A+
 

Pièces jointes

  • curseur_position(1).xlsm
    15.2 KB · Affichages: 4

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia