Touche TAB pour des contrôles sur feuille Excel ?

Bonjour à tou.te.s,

J'ai créé une interface de saisie sur une feuille Excel mêlant textbox, listbox, combobox et quelques cellules.

Pour les cellules (non concomitantes) de la saisie, une solution utilisant la protection de la feuille permet de passer de l'une à l'autre avec la touche TAB.

Je souhaiterais étendre ce principe (à l'instar d'un TABINDEX d'une userform) aux contrôles utilisés dans cette saisie.

33tabulation.xlsm (39.74 Ko)

Auriez-vous des pistes ? Ci-joint, un fichier exemple comme support.

D'avance merci beaucoup pour votre aide !

Bonjour,

Une proposition de révision du code avec des TextBox et l'utilisation de la touche Entrée pour passer au contrôle suivant

51tabulation1.xlsm (50.62 Ko)

Bonjour thev,

Merci de te pencher sur ma question !

Dans la proposition, il y a l'utilisation des évènements KeyUp (pour les TextBox) et Change (pour les ListBox).
Une raison à cette distinction ? J'envisage d'utiliser SHIFT de l'évènement KeyUp pour parcourir dans l'ordre inverse les éléments de la saisie.
J'en déduis que basculer d'une cellule à un contrôle (et vice versa) n'est pas possible ?
Une raison au choix de la touche Entrée plutôt que Tab ?

Encore merci d'avance pour les conseils précieux !

Dans la proposition, il y a l'utilisation des évènements KeyUp (pour les TextBox) et Change (pour les ListBox).
Une raison à cette distinction ?

La raison est que pour passer d'un contrôle au suivant, le contenu de ce dernier doit être complet. il l'est immédiatement avec une combobox ou une listbox. Mais rien n'empêche d'avoir pour celles-ci aussi l'événement KeyUp.

Une raison au choix de la touche Entrée plutôt que Tab ?

La touche Entrée est la plus logique mais rien n'empêche d'avoir les deux :

If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then


J'envisage d'utiliser SHIFT de l'évènement KeyUp pour parcourir dans l'ordre inverse les éléments de la saisie.

Pas de problème.Il suffit de tester la constante acShiftMask

Bonjour thev,

Merci pour cette réponse express ! J'essaie de mettre cela en place dans la journée.

Hum... Je découvre la constante acShiftMask, et me dis que, dans les évènements KeyUp, lorsque je détectais la touche Tab, je regardais ensuite si Shift = 0 ou 1, pour savoir s'il fallait aller au contrôle suivant ou précédent, le code était sûrement faux... En effet, Shift peut faire référence à trois touches, et n'est pas un booléen...

Une question secondaire : est-il possible qu'un contrôle puisse "suivre" les dimensions d'une cellule, ou être "associé" à cette cellule ?
Je cherche simplement ici à bien "aligner" les contrôles dans mon formulaire, et le rendre propre esthétiquement.

Encore merci d'avance pour tes lumières!

Une question secondaire : est-il possible qu'un contrôle puisse "suivre" les dimensions d'une cellule, ou être "associé" à cette cellule ?
Tout à fait. Exemple de code ci-dessous:

Sub ajout_ctrl_activex()
    Dim cell1 As Range, cell2 As Range
    Dim ctrl As Object

    Set cell1 = UI.Range("A2"): Set cell2 = UI.Range("B2")
    UI.Unprotect
    Set ctrl = UI.Shapes.AddOLEObject(ClassType:="Forms.ComboBox.1", Left:=cell1.Left, Top:=cell1.Top, Width:=cell1.Width, Height:=cell1.Height)
    ctrl.Name = "cbx_nom"
    Set ctrl = UI.Shapes.AddOLEObject(ClassType:="Forms.TextBox.1", Left:=cell2.Left, Top:=cell2.Top, Width:=cell2.Width, Height:=cell2.Height)
    ctrl.Name = "tbx_nom"
    UI.Protect

End Sub

Bonjour thev,

Merci pour la proposition que j'ai pu adapter (mes contrôles n'étant pas à créer mais à modifier).

Pour conclure, un avis sur la possibilité de basculer d'une cellule à un contrôle (et vice versa) ?

Encore merci par avance.

Bonjour (thev),

J'obtiens une erreur de compilation "variable non définie" lorsque j'essaie de tester la constante acShiftMask.

En fait, VBA Excel ne semble pas la reconnaître (quand je tape son nom en minuscules, il ne convertit pas automatique S et M en majuscules).

Une idée ? Encore merci !

J'obtiens une erreur de compilation "variable non définie" lorsque j'essaie de tester la constante acShiftMask.

Effectivement cette constante n'est valable que pour Access. La solution pour Excel est d'utiliser les valeurs décimales de ces 3 constantes :

acShiftMask = 1 (Touche TAB)
acCtrlMask = 2
(Touche Ctrl)
acAltMask = 4 (
Touche Alt)

C'est ce que je commençais à comprendre à force de balayer les forums, merci thev encore pour cette réponse claire et rapide

Rechercher des sujets similaires à "touche tab controles feuille"