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 :

Bête problème de TextBox et SetFocus


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 118
    Par défaut Bête problème de TextBox et SetFocus
    Bonjour à tous,

    Je planche depuis plus de 2 heures sur un bête problème...

    Je voudrais bien faire une Userform avec 2 TextBox

    Dans la première, on introduit un nombre (par exemple 5)

    Dans la deuxième, on rentre les 5 valeurs....

    Donc, il faut que le curseur revienne chaque fois dans cette 2ème TextBox...

    D'où l'utilisation de la commande SetFocus...

    Comme je le disais en commençant, je planche là-dessus depuis un bout de temps, et je commence à devenir fou... J'ai beau retourner le problème dans tous les sens, le focus revient toujours dans la 1ère textbox...

    Est-ce que quelqu'un pourrait m'aider ?

    Merci d'avance...

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Si tu dois collecter plusieurs valeurs à partir du même TextBox (TextBox2), il te suffit d'empêcher l'utilisateur de quitter le TextBox avec "Cancel = True". Un petit exemple :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Dim Tbl() 'Pour le test, ici déclaré public
     
    Private Sub CommandButton1_Click()
     
        Dim J As Integer
        Dim Total As Double
     
        'pour le test, indique le résultat du total des valeurs entrées
        For J = 1 To UBound(Tbl)
     
            Total = Total + Tbl(J)
     
        Next J
     
        MsgBox Total
     
    End Sub
     
    Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
        Static I As Integer 'garde en mémoire durant le temps d'affichage de la Form
     
        I = I + 1
     
        'annule tant que le compte n'est pas bon ou remet à 0 sitôt celui-ci atteint
        'stocke les différentes valeurs dans le tableau, vide le TextBox et empêche la sortie
        If I < TextBox1.Value Then
     
            Tbl(I) = TextBox2.Text
     
            TextBox2.Text = ""
     
            Cancel = True
     
        Else
     
            I = 0
     
        End If
     
    End Sub
     
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
        'défini la dimension du tableau
        Erase Tbl
     
        ReDim Tbl(1 To TextBox1.Text)
     
    End Sub
    Hervé.

  3. #3
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 118
    Par défaut
    Bonjour Hervé,

    Et déjà 1000 merci pour le temps et l'aide apportées...
    Malheureusement, ça ne correspond pas tout à fait à ce que j'aurais voulu...
    Je joins en annexe le fichier excel, ce sera plus facile pour comprendre, à mon avis

    Citation Envoyé par Theze Voir le message
    Bonjour,

    Si tu dois collecter plusieurs valeurs à partir du même TextBox (TextBox2), il te suffit d'empêcher l'utilisateur de quitter le TextBox avec "Cancel = True". Un petit exemple :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Dim Tbl() 'Pour le test, ici déclaré public
     
    Private Sub CommandButton1_Click()
     
        Dim J As Integer
        Dim Total As Double
     
        'pour le test, indique le résultat du total des valeurs entrées
        For J = 1 To UBound(Tbl)
     
            Total = Total + Tbl(J)
     
        Next J
     
        MsgBox Total
     
    End Sub
     
    Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
        Static I As Integer 'garde en mémoire durant le temps d'affichage de la Form
     
        I = I + 1
     
        'annule tant que le compte n'est pas bon ou remet à 0 sitôt celui-ci atteint
        'stocke les différentes valeurs dans le tableau, vide le TextBox et empêche la sortie
        If I < TextBox1.Value Then
     
            Tbl(I) = TextBox2.Text
     
            TextBox2.Text = ""
     
            Cancel = True
     
        Else
     
            I = 0
     
        End If
     
    End Sub
     
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
        'défini la dimension du tableau
        Erase Tbl
     
        ReDim Tbl(1 To TextBox1.Text)
     
    End Sub
    Hervé.
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Re,

    Hé bien mon exemple correspond assez bien à ce que tu souhaites, à moins que je n'ai rien compris :o( :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Dim nbfin(10), nb_ent As Integer, i As Integer
     
    Private Sub TextBox1_AfterUpdate()
     
        nb_ent = TextBox1.Value
     
        Label1.Caption = "valeur n°1"
     
    End Sub
     
     
    'à la place de "TextBox2_AfterUpdate"
    Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
     
        i = i + 1
        If i = 11 Then
     
            MsgBox "Nombre de valeurs manimal atteint !"
            Exit Sub
     
        End If
     
        If i <= nb_ent Then
     
            Label1.Caption = "valeur n°" & i
     
            nbfin(i) = TextBox2.Value
     
            TextBox2.Value = ""
            Cancel = True
     
        End If
     
    End Sub
    Hervé.

  5. #5
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 118
    Par défaut
    Oui, c'est presque ça... Il reste un p'tit bug, mais je devrais pouvoir le trouver tout seul comme un grand...

    Encore 1000 merci...

    Citation Envoyé par Theze Voir le message
    Re,

    Hé bien mon exemple correspond assez bien à ce que tu souhaites, à moins que je n'ai rien compris :o( :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Dim nbfin(10), nb_ent As Integer, i As Integer
     
    Private Sub TextBox1_AfterUpdate()
     
        nb_ent = TextBox1.Value
     
        Label1.Caption = "valeur n°1"
     
    End Sub
     
     
    'à la place de "TextBox2_AfterUpdate"
    Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
     
        i = i + 1
        If i = 11 Then
     
            MsgBox "Nombre de valeurs manimal atteint !"
            Exit Sub
     
        End If
     
        If i <= nb_ent Then
     
            Label1.Caption = "valeur n°" & i
     
            nbfin(i) = TextBox2.Value
     
            TextBox2.Value = ""
            Cancel = True
     
        End If
     
    End Sub
    Hervé.

Discussions similaires

  1. Problème onChange TEXTBOX
    Par actarus108 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/05/2007, 21h15
  2. Problème avec Textbox
    Par Appwal dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/04/2007, 16h52
  3. Problème avec TextBox
    Par @yoyo dans le forum Windows Forms
    Réponses: 6
    Dernier message: 15/02/2007, 16h47
  4. Réponses: 20
    Dernier message: 04/01/2007, 11h43
  5. [VB6] Problème de textbox multiligne qui génére une erreur
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/02/2006, 16h21

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