IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E] Appuyer sur la flèche du haut dans un textbox


Sujet :

Macros et VBA Excel

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 106
    Points : 66
    Points
    66
    Par défaut [VBA-E] Appuyer sur la flèche du haut dans un textbox
    Bonjour,

    J'ai deux textbox. Quand j'écris dans TextBox1 et que j'appuie sur Entrée, le texte est coupé et collé dans TextBox2. Si je refais ça une deuxième fois, ça le met à la suite dans TextBox2. Jusque là pas de problème.

    Je voudrais savoir comment faire pour que quand on tape sur la flèche du haut, ça fait apparaitre dans TextBox1, le dernier texte envoyé. Si on appuie deux fois, ça affiche l'avant dernier texte tapé et envoyé.
    Ca peut servir dans le cas où l'utilsateur veut écrire quelque chose qu'il avait déjà écrit. Ca irait plus vite d'appuyer sur la flèche du haut que de réécrire.

    Ca marche aussi dans MSN (version récente, je sais pas s'il faut avoir MSN Plus pour que ça marche), si vous faîtes Ctrl+[Flèche du haut] ça affiche le dernier texte.

    Merci

  2. #2
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    il faut que tu crées une pile.
    en fait, il s'agit d'un tableau dans le quel tu empile des données (d'où son nom).
    il te faut pour ça: une méthode "empiler()" et une méthode "dépiler()"
    Empiler() ajoute a la fin du tableau un element
    Depiler() retourne le dernier element du tableau (et l'enlève de ce dernier)

    Ainsi, a chaque appui sur Entrée, tu ajoutes à ta pile la valeur de textbox1.
    A chaque appui sur la fleche du haut tu dépiles et tu mets le résultat dans textbox1.
    Moi, j'aime pas facebook.

    Musiciens de France

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu mets la propriété "Multiligne" de ton textbox = true et tu peux utiliser la flèche du haut
    C'est une autre méthode... Mais c'est plus simple

  4. #4
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 106
    Points : 66
    Points
    66
    Par défaut
    Tu mets la propriété "Multiligne" de ton textbox = true et tu peux utiliser la flèche du haut
    C'est une autre méthode... Mais c'est plus simple

    C'est pas bête mais en fait quand j'appuie sur entrée et que le texte est collé dans TextBox2, j'efface TextBox1.

    il faut que tu crées une pile.
    en fait, il s'agit d'un tableau dans le quel tu empile des données (d'où son nom).
    il te faut pour ça: une méthode "empiler()" et une méthode "dépiler()"
    Empiler() ajoute a la fin du tableau un element
    Depiler() retourne le dernier element du tableau (et l'enlève de ce dernier)

    Ainsi, a chaque appui sur Entrée, tu ajoutes à ta pile la valeur de textbox1.
    A chaque appui sur la fleche du haut tu dépiles et tu mets le résultat dans textbox1.
    OK, bonne idée, je vais tenter.
    Merci

  5. #5
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    essaie de faire la pile dans un module à part.
    Comme ça tu pourras la réutiliser quand nécessaire. c'est un outil de plus a portée de main.

    de même, essaie de voir si il n'existe pas une source déjà faite en VB(A).
    ça t'inspirera pour la développer. ( )

    -edit- il s'agit du principe LIFO (Last In First Out)
    tu trouveras aussi les FIFO (First In First Out) : ce sont les files
    Moi, j'aime pas facebook.

    Musiciens de France

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    C'est pas bête mais en fait quand j'appuie sur entrée et que le texte est collé dans TextBox2, j'efface TextBox1.
    Oui, et quel est le pb ? Si TextBox1 est vide, pourquoi as-tu besoin de te déplacer dans le texte ?
    J'ai bien compris que je n'avais pas compris Une bédide egsbligazion beut d'être...

  7. #7
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    il veut pouvoir faire comme dans une interface console, tu peux récupérer les dernieres commandes passées...
    Moi, j'aime pas facebook.

    Musiciens de France

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Un test sur le caractère frappé et si c'est flêche haute, on restitue à Textbox1 ce qu'il y a dans testbox2
    Le keycode de ▲ ? Je cherche et je donne dans... 10s
    38 ! (le keycode)
    Dans textbox_keyup, suffit de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if keycode = 38 then Textbox1.text = Textbox2.text
    et comme tu vas vouloir utiliser de nouveau la flêche haute, tu déclares un boolean en public que tu mets à true quand tu rentres dans textbox1 et que tu remets à false dans textbox1_Exit, et enfin, tu modifies la ligne donnée plus haut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if keycode = 38 and not LeBoolean then Textbox1.text = Textbox2.text
    Oh, juste une idée comme ça, pas faite pour les puristes

  9. #9
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    pas tout a fait... Ender, corrige moi si je me trompe.

    en fait:
    1) on entre "machin" dans textbox1 et on presse entrée.
    2) textbox2 contient maintenant "machin" et textbox1 se vide
    3) on entre "truc" dans textbox1 et on presse entrée
    4) textbox2 contient maintenant "machintruc"
    5) si on fait fleche du haut dans textbox1, textbox1 contient "truc".
    6) si on refait fleche haut, il contient "machin"
    Moi, j'aime pas facebook.

    Musiciens de France

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Pour le boolean, j'ai plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private sub textbox_keyup(..... blabla....)
    if keycode = 38 and not LeBoolean then
        Textbox1.text = Textbox2.text
        LeBoolean = true
    endif
    Si tu veux bien...

  11. #11
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 106
    Points : 66
    Points
    66
    Par défaut
    pas tout a fait... Ender, corrige moi si je me trompe.

    en fait:
    1) on entre "machin" dans textbox1 et on presse entrée.
    2) textbox2 contient maintenant "machin" et textbox1 se vide
    3) on entre "truc" dans textbox1 et on presse entrée
    4) textbox2 contient maintenant "machintruc"
    5) si on fait fleche du haut dans textbox1, textbox1 contient "truc".
    6) si on refait fleche haut, il contient "machin"
    Exactement !! A la seule différence que :
    4) textbox2 contient maintenant :
    machin
    truc
    je mets un vbCrLf à chaque fois (TextBox2 est multigne)


    Si tu veux bien...
    Bien sûr que je veux bien
    Mais j'ai regardé deans l'aide de VBA et il n'existe pas d'événement Exit pour les TextBox ?!

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Mais si l'événement Exit existe bien pour un textbox En mode création, deux clics sur Textbox affiche certainement
    Private Sub TextBoxx_Click()
    Regarde dans la liste d'événements en haut et à droite de la page de code, Exit s'y trouve bien.
    Bon, comme je pense que tu connais tout ça, je me pose la question : Il sont où tes textbox ? Dans un form ou dans une feuille de calcul ?
    Dans une feuille de calcul ? Alors tu as raison.
    Tu peux préciser ?
    Si c'est le cas, alors ça ne m'étonne pas que tu n'aies rien trouvé dans MSDN
    A+

  13. #13
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 106
    Points : 66
    Points
    66
    Par défaut
    Au temps pour moi, j'avais mal déclaré Exit
    Mes TextBox sont dans un UserForm.
    J'ai essayé de tester si KeyCode valait 38, mais je ne comprends pas pourquoi quand j'appuie sur ▲, TextBox1 perd le focus et TextBox2 le récupère.

    Sinon, je me demandais si je crée un tableau (20 cases par exemple, comme ça on garderait les 20 derniers envois), et que je n'ai écrit que 5 commandes, que va-t-il se passer si j'appuie 6 fois ou + sur ▲ ?
    Il va y avoir une erreur non ?

  14. #14
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    en créant une pile, tu ajoutes des éléments à ton tableau.
    En VBA, si tu veux définir une pile de maximum 20 éléments, le plus simple est de créer un tableau de 20 éléments, choisir une valeur par défaut dans chaque case: cette valeur signifiera que la case est vide.
    Ensuite, quand tu empiles tu remplace cette valeur par une donnée.
    Quand tu dépiles, tu remets la valeur par défaut.

    Ainsi, si tu as 5 éléments, tu vas appuyer 5 fois sur 'haut'.
    de la 1ere à la 5e fois: tu trouves des données
    la 6e fois tu trouves la valeur par défaut. Alors tu la traites. (retour à la première case, rester sur la 5e, msg erreur... ce que tu veux)
    Moi, j'aime pas facebook.

    Musiciens de France

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    que va-t-il se passer si j'appuie 6 fois ou + sur ▲ ?
    Rien du tout, tu vas simplement rester sur place sur la première ligne de Listbox1 qui contiendra le texte de Listbox2
    mais je ne comprends pas pourquoi quand j'appuie sur ▲, TextBox1 perd le focus et TextBox2 le récupère.
    Ça, c'est beaucoup plus em...dant
    Je regarde

  16. #16
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Repasse-nous le code que tu utilises pour placer le texte saisi dans TextBox1, dans TextBox2, ça nous évitera de rechercher
    Merci

  17. #17
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    Ça, c'est beaucoup plus em...dant
    +1

    ça devrait etre shift+tab qui fait ça...
    Moi, j'aime pas facebook.

    Musiciens de France

  18. #18
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Bon, je viens de retrouver le code.
    Au départ, il ne s'agissait que de pouvoir renseigner TextBox2 lors de la saisie de Textbox1
    Ensuite, tu as voulu pouvoir effacer le dernier caractère saisi. On peut faire ça en identifiant Keycode = 8
    Ensuite, tu veux pouvoir relire TextBox2 dans TextBox1 et réaliser des modifications
    Enfin, tu veux pouvoir te promener dans textbox1 comme chez toi...

    Inconvénient de Keycode : n'a pas la même valeur que Keyascii. Les minuscules ascii (97 à 122) perdent 32 avec keycode et deviennent donc des majuscules (65 à 90)
    Mais ce n'est pas vrai pour les autres caractères. Bref j'ai modifié ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Dim LeBoolean As Boolean
     
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If LeBoolean = True Then
            Cancel = False
        Else
            Cancel = True
    End If
    LeBoolean = False
    End Sub
     
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
                TextBox2.Text = TextBox2.Text & Chr(KeyAscii)
    End Sub
     
    Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
     
        If KeyCode = 8 Then
                TextBox2.Text = Left(TextBox2.Text, Len(TextBox2.Text) - 1)
        ElseIf KeyCode = 38 And Not LeBoolean Then
            TextBox1.Text = TextBox2.Text
            LeBoolean = True
        End If
    End Sub
    Tu vérifies mais la prochaine fois, essaie de définir tes besoins d'un seul coup d'un seul

  19. #19
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Oui, parce que... si tu veux modifier du texte non pas à la fin de la saisie dans textbox1 mais à l'intérieur de cette saisie, tu vas devoir gérer ça différemment. Et là, j'hésite entre deux méthodes (!)
    Merci de nous tenir au courant de tes avancées

  20. #20
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    106
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 106
    Points : 66
    Points
    66
    Par défaut
    Ouskel'n'or, quand tu dis
    Tu vérifies mais la prochaine fois, essaie de définir tes besoins d'un seul coup d'un seul
    tu veux parler d'un de mes précédents messages où je demandais comment effacer un textbox à partir d'un autre ?
    Si c'est le cas (je pense que oui en ayant vu l'évenement KeyPress de ton dernier message), je te remercie d'être aussi professionnel dans ce que tu fais parce que tu n'étais pas obligé de revoir tous mes messages. Donc merci
    Mais, je n'avais pas trouvé de réponse au problème, donc j'ai delesté ce message il y a quelques jours (j'ai juste mis la balise Délestage sans avoir précisé que je contournerai le problème, désolé ) et j'ai modifié mon code pour ne plus avoir ce problème. En gros, j'ai viré mon deuxième TextBox pour ne pas avoir à gérer trop de choses.

    Donc je redéfinis le problème présent (on oublie tout les messages des autres discussions) : (Textbox2 d'aujourd'hui est différent du TextBox2 de l'autre discussion que j'ai delesté)

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)     'ligne de commande
     
        If KeyCode = vbKeyReturn Then                           'touche Entrée appuyée
        TextBox2 = TextBox2 + TextBox1 + vbCrLf
        TextBox1 = ""
        End If
     
    End Sub
    Si l'utilisateur fait une faute, c'est pas grave, tant qu'il n'a pas appuyé sur Entrée, il peut effacer à volonté TextBox1
    Quand il appuie sur Entrée, il doit pouvoir récupérer l'info en appuyant sur ▲.

    ça devrait etre shift+tab qui fait ça...
    C'est-a-dire ? Il faut changer une propriété de TextBox1 ?

    Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [VBA-E] Pb sur gestion des erreurs
    Par micoscas dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 08/03/2005, 17h08
  2. Réponses: 12
    Dernier message: 14/02/2005, 10h57
  3. Changer de texture en appuyant sur une touche
    Par Hyoga dans le forum OpenGL
    Réponses: 1
    Dernier message: 29/01/2005, 23h36
  4. Réponses: 15
    Dernier message: 28/01/2005, 04h46
  5. Comment Appuyer sur le bouton d'une page web...?
    Par Mayti4 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 23/01/2005, 14h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo