Je travaille sur un formulaire utilisateur avec plusieurs zones de texte, qui sont disposées comme un graphique Excel. J'ai défini les TabIndex, et ils fonctionnent parfaitement avec TAB/shift + TAB. Cependant, la réaction des touches fléchées n'est pas ce à quoi je m'attendais. Je ces zones de texte nommé comme celui-ci:Touche fléchée dans une zone de texte d'un formulaire utilisateur, VBA
boxA1 boxB1 boxC1 boxD1
boxA2 boxB2 boxC2 boxD2 ...
boxA3 boxB3 boxC3 boxD3
:
:
Si l'on suppose que l'accent est mis à boxB1. Lorsque j'appuie sur la touche fléchée vers le bas, je souhaite que la mise au point se fasse à la case B2, mais elle ira à boxA3 ou à quelque chose.
J'ai essayé ce code:
Private Sub boxB1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case vbKeyDown
boxB2.SetFocus
Case vbKeyUp
boxA10.SetFocus
End Select
End Sub
Il fonctionne très bien, cependant, s'il n'y a que plusieurs zones de texte dans ma forme, c'est une solution grande et claire. Mais il y a environ 70 textboxes dans mon formulaire, cela rendra mon code grand et vraiment dupliqué. Y a-t-il des paramètres que je peux ajuster pour faire les choses correctement? Ou y at-il une fonction que je peux utiliser comme ci-dessous? Juste sudo, tu sais.
Private Sub name_i_KeyDown(ByVal KeyCode as MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case vbKeyDown
Controls("name_" & i+1).SetFocus
Case vbKeyUp
Controls("name_" & i-1).SetFocus
End Select
End Sub
Merci!
Vous auriez besoin d'un module de classe contenant un gestionnaire keyDown/up générique que vous liez à chaque zone de texte. Pour une idée de comment cela fonctionne, voir: http://jkp-ads.com/Articles/ControlHandler00.asp – jkpieterse