[VBA] Navigation forcée d'une cellule à une autre dans une plage ?

Bonsoir,

Malgré le parcours de sujets du forum, je n'ai pas trouvé d'indication pouvant m'aider. Je me permets donc de solliciter la communauté

Petite question faisabilité / indice pour obliger Excel à avoir une façon de naviguer particulière sur une plage de donnée :

Contexte :

La plage de donnée, de x lignes et 3 colonnes, est constituée de cellules ouvertes à la saisie ou non (propriété Locked à False, feuille en mode protection).

En cible, ce tableau sera généré automatiquement depuis un référentiel où l'on pourra indiquer pour quelle ligne quelle cellule de colonne est saisissable (il n'y a qu'une cellule saisissable par ligne possible)

Objectif :

Après avoir saisie une valeur dans la première cellule ouverte à la saisie, l'utilisateur appuie sur la flèche BAS et souhaite être positionné automatiquement sur la prochaine cellule ouverte à la saisie.

Cette nouvelle cellule n'est pas forcément la cellule juste en dessous sur la ligne suivante. Ce peut être la cellule de la colonne suivante ou la dernière par exemple.

Problématique :

Lorsqu'on appuie sur la flèche BAS après avoir saisie une donnée, Excel se déplace bien vers la prochaine cellule non protégée, mais de la colonne en cours. Une fois au bout, il passe à la colonne qui suit, etc.

Le bon comportement attendu serait celui de la touche TAB ou ENTREE, j'ai l'impression.

Vous allez me dire "bah n'utilises pas les flèches" Certes oui, mais ce n'est pas ce qui est souhaité (cherchez pas à comprendre... et en même temps, c'est un exercice intéressant à résoudre pour mon faible niveau)

Initialement, je pensais modifier le comporte via les options d'Excel (options avancées où on peut indiquer le sens). Mais, hormis le fait que ce n'est pas concluant (je ne comprends pas pourquoi), je veux que ce comportement ne s'applique qu'à une feuille de calcul d'un classeur.

J'imagine qu'il faut jouer avec la gestion des événements d'Excel, intercepter l'activation de la flèche BAS et forcer d'une manière ou d'une autre l'activation de la bonne cellule non protégée... mais je ne vois rien de tel dans les évènements disponibles.

Si ce n'est une obscure méthode OnKey ?

Je vous joins un fichier qui simule le contexte avec le comportement par défaut d'Excel qui ne me convient pas.

J'espère avoir été clair et vous remercie par avance de me confirmer que l'on peut "détourner" le comportement d'Excel de cette manière et de quelques pistes / illustrations pour y arriver le cas échéant

En attendant, je continue mes recherches

La flèche a DROITE devrait marcher

Yves

Indeed... mais comme je l'indiquais, je cherche (dois ) à simuler cela avec la flèche BAS...

MDR

Bonjour,

Les flèches BAS et GAUCHE te permette de monter dans le tableau et les flèches HAUT et DROITE de descendre dans le tableau et ces dernières donnent le même comportement que la touche TAB. Si tu cherches à modifier le principe de comportement, il te faut passer par macro événementielle mais ça va donner une petite usine à gaz pour pas grand chose !

Bonjour,

bizarre comme exercice oui.

Sous forme de texte donc que tu fasses ton travail

Tu pourrais te servir de l'événement Worksheet_SelectionChange.

Tu déclare au début une variable Static memoSel as range qui servira à mémoriser la dernière sélection.

Si memoSel = nothing tu quittes

Pour Target :

si plusieurs cellules sélectionnées tu quittes

si pas dans la plage surveillée tu quittes

sinon tu compares les lignes de memoSel et de Target, si diff=1 alors tu es dans le cas où il faut que tu forces la colonne

Dans tous les cas tu mémorises target dans memoSel avant de quitter

Comme événement utilisable tu as également OnKey, à voir comment l'utiliser dans ton contexte et ce que tu préfères

eric

MDR

Je sais que la demande peut paraître stupide dans l'absolu, et a priori peu courante, mes excuses...

Vous n'avez jamais eu besoin de détourner les évènements claviers pour x raisons ?

Bonjour,

(...)

Si tu cherches à modifier le principe de comportement, il te faut passer par macro événementielle mais ça va donner une petite usine à gaz pour pas grand chose !

Je suis d'accord pour "le pas grand chose", mais bon, c'est ce que je cherche à obtenir...

Merci d'avoir pris le temps de répondre !

Bonjour,

bizarre comme exercice oui.

Sous forme de texte donc que tu fasses ton travail

Bizarre, je sais

Merci eriic pour ce retour et d'avoir pris le temps d'y réfléchir !

Tu pourrais te servir de l'événement Worksheet_SelectionChange.

Tu déclare au début une variable Static memoSel as range qui servira à mémoriser la dernière sélection.

Si memoSel = nothing tu quittes

Pour Target :

si plusieurs cellules sélectionnées tu quittes

si pas dans la plage surveillée tu quittes

sinon tu compares les lignes de memoSel et de Target, si diff=1 alors tu es dans le cas où il faut que tu forces la colonne

Dans tous les cas tu mémorises target dans memoSel avant de quitter

OK, merci... je vais creuser ça.

Quand je suis dans le cas du forçage, c'est là que je dois trouver le moyen d'identifier la prochaine cellule ouverte à la saisie (normalement sur la ligne memoSel + 1) et elle devient Target ?

Comme événement utilisable tu as également OnKey, à voir comment l'utiliser dans ton contexte et ce que tu préfères

C'est l'option que j'avais identifiée initialement, mais je n'ai pas encore regarder en détail son fonctionnement et comment l'exploiter.

et elle devient Target ?

Quand tu ne connais pas, regarde l'aide. Ici sur SelectionChange :

Target Obligatoire Range Nouvelle plage sélectionnée.

Rechercher des sujets similaires à "vba navigation forcee plage"