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
non pas du tout
je viens de découvrir un truc intéressant avec application.sendkeys sans désengager le pavé
et maintenant que je sais je me dis mais c'est bien sur
surtout que la raison est supputée depuis moults années par beaucoup
et le sendkeys"" confirme ce que je pensais et personne visiblement y a pensé
en fait application.sendkeys étant déficient du keyup la dernière touche reste en mémoire(voir argument(2)
et pour peu que l'on tape une touche qui serait une combinaison windows PAF!!!

et donc visiblement le sendkeys vide annule donc la précédente simulée et comme il est vide
ben n'envoie aucun code donc pas d'association avec la future touche tapée manuellement ou alors une association avec empty
je viens de tester 200 fois pas de désengagement du pavé
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
non pas du tout
je viens de découvrir un truc intéressant avec application.sendkeys sans désengager le pavé
et maintenant que je sais je me dis mais c'est bien sur
surtout que la raison est supputée depuis moults années par beaucoup
et le sendkeys"" confirme ce que je pensais et personne visiblement y a pensé
en fait application.sendkeys étant déficient du keyup la dernière touche reste en mémoire(voir argument(2)
et pour peu que l'on tape une touche qui serait une combinaison windows PAF!!!

et donc visiblement le sendkeys vide annule donc la précédente simulée et comme il est vide
ben n'envoie aucun code donc pas d'association avec la future touche tapée manuellement ou alors une association avec empty
je viens de tester 200 fois pas de désengagement du pavé
Je suis déçu si je ne te manque pas lol :)
C'est super ce que tu as trouvé pour les application.sendkeys
"une touche qui serait une combinaison windows PAF!!!" comment on code ça ?
:)
 

patricktoulon

XLDnaute Barbatruc
ben par exemple application.sendkeys "^c"
Y a pas que Lionel qui adore les usines à gaz… Et les discussions sans fin :D
non moi au contraire j'aurais plutôt tendance a diminuer les codes
la solution ayant été trouvée on peu philosopher tant que l'on veux maintenant ;)
Lionel pointe la bonne solution pour le prochain quidam qui passe par là
 

patricktoulon

XLDnaute Barbatruc
je confirme
l'exemple le plus parlant c'est la touche snapshot qui désengage le pavé a chaque coup et bien le sendkeys vide annule l'association et le pavé est bien dispo après

test en raffale
VB:
Sub test()
    For i = 1 To 20
        Application.SendKeys "(%{1068})", True'avec"%"=fenetre active ;  sans le "%" =plein ecran 
        Application.SendKeys ""
        DoEvents
        ActiveSheet.Paste
    Next
End Sub

testez le pavé apres
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Bonjour à tous

Le clavier qui se désactive avec sendkeys est un bug très vieux.

Et quelle que soit le contournement, on revient souvent avec un clavier numérique qui se désactive.

Voici une méthode qui devrait normalement résoudre le problème. Bon après, pour le mettre en application, c'est une autre histoire.
 

Pièces jointes

  • Test_Clavier_Numérique_Sendkeys.xlsm
    14 KB · Affichages: 8

patricktoulon

XLDnaute Barbatruc
bonjour MJ13
faux faux faux faux
;)
n importe quelle touche le réactive
d'ailleurs même pire senkeys rien du tout le réactive
d'ailleurs teste ceci
déactive le numlok et lance cette sub et tape sur ton pavé
VB:
Sub A()
SendKeys ""
Réactive_Clavier_Num
End Sub

comme je disais plus haut sendkeys rien du tout vide la memoire sendkeys il n'y a donc plus d'association avec une éventuelle autre touche l'ors d'un taper manuel après un eventuel sendkeys
l'avantage de sendkeys rien du tout c'est que si il est déactivé ca le réactive si il est activé ca le déactive pas car pas de code touche envoyé

LOL;)
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Bonjour Patrick

Les codes que j'ai mis, c'était pour voir dans quels cas, le clavier se désactive. :)

Et le code "Réactive_Clavier_Numérique", c'est un code que j'avais trouvé qui doit traîner dans les archives d'XLD.

Bien sûr, il faut tout tester pour dire que cela ne fonctionne pas.

D'ailleurs, j'ai retrouvé cette discussion sur le sujet:

 

patricktoulon

XLDnaute Barbatruc
en fait les archives que tu a trouvé souffrent de la même méprise qui est faite depuis moults années pour ne pas dire décennies et pas que sur exceldownload d'ailleurs

sendkeys numlock activera le pavé si le pavé est déactivé dans le cas contraire c'est l'inverse qui va se produire de la même manière que si tu le fait a la main
quand au autre test que tu a fait c'est tout simplement le fait de la quantité
si tu a joute une fois ça ne marchera pas ou (alléatoirement en fonction de l'encombrement buffer memoire alloué au sendkeys )
je repete voir sur msdn l'argument 2 ('WAIT") de la fonction
tandis que sendkeys rien du tout est claire (aucun code envoyé ,donc buffer vidé)
c'est sauvage,brutal mais ça fonctionne

ps: je vois même que tu a participé a cette discussion et tu a fait comme tout le monde y compris moi jusqu’à hier c'est a porter une bequille qui n'est pas gérable dans le sens ou (faut il encore savoir si le numlock est déactivé )et cela seul getkeystate peut te l'apporter

cela dit le raccourci du sendkeys vide semble gérer les deux sens sans interroger getkeystate
 
Dernière édition:

MJ13

XLDnaute Barbatruc
OK, mais je me fous du buffer, wait et compagnie. Ce qui m'importe, c'est de contourner les bugs.

A partir du moment que tu utilises un sendkeys dans un code et que tu vois que le pavé numérique est désactivé, tu peux tester la solution dans mon post. Si cela fonctionne, tant mieux, sinon, tant pis, on en fera pas une maladie…;)
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 838
dernier inscrit
Christelle.B86