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 :

Focus un textbox dans une frame [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut Focus un textbox dans une frame
    Bonjour,

    J'ai un soucis de focus/tabulation:

    J'ai un userform dans lequel se trouve une frame. Je voudrais qu'à la sortie d'un textbox qui se trouve hors de la frame (textbox1), le focus passe à mon textbox2 qui se trouve dans la frame.

    j'ai essayé ordre de tabulation mais ca ne marche pas. il tabule les éléments hors de la frame tant que je ne clique pas sur la frame. J'ai essayé de faire un setfocus en fin de procédure exit de mon textbox1 pour forcer le focus mais j'ai un message d'erreur appel inattendu à un accès méthode ou propriété

    Auriez-vous svp un idée du comment faire?

    merci d'avance
    Bonne journée

  2. #2
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    En mode création, sous VBE, clic droit dans le fond de l'userform/Ordre de tabulation
    Remonter ou descendre le frame juste après le textbox concerné.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    l'ordre des tabulation ce fait au niveau du formulaire!

    label1,label2, texte1, texte2 etc...
    les label nom pas d'ordre de tabulation ! label1.AutoTab=Falseen revanche le contrôles Action et de saisi oui ce qui fait que tu quitte la fram!

    soit tu inhibe les tabulation pour les groupes non concernés par la fram TextBox1.AutoTab = Falseou tu fixe la tabulaton a


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 9 Then Me.TextBox3.SetFocus '[Tabulation]
    End Sub
     
     
    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = 13 Then Me.TextBox2.SetFocus '[Enter]
    End Sub
    Dernière modification par Invité ; 15/05/2017 à 10h47.

  4. #4
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    Bonjour,

    d'abord merci pour vos réponses
    hélas j'ai déjà essayé ceci mais ca ne fonctionne pas...

    J'ai donc sorti mon textbox de la frame pour voir si cela fonctionne via l'ordre de tabulation normal. Et la encore ca ne fonctionne pas... étrange....

    J'ai ajouté un .setfocus en fin de procédure de l'évenement exit du textbox1
    en suivant en mode pas à pas, mon textbox2 possède bien le focus une fois le .setfocus fait! et quand la procédure se termine (end sub), le focus rechange et passe à un autre objet....

    je ne comprend pas...
    est ce que le code suivant peut influencer le focus?

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Private Sub Txt_P_AfterUpdate()
    Dim C As Range
    Dim DL&, n%
    'si point en double, passer la recherche pour le 15001
    With ThisWorkbook.Worksheets("Base")
        DL = .Cells(.Rows.Count, 1).End(xlUp).Row
        If Me.Txt_P.Value = "15001" Then
            If MsgBox("S'agit il du point de PETRI 1?", vbYesNo) = vbNo Then
                Set C = .Range("A1:A" & DL).Find(Txt_P.Value, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
                GoTo Pass
            End If
        End If
        Set C = .Range("A1:A" & DL).Find(Txt_P.Value, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
    Pass:
        If C Is Nothing Then MsgBox "Le numéro de point n'a pas été trouvé!":  Set C = Nothing: Me.Txt_P.Value = ""
        If Not C Is Nothing Then
            n = C.Row
            Me.Txt_Nom.Value = .Cells(n, 3).Value
            Me.Txt_CAS.Value = .Cells(n, 4).Value
            Select Case .Cells(n, 4).Value
                Case "Z"
                    Affiche 'affiche les objets 
                    Me.Cbo_VISA1.Value = VISA
                    Me.Txt_CHAINE1 = .Cells(n, 2)
                    Me.Txt_TYPE1 = .Cells(n, 10)
                    Me.Txt_SAL301 = .Cells(n, 5)
                    Me.Txt_SAC301 = .Cells(n, 6)
                    Me.Cbo_VISA1.Value = VISA
                    If .Cells(n, 10).Value <> "COMBINAISON" And InStr(1, .Cells(n, 10).Text, "GANTS", vbcomparetext) = 0 Then
                        Me.Txt_GANT1.Value = "": Me.Txt_GANT1.Enabled = False: Me.Txt_GANT1.Visible = False: Label164.Visible = False
                    Else
                        Me.Txt_GANT1.Enabled = True: Me.Txt_GANT1.Visible = True: Label164.Visible = True
                    End If
                    Me.Txt_CLASSE1.Value = .Cells(n, 9)
                    Me.Txt_BAT1 = .Cells(n, 11)
                Case "HZ": MsgBox "Ce point est un point Hors Z.A.C": Me.Txt_P.Value = "": Exit Sub
                Case "E": MsgBox "Ce point est un point EAU": Me.Txt_P.Value = "": Exit Sub
            End Select
            'si on ajoute lieu
            If .Cells(n, 13).Value = "N" Then
                Me.Txt_LIEU1.Value = "": Me.Txt_LIEU1.Enabled = False: Me.Txt_LIEU1.Visible = False: Label163.Visible = False
            Else
                Me.Txt_LIEU1.Enabled = True: Me.Txt_LIEU1.Visible = True: Label163.Visible = True
            End If
            'si on ajoute air
            If .Cells(n, 10).Value <> "IMPACTION D'AIR" Then
                Me.Txt_AIR1.Value = "": Me.Txt_AIR1.Enabled = False: Me.Txt_AIR1.Visible = False: Label155.Visible = False
            Else
                Me.Txt_AIR1.Enabled = True: Me.Txt_AIR1.Visible = True: Label155.Visible = True
            End If
            'si on debloque les seuils
            If .Cells(n, 5).Value = "" And .Cells(n, 6).Value = "" Then
                Me.Txt_SAL301.Enabled = True
                Me.Txt_SAC301.Enabled = True
            End If
            Set C = Nothing
        End If
    End With
    Me.Txt_30B1.SetFocus
    End Sub
    J'ai aussi testé avec keyascii or la condition du n° 13 n'est pas remplie... je ne sais pas non plus pourquoi d'ailleurs il ne reconnait pas enter


    merci de votre aide

  5. #5
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    @dysorthographie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Txt_P_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = 13 Then
    MsgBox "yes"
    Me.Txt_30B1.Visible = True
    Me.Txt_30B1.SetFocus '[Enter]
    Else
    MsgBox "no"
    End If
    End Sub
    J'ai bien le no qui apparait pour chaque touche mais lorsque je sors du textbox, le yes n'apparait quant à lui pas du tout....

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Impossible de te répondre avec assurance sans connaître la valeur de chacune des deux propriétés suivantes de la textbox que tu veux quitter en frappant la touche Enter :
    - propriété multiline
    - propriété enterkeybehavior

    Si les deux sont à true, ma foi ... tu passes à la ligne (en obéissance à ton voeu tel que défini par la seconde de ces deux propriétés)

  7. #7
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    MsgBox "[Exit]"
    End Sub
     
     
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 9 Then MsgBox "Touche [Tabulation]"
    If KeyCode = 13 Then MsgBox "Touche [Enter]"
    End Sub

  8. #8
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    Bonjour
    Impossible de te répondre avec assurance sans connaître la valeur de chacune des deux propriétés suivantes de la textbox que tu veux quitter en frappant la touche Enter :
    - propriété multiline
    - propriété enterkeybehavior

    Si les deux sont à true, ma foi ... tu passes à la ligne (en obéissance à ton voeu tel que défini par la seconde de ces deux propriétés)
    Les deux propriétés sont à false


    Citation Envoyé par dysorthographie Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    MsgBox "[Exit]"
    End Sub
     
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 9 Then MsgBox "Touche [Tabulation]"
    If KeyCode = 13 Then MsgBox "Touche [Enter]"
    End Sub
    Merci beaucoup Rdurupt!
    Ca fonctionne en adaptant ton code mais part contre si tu as l'explication du pourquoi du comment la tabulation ne se fait pas dans le bon ordre.

    j'ai essayé de comprendre ce que tu m'expliquais plus haut mais je suis pas sur d'avoir bien compris le message.


    merci à tous pour votre aide

  9. #9
    Invité
    Invité(e)
    Par défaut
    la tabulation ce fait obligatoirement dans l'ordre de me.TextBox1.TabIndex si tu modifies le tableIndex d'un contrôle vb va recalculer toutes les tabulations!

    mais ça ne arrête pas là! les tabulations ce font sur le formulaire dans entier en 3D? les contrôle de premiers niveau Me.textBox1; me.ComendButon1; me.Frame1; me.fram1.Textbo2!

    il faut redéfinir les tabulations même de contrôle qui ne prennent pas de focus Fame1.TabIndex =0 ;Fame1.TextBox1.TabIndex=1

    note que les tabulations ne tourne pas en boucle dans la frame mais elle tourne en boucle dans le UserForm!

    en me relisant je ne suis pas sur d'être compréhensible tu me diras!

  10. #10
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    Bonjour

    Si, c'est parfait je comprends mieux maintenant la subtilité

    Merci beaucoup en tout cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Conserver Focus d'un textbox contenu dans une Frame
    Par stdonat dans le forum Excel
    Réponses: 10
    Dernier message: 22/05/2016, 15h14
  2. [flash] ouvrir une page dans une frame différente
    Par viena dans le forum Intégration
    Réponses: 6
    Dernier message: 01/08/2007, 16h54
  3. [VB6] Scrollbar dans une frame avec des textbox
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 44
    Dernier message: 01/03/2006, 09h16
  4. Réponses: 9
    Dernier message: 17/10/2005, 11h44
  5. [servlet][JSP]forwarder dans une frame
    Par deldin dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/06/2004, 19h03

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