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 :

Setfocus sur un frame


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Retraité actif passionné
    Inscrit en
    Janvier 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité actif passionné

    Informations forums :
    Inscription : Janvier 2011
    Messages : 78
    Par défaut Setfocus sur un frame
    Bonjour,

    Dans un Usf j'ai entre autre un Multipage composé de 4 pages. Je veux après la saisie d'un Txt bien précis situé hors du multipage envoyer le focus sur un txt présent dans un frame (tabindex =0) de la page 1. Le code ci-dessous génère l'erreur :
    "Appel inattendu à un accès méthode ou propriété". Une idée ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub CbxFtFini_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
        If CbxFtFini.Text = "" Then
            MsgBox "veuillez saisir le format fini"
            Cancel = True
        Else
            MlpDétail.Visible = True
            LabInfo.Visible = False
            MlpDétail.Value = 1
            FrmLiArticle.SetFocus
        End If
     
    End Sub
    Merci
    Cordialement
    Daniel

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Bonjour,

    Ton Txt et ton Multipage appartiennent-ils au même userform?

    Essaie en tout cas de désigner plus explicitement des objets (genre Thisworkbook.Usf.Frame...), ça ne coûte pas grand chose et ça permet d'éviter les ambigüités.

  3. #3
    Membre confirmé
    Homme Profil pro
    Retraité actif passionné
    Inscrit en
    Janvier 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité actif passionné

    Informations forums :
    Inscription : Janvier 2011
    Messages : 78
    Par défaut Structure
    Bonjour,

    un seul usf ouvert composé de :
    n Textbox je demande à l'exit du dernier de rendre visible le multipage

    multipage de 4 pages dont page 1 composée de
    1frame contenant
    textbox sur lequel je devrais arriver (tabindex=0)

    Je prends bonne note de ton conseil quant à être plus explicite dans à la désignation des objets, merci.

    Cordialement
    Daniel

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 207
    Par défaut
    Bonjour,

    Je n'ai encore jamais utilisé de multipage (donc je ne connais pas les propriétés et méthodes) mais si tu veux donner le focus au frame situé sur la page 1 de ton multipage, ne faudrait-il pas le désigner par quelque chose dans ce goût-là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MlpDétail.Item(1).FrmLiArticle.SetFocus

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Le souci est que la méthode employée fait "bégayer" les évènements, il boucle sur ton exit et se perd dans la focalisation. Pour valider l'Exit, tu envoies le focus à un autre contrôle forcément.. qui ne peut être le frame invisible mais déclenche la chaîne native des passage de focus etc....

    le plus simple est de procéder basiquement :

    • Tu mets dans l'ordre de tabulation de l'onglet voulu (Affichage / ordre de tabulation) ton frame en haut de la pile.
    • Dans l'ordre de tabulation de ton frame tu mets le contrôle visé (qui lui appartient) en haut de la pile.


    Du coup, le fait rendre ton multipage visible et de rendre actif la page cible qui ne doit pas être celle par défaut placera le focus sur le contrôle choisi du frame.


    sinon, je rejoins Sclarckone sur ta syntaxe, préfixer des noms c'est bien, mais tu nous parle de textBox avec un objet nommé : CbxFtFini qui ferait plus penser à un combobox
    cordialement,

    Didier

  6. #6
    Membre confirmé
    Homme Profil pro
    Retraité actif passionné
    Inscrit en
    Janvier 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité actif passionné

    Informations forums :
    Inscription : Janvier 2011
    Messages : 78
    Par défaut
    Bonjour Didier,

    Merci pour cette claire explication.
    J'avais commencé par gérer les tabulations effectivement comme tu l'expliques très bien, mais comme ça ne fonctionnait pas j'ai essayé de forcer le destin. Je viens de refaire un essai en vérifiant que dans mon Usf, cbxftfini et Mlpdétail étaient bien les derniers de la pile dans tabindex (par menu affichage, puis par code Tabindex n'apparaissant pas dans la feuille propriétés du Mlp)

    J'ai conservé l'exit du dernier combo en le corrigeant comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub CbxFtFini_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
        If vPourDevis = False Then Exit Sub 'évite le contrôle de saisie quand Quitter a été activé où vpourdevis =False
     
        If CbxFtFini.Text = "" Then
            MsgBox "veuillez saisir le format fini"
            Cancel = True
        Else
            MlpDétail.Visible = True
            LabInfo.Visible = False
        End If
     
    End Sub
    puis pour aller sur ma page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub MlpDétail_Enter()
     
    MlpDétail.Value = 1
     
    End Sub
    La tabulation dans cette page commence par mon frame
    et dans ce frame elle commence par le textbox souhaité.

    Cette correction ne change rien à mon pb le focus vient se replacer sur le tabindex 0 de mon Usf.

    En fait ça ne fonctionne qu'en laissant Mlpdétail visible tout le temps ce qui me contrarie fortement au plan de l'ergonomie.
    Donc si je comprends bien, la propriété visible ne s'exécute qu'après être sorti du exit et après l'incrémentation du tabindex de l'Usf.
    Cordialement
    Daniel

  7. #7
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonsoir,

    Vois en PJ un fichier (en xls mais testé sous 2010) exemple qui n'apporte rien de plus que mon autre post, mais permet de concrétiser.

    Par défaut le USF s'initialise avec le multipage invisible en page 2 (d'index 1 donc) et le frame est en page 1.

    le code est concis, vois les tabulations dans le menu cité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    MlpDétail.Visible = True
    MlpDétail.Value = 0
    End Sub
    Si OK chez toi aussi, ça ne veut pas dire que tu ne rencontres pas de problème, chaque fichier est différent, mais essaies de reconstruire une maquette à ta sauce sur ce principe..

    cordialement,

    Didier
    Fichiers attachés Fichiers attachés

  8. #8
    Membre confirmé
    Homme Profil pro
    Retraité actif passionné
    Inscrit en
    Janvier 2011
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité actif passionné

    Informations forums :
    Inscription : Janvier 2011
    Messages : 78
    Par défaut Trop fort !
    Bonsoir,

    C'est tout à fait ça qu'il me faudrait, mais dans mon appli je n'arrive pas à "quitter" l'Usf sans la souris alors que dans ton exemple le seul fait de rendre visible le mlp saute le txt2 qui suit txt1 dans le tabindex !

    La nuit apportera peut-être d'autres lumières...

    Cordialement
    Daniel

Discussions similaires

  1. HTML déplacer l'écran sur 1 frame a louverture de la page
    Par Pyro57 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 19/09/2005, 09h07
  2. SetFOcus sur un contrôle d'une autre feuille d'un multipage
    Par MacGeol dans le forum VB 6 et antérieur
    Réponses: 29
    Dernier message: 07/09/2005, 09h37
  3. [Formulaires] Résultat sur autres frames
    Par -DeN- dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 29/08/2005, 11h33
  4. [VB6] SetFocus sur une MSHFlexGrid
    Par jlvalentin dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/01/2005, 15h22
  5. [débutant] setfocus sur un TextField
    Par k-reen dans le forum Composants
    Réponses: 2
    Dernier message: 29/06/2004, 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