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

Compte Supprimé 979

Guest
Salut Arthour973

J'ai essayé avec des SendKeys, mais ça ne fonctionne pas correctement

Peut-être passer par un UserForm avec un simple TextBox pour saisir ce que l'on souhaite ajouter
A la fermeture le texte vient se mettre à la fin de l'existant

@+
 

jmfmarques

XLDnaute Accro
Bonjour
Le rectangle occupé par une cellule n'est pas une zone d'édition à part entière et n'est lui-même doté ni de propriétés, ni d'évènements. Seul l'est l'objet range (la cellule, donc), au sortir de ce rectangle.
Ce que tu appelles "curseur" a pour nom "caret" et permet de définir la position d'intervention graphique au sein de ce rectangle.
Lorsque tu double-cliques sur une cellule, le logiciel localise la position du curseur et calcule celle du caret sur la base de cette position.
Dans ces conditions, la seule manière de parvenir au but que tu recherches serait selon moi de faire intervenir des fonctions de l'Api de Windows pour :
- déterminer la position en pixels et par rapport à l'angle supérieur gauche de l'objet ActiveWindow correspondant au bord supérieur droit de la cellule concernée
- placer le curseur (fonction setcursorpos de l'Api de windows) en cette position et y simuler un double clic.

Bien cher payé pour peu de bénéfice réel.

Maintenant : il serait par contre assez facile et plus sage de déterminer (et de l'annuler alors) toute modification tentée au milieu du texte que contient la cellule.
 

patricktoulon

XLDnaute Barbatruc
bonjour
chez moi 2013 ca fonctionne tres bien
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Devents
For i = 1 To Len(Target.Value): Application.SendKeys "{RIGHT}": Next
End Sub

demo4.gif
 

Pounet95

XLDnaute Occasionnel
Bonjour,
Ici aussi XL2016 à condition de bien écrire DoEvents
Sur une cellule avec plusieurs mots aussi
Au second double clic positionnement derrière le 1er mot


Et j'ai encore droit à ce message ?????
Des messages ont été postés depuis que vous avez chargé cette page. Les voir ?
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
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 ?
si tu utilises le double-click, c'est pour exécuter une action, pas pour modifier la cellule (simple click suffirait) ...
Dés que l'action est lancée, passer le parametre : CANCEL= TRUE
 

jmfmarques

XLDnaute Accro
sinon plus rigolo encore
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
x = Target.Value
Target.Value = ""
For i = 1 To Len(x): Application.SendKeys (Mid(x, i, 1)): Next
End Sub
Essai fait sur un ordinateur portable sans pavé numérique
Cellule contenant 111111 --->> double clic --->> devient 1&&&&& --->> re double clic --->> redevient 111111
C'est normal, docteur ?
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
jmfmarques, Patrick, Pounet95, Modeste geedee,

Un grand merci à vous pour m'avoir répondu :)
@ jmfmarques : Ton code fonctionne très bien,
@ Patrick : Ton code post#5 fonctionne avec "DoEvents ", comme précisé par Pounet95 que je salue également,
@ Modeste geede : ce serait long d'expliquer le fonctionnement de mon fichier mais il me faut fait un

Un grand merci à vous tous :)
Je vais tester les versions Rigolotes +
lionel,
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 115
Messages
2 085 453
Membres
102 890
dernier inscrit
selkis