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 et multipage [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2014
    Messages : 52
    Points : 28
    Points
    28
    Par défaut Setfocus et multipage
    Bonjour le Forum,

    je sais, vous allez dire que ce problème a déjà été traité, mais malheureusement, sur votre forum ou sur internet, rien n'explique mon problème...

    Je vous ai mis en PJ un fichier excel beaucoup plus simple que celui que je suis en train de réaliser.

    Voici donc mon problème : Dans un formulaire, j'ai des textbox et des multipages. Lorsque je saisie un textbox (dans mon exemple le champ PRENOM), une fois que celui ci est validé par la touche ENTRÉE du clavier, je souhaite que mon curseur se place dans un textbox qui se trouve dans un multipage (ici dans TELEPHONE FIXE) .
    J'ai donc écrit ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub TextBox_Prénom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        Me.MultiPage1.Value = 0     'pour travailler sur le premier onglet
        'Me.TextBox_Fixe.SetFocus
    End Sub
    Malheureusement, premier problème, le Setfocus ne fonctionne pas... (c'est pourquoi je l'ai mis en commentaire!).

    En plus, deuxième problème, dans le code suivant (donc après avoir renseigné le textbox EMAIL,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox_Email_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        Me.MultiPage1.Value = 1
    End Sub
    le second onglet n'est pas activé, ALORS que dans le code précédent, le premier onglet est bien activé... !

    POURQUOI ?????

    Pourriez-vous m'expliquez mon problème et surtout m'aider à trouver une solution (il faut absolument que les changements de champ se fasse par la touche ENTRÉE et non pas par la touche de TABULATION (exigence de mon "chef"...)

    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Bonjour,

    Je commence par le plus facile :
    le second onglet n'est pas activé, ALORS que dans le code précédent, le premier onglet est bien activé...
    Quand tu fais Enter sur l'email, c'est le dernier objet et il ne génère pas Exit, il faut cliquer ailleurs.
    Ca peut se résoudre en changeant son .tagIndex de 2 en 1, mais ça change l'ordre. Ou bien ajouter un textbox qui ne servira à rien (le cacher en le mettant plus bas)

    pour la 1ère question en tâtonnant j'ai fini par trouver la bonne syntaxe pour atteindre l'objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Me.MultiPage1.Pages(0).Controls("TextBox_Fixe")
    ' ou
    Me.MultiPage1.Pages(0).TextBox_Fixe
    seulement il n'accepte pas .SetFocus.
    Un message d'erreur qui laisse penser que le parent (Page) doit être activé et ne l'est pas.
    Et ça se confirme car si on met un point d'arrêt pour cliquer sur l'onglet avant, le .SetFocus passe.
    C'est tout pour ce soir :-)
    eric

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2014
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    Bonjour et merci pour ta réponse eriiic, mais malheureusement, chez moi, le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.MultiPage1.Pages(0).TextBox_Fixe
    ne permet pas du tout de saisir directement dans le champ Texbox_Fixe...
    Sinon, pour mon autre problème, c'est parfait !

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Bonjour,

    bien évidemment.
    C'est la syntaxe pour atteindre l'objet, à toi d'ajouter la méthode ou propriété voulue derrière.
    En l'occurence .SetFocus.
    Mais lis en détail ce que je t'ai écrit.
    eric

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2014
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    J'ai bien lu ton message, et j'ai activé le parent page en faisant un , mais cela ne change rien ...

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.MultiPage1.Pages(0).TextBox_Fixe.SetFocus
    ne fonctionne pas non plus ...

    Je ne vois donc pas du tout ou tu veux en venir, je suis désolé...

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Points : 3 666
    Points
    3 666
    Par défaut
    Je pensais être clair sur le point auquel j'étais rendu
    Un message d'erreur qui laisse penser que le parent (Page) doit être activé et ne l'est pas.
    Et ça se confirme car si on met un point d'arrêt pour cliquer sur l'onglet avant, le .SetFocus passe.
    Il est sélectionné, mais pas activé de la même façon qu'un clic dessus le fait.
    Cherche dans cette direction.
    eric

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2014
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    Waouh, subtile..

    Je pensez qu'en sélectionnant un controle, cela l'activait automatiquement. Je vais essayer de trouver comment l'activer alors...

    Merci Eriiiic

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    Salut

    que fais-tu du Cancel ?

    La sortie possible sera faite avec n'importe autre sélection de contrôle
    Si tu veux le TextBox_Fixe sélectionne le TextBox_Fixe sinon pas sur la touche Entrer mais avec un clic sur un label ajouté.
    Ton code sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub UserForm_Initialize()
      MultiPage1.Value = 0: TextBox_Nom.SetFocus
    End Sub
    Private Sub TextBox_Nom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      Cancel = TextBox_Nom = ""                       'saisie obligatoire
    End Sub
    Private Sub TextBox_Prénom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      Cancel = TextBox_Prénom = ""      'saisie obligatoire
    End Sub
    Private Sub Suite_Click()                    'Label nommé Suite
      TextBox_Fixe.SetFocus
    End Sub
    Remarque : pourquoi un "Multipage" ? Deux contrôles ""Frame" font aussi bien l'affaire (sans les problèmes du premier); tu en as un exemple joint.

    Nota : avec quoi as-tu créé ton classeur ? Je ne peux rien y écrire et dans n'importe quelle feuille et, certaines fois, je ne peux plus fermer Excel !
    Fichiers attachés Fichiers attachés

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2014
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    Merci OrDonc pour le temps passé sur mon problème.

    En fait, le petit fichier transmis n'est qu'un exemple car le vrai fichier de travail contient une multitudes d'informations classées grâce aux 9 onglets de mon multipage. Donc le Multipage est vraiment indispensable !

    Ton idée d'un Label "Suite" n'est pas possible, car les personnes qui utilisent le vrai fichier font de la saisie au km, et les champs doivent se renseigner en utilisant le moins possible la souris (directive donnée par mon chef...) et pas de "TAB" mais uniquement "ENTER" !

    C'est pourquoi, il est impératif qu'après la saisie du champ PRENOM (dans mon exemple) le curseur doit être dans le textbox "FIXE" ! Ce que je n'arrive pas à faire... Je m'arrache les cheveux depuis des jours et aucune solution à ce jour... SNIFF !

    Quant à ton problème indiqué dans ton NOTA, je ne comprends pas du tout car moi, tout fonctionne (Excel 2016)

    Merci pour ton aide (je ne connaissais pas l'astuce du CANCEL ), C'est super !

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    Re

    Or tu as un patron qui ne saurait pas le faire en exigeant la touche Entrer ?
    Donc essaie ce code - en changeant d'évènement (touche appuyée)
    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
    Private Sub UserForm_Initialize()
      MultiPage1.Value = 0: TextBox_Nom.SetFocus  
    End Sub
    Private Sub TextBox_Nom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      Cancel = TextBox_Nom = ""
    End Sub
    Private Sub TextBox_Prénom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      Cancel = TextBox_Prénom = ""
    End Sub
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
      If KeyCode = 13 Then MultiPage1.SetFocus
    End Sub
    Private Sub MultiPage1_Enter()
      TextBox_Fixe.SetFocus
    End Sub
    information : je fonctionne avec la version 2010 ; ce qui peut expliquer mon problème

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2014
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    Cela fonctionne avec mon petit fichier... Lundi je verrai si cela fonctionne au boulot.

    Cependant, je ne comprends pas le code. En effet, tu as ecrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
      If KeyCode = 13 Then MultiPage1.SetFocus
    End Sub
    Question d'un novice, pourquoi TEXTBOX1_Keydown ? car il n'y a aucun textbox1 sur le fichier, et pourtant cela fonctionne !!! Comprends pas là !!! Il devrait y avoir un message d'erreur ???

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    Citation Envoyé par leblesois Voir le message
    Question d'un novice ...
    Réponse d'un novice : C'est la surprise du Chef !

    As- essayé Private Sub TextBox_prénom_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) ? Bizarre, bizarre…

    Au hasard des recherches personnelles j'avais découvert ce comportement particulier de l'évènement Keydown mais les arcanes de la conception d'Excel n'étant totalement inconnues, j'ai passé mon chemin sans oublier cette anomalie. Depuis mes débuts avec ce tableur, une dizaine d'années, je découvre, en dilettante, bien des choses !

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2014
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    Effectivement, curieux ...

    Je viens de voir un problème dans ta solution.

    En effet, après avoir renseigné le multipage, si on clic sur un textbox en dehors de multipage et que l'on reclic dans un textbox du multipage (pour y apporter une correction par exemple, cela entraîne un message d'erreur ... Donc ta solution est à 99,99% parfaite (si lors de la saisie, on est pas obligé de revenir en arrière ...).

    Si tu as une solution, je suis preneur ;-)

    Bon week-end !

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    re
    arrive-t-on au bout du bout avec cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub TextBox_Nom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      Cancel = TextBox_Nom = ""
    End Sub
    Private Sub TextBox_Prénom_Exit(ByVal Cancel As MSForms.ReturnBoolean)
      Cancel = TextBox_Prénom = ""
    End Sub
    Private Sub Me_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
      MultiPage1.Value = 0: TextBox_Nom.SetFocus
      If KeyCode = 13 Then MultiPage1.SetFocus
    End Sub
    Private Sub MultiPage1_Enter()
      MultiPage1.Value = 0:  MultiPage1.SetFocus
      TextBox_Fixe.SetFocus
    End Sub
    Bon dimanche

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2014
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    hélas non, j'ai toujours un message d'erreur lorsque je quitte le multipage en cliquant dans un textbox (hors du multipage) pour par exemple apporter une correction et que je reviens dans le multipage...

    J'ai le message suivant :

    Erreur d'exécution '2110' :
    Le focus ne peut-être déplacé sur le contrôle car celui-ci est invisible, non activé, ou d'un type n'acceptant pas le focus.

    Et curieusement, cela ne le fait que si on revient dans le 1er onglet. Si on clic dans le second, aucun message d'erreur ... De plus en plus dingue mon PB ...

    Donc si vous avez une solution...

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2014
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    En fait, à force de chercher, j'ai trouvé cette astuce : mettre une "gestion des erreurs" et cela ne bloque plus et tout semble fonctionner !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub MultiPage1_Enter()
      MultiPage1.Value = 0
      MultiPage1.SetFocus
      On Error Resume Next
      TextBox_Fixe.SetFocus
      On Error GoTo 0
    End Sub
    Un grand merci pour votre aide ! (je ne mets pas en résolu car j'attends de voir ce que cela va donner lundi sur le fichier du boulot...)

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

Discussions similaires

  1. [XL-2016] Difficultés sur: multipage activeX sur feuille + setfocus sur textbox avec touche enter
    Par PlastiBE dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 28/06/2017, 14h14
  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. [débutant] setfocus sur un TextField
    Par k-reen dans le forum Composants
    Réponses: 2
    Dernier message: 29/06/2004, 16h21
  4. [MFC] CSplitterWnd et SetFocus
    Par venomelektro dans le forum MFC
    Réponses: 6
    Dernier message: 08/04/2004, 18h13
  5. Erreur setfocus??
    Par Alx-I dans le forum Composants VCL
    Réponses: 2
    Dernier message: 06/02/2003, 14h04

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