Application.EnableCancelKey = xlDisabled désactivera les possibilités d'interruption utilisateur par la touche escape, cela évite d'avoir à les gérernon je n'ai pas pensé à ça. J'ai juste vu passer Application.EnableCancelKey dans mes recherches Web en me disant que je devais m'y intéresser mais ton message m'indique qu'il faut que j'aille plus loin.
Autant je partage ton avis pour les portables, autant sur un clavier standard, sauf fausse manip, on ne désactive pas le pavé...Malheureusement, j'ai acheté un clavier rétroéclairé de chez Logitech qui n'a pas de LED de verrouillage du clavier numérique. Je ne me suis même pas douté que ça pouvait être le cas.
C'est inconcevable qu'un clavier (à un tarif aussi élevé) ne possède pas ce témoin.
Fonctionne pas chez moi également.Et merci à @MJ13 pour le rappel de l'astuce de @patricktoulon qui hélas ne fonctionne pas chez moi.
Sub SendKeys1()
CreateObject("wscript.shell").SendKeys ("{ENTER}{UP}")
End Sub
#If VBA7 Then
Private Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
#Else
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
#End If
Sub SendKeys2()
Dim NumLock As Boolean
NumLock = IsNumLock
SendKeys "{ENTER}{UP}", True
If NumLock <> IsNumLock Then
'MsgBox "Correction NUMLOCK"
SendKeys "{NUMLOCK}", True
End If
End Sub
Private Function IsNumLock() As Boolean
Const VK_NUMLOCK = &H90 ' ou 144
If GetKeyState(VK_NUMLOCK) = 0 Then IsNumLock = True
End Function
#If VBA7 Then
Private Declare PtrSafe Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
#Else
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
#End If
Sub SendKeys3()
Dim NumLock As Boolean
NumLock = IsNumLock
Application.SendKeys "{ENTER}{UP}", True
If NumLock <> IsNumLock Then
'MsgBox "Correction NUMLOCK"
Application.SendKeys "{NUMLOCK}", True
End If
End Sub
Private Function IsNumLock() As Boolean
Const VK_NUMLOCK = &H90 ' ou 144
If GetKeyState(VK_NUMLOCK) = 0 Then IsNumLock = True
End Function
Curieux :@Usine à gaz, oui mais comme je l'ai dit au début, dans un de mes codes, cette version provoque de temps à autres une interruption du code VBA car j'envoie un {ESC}. Après l'interruption, l'instruction immédiatement suivante est surlignée en jaune (en l'occurrence un End Sub).
Je n'ai pas ce problème avec un SendKeys direct.
Je reconnais que c'est un cas très particulier mais je dois l'adresser.
Je l'avais installé pour un clavier réduit où les touches de fonctions étaient non prioritaires mais finalement désactivé car prenait pas mal des ressources.j'ai trouvé le logiciel à:
https://www.logitech.fr/fr-fr/product/options#notification-status
(comment n'y ai-je pas pensé plus tôt !!!!)
Sub TestSendKeysEscape()
Dim i As Integer
For i = 1 To 1000
Call SendKeys1("{ESC}") 'Provoque une interruption du code
'Call SendKeys2("{ESC}")
'Call SendKeys3("{ESC}") 'Provoque une interruption du code
DoEvents
Next i
MsgBox "Terminé."
End Sub