Enter automatique après appui sur touche

Bonjour à tous,

Je suis novice dans le langage VBA et j'ai besoin d'un peu d'aide, merci à tout ceux qui m'accorderont un peu de leur temps !

Je pense que mon problème est simple mais il nécessite des connaissances que je n'ai pas encore.

J'ai plus de 1000 cellules à remplir dans ma feuille Excel, uniquement en utilisant les touches "retour arrière", "1", "2", "3", "4", "5", "6", "7" et "8") et je souhaiterais gagner du temps en évitant d'appuyer sur ENTER à chaque fois pour valider et passer à la cellule du dessous.

Autrement dit, j'aimerais qu'en appuyant sur la touche "1" dans une cellule, il m'affiche le 1 et passe immédiatement à la cellule du dessous, sans attendre de validation par la touche "ENTER" de ma part, etc. (en appuyant sur "retour arrière", il vide la cellule et passe automatiquement en dessous, en appuyant sur la touche "2", il m'affiche le 2 et passe à la cellule du dessous,...).

Je pourrai ainsi taper une succession de chiffres (1-3-2-6-...) qui auront chacun leur propre cellule dans une colonne.

Que devrais-je mettre dans le Visual Basic d'Excel pour obtenir un tel résultat ?

J'ai tâtonné avec Private Sub Worksheet_Change(ByVal Target As Range)

Un grand merci pour votre aide.

Bonsoir,

la surveillance événementielle "Change" n'est lancée qu'au "quitter" de la cellule, du coup il faut soit une flèche de direction, soit la touche entrée, soit un clic de souris ailleurs...

Il faut "reprogrammer" les touches 1,2,3,4,5,6 etc afin que leur utilisation soit contrôlée non plus par Excel et les fonctions "de bases" mais par du code VBA.

C'est le principe que j'utilise dans mes jeux excel.

Exemple de code pour supprimer la "réaction" naturelle des touches :

    Application.OnKey "s", ""
    Application.OnKey "x", ""
    Application.OnKey "w", ""
    Application.OnKey "c", ""
    Application.OnKey "q", ""
    Application.OnKey "d", ""
    Application.OnKey "v", ""
    Application.OnKey "<", ""

et le code à ne pas oublier pour les réactiver :

    Application.OnKey "s"
    Application.OnKey "x"
    Application.OnKey "w"
    Application.OnKey "c"
    Application.OnKey "q"
    Application.OnKey "d"
    Application.OnKey "v"
    Application.OnKey "<"

Mais après il faut créer une boucle de surveillance des touches ainsi désactivées pour lancer le code VBA approprié :

        ' attente action clavier
        Pause = Timer
        Délais = Délais_Jeu
        Do
            ' on rend la main à l'application pour détecter les appuis sur les touches du clavier
            DoEvents

            ' si le joueur 1 est encore en jeu
            If P_J1 = False Then
            ' gestion déplacement joueur 1
                If GetAsyncKeyState(37) Then Call Action_1
                If GetAsyncKeyState(39) Then Call Action_2
                If GetAsyncKeyState(38) Then Call Action_3
                If GetAsyncKeyState(40) Then Call Action_4
            End If
            ' arrêt volontaire de la partie à tous moments
            If GetAsyncKeyState(35) Then Call Init_Fin_Jeu: End

        ' on boucle pour que le jeu continue
        Loop While Pause + Délais > Timer

Ici 37, 38, 39 et 40 correspondent aux flèches de direction et 35 à la touche fin

C'est un peu en vrac mais il me semble que cela va pouvoir vous guider.

@ bientôt

LouReeD

Bonjour LouReeD,

Merci beaucoup pour ta réponse. Cela m'éclaire effectivement.

la surveillance événementielle "Change" n'est lancée qu'au "quitter" de la cellule, du coup il faut soit une flèche de direction, soit la touche entrée, soit un clic de souris ailleurs...

Je l'ignorais, je pensais qu'au "quitter" de la cellule, on utilisait plutôt "Selection_Change" (Exemple, j'utilise ce petit code dans une feuille Excel :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Calculate
  Beep
End Sub

Il me permet de réactualiser ma feuille dès que je change de cellule et il m'informe de ce changement par un bip sonore.

Il faut "reprogrammer" les touches 1,2,3,4,5,6 etc afin que leur utilisation soit contrôlée non plus par Excel et les fonctions "de bases" mais par du code VBA.

Je comprends et l'idée est excellente, je t'en remercie. Je vais essayer ça, en étudiant ton exemple.

Merci d'avoir pris du temps pour moi !

Attention !

les surveillances événementielle peuvent se cumuler !

Un changement de sélection sans saisie de donnée dans la cellule engendre un SelectionChange.

Mais dès qu'on "entre" dans la cellule, alors il y a le "Change" PUIS le SelectionChange.

Par contre ce qu'il vous faut c'est une surveillance de Change au fil de la saisie, hors les surveillances ne permettent pas de le faire, dès qu'une cellule est en mode de saisie, "tout s'arrête"...

Attention aussi au GetAsyncKeyState qui réclame de la déclaration "en début de code", je vous renvoie donc sur mes "jeux" pour comprendre l'ensemble du truc.

@ bientôt

LouReeD

Bonsoir Lionheart, LouReeD,

En retour simple fichier à tester pour ton besoin.

Voir notes sur la 1ière page. Deux macros, une sur l'USF, l'autre en module.

Bons tests, bonne continuation.

Bonjour X Cellus, LouReeD,

En retour simple fichier à tester pour ton besoin.

Voir notes sur la 1ière page. Deux macros, une sur l'USF, l'autre en module.

J'ai bien regardé le fichier joint ainsi que l'algorithme, merci X Cellus. Cela m'aide à mieux comprendre le codage en VBA.

Par contre ce qu'il vous faut c'est une surveillance de Change au fil de la saisis, hors les surveillances ne permettent pas de le faire, dès qu'une cellule est en mode de saisie, "tout s'arrête"...

Effectivement, c'est immédiatement après le premier appui de touche, la saisie du premier chiffre, que l'action de validation et passage à la cellule suivante doit se faire. Et je comprends que mon problème n'est pas si facile : je n'avais pas réalisé que tout s'arrête en mode "saisie".

Je vais continuer à réfléchir au problème en étudiant vos deux codes.

Merci beaucoup à vous deux !

Bonsoir,

ci joint un fichier :

31enterauto-lrd.xlsm (22.97 Ko)

Il a deux boutons, un "Active" qui met en marche la détection de touche, mais cette dernière fonctionne avec les chiffres du pavé alphanumérique, le retour chariot est remplacé par le "9" c'est à dire le "ç".

Un bouton pour revenir par défaut avec les touches du clavier qui inscriront leur valeur au sein des cellules "normalement".

Il y a deux "Temporisations" à régler afin de correspondre à la vitesse de saisie voulue, je les ai réglés de façon à ce que ce soit fluide sans pour autant aller trop vite.

Le principe : Avec Application.OnKey on désactive l'action des touches dont on veut contrôler le fonctionnement en leur attribuant une procédure vide, c'est à dire un double guillemet "".

Ensuite avec la fonction GetAsuncKeyState on récupère le numéro de la touche appuyée, et s'il fait partie de la série surveillée alors on lance la macro "Suivant" avec en paramètre le numéro à inscrire dans la cellule correspondant.

Dans cette Sub, on test si on a appuyé sur le "9", si oui on efface la donnée de la cellule, si non on écrit le chiffre voulu et on passe à la cellule du dessous.

On fait un Exit do pour sortir de la boucle temporisée d'attente de touche est on fait un Sleep avant de retourner surveiller les touches. C'est le Sleep en milliseconde et la tempo qu'il faut régler.

A vous d'essayer.

Le code fonctionne à partir de la cellule active, mais ceci peut très facilement être modifié.

@ bientôt

LouReeD

A nouveau,

Version modifié du fichier permettant l'effacement de valeurs déjà présentes et le déplacement vers le bas.

Ainsi que la sélection au départ ou en cours d'une cellule de la feuille pour saisir les chiffres.

Bons tests, bonne continuation.

Merci beaucoup LouReeD et X Cellus, pour le temps que vous m'avez consacré et pour votre aide : vos fichiers et vos codes répondent tout à fait à la problématique !

Bonne soirée à vous deux.

Lionheart

Rechercher des sujets similaires à "enter automatique appui touche"