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] SetFocus sur TextBox dans UserForm_Initialize ne fonctionne pas ?


Sujet :

Macros et VBA Excel

  1. #1
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut [VBA-E] SetFocus sur TextBox dans UserForm_Initialize ne fonctionne pas ?
    Bonjour,

    Tout est dans le titre.
    Il me semble avoir lu ici et là qu'il n'était pas possible de faire un SetFocus sur un TextBox. J'ai dû lire des bétises car si je mets un bouton sur ma Form et l'instruction TextBox1.SetFocus dans son évènement Click, quand je clique ça le fait.
    Pouquoi cela ne fonctionne pas dans UserForm_Initialize ?
    Comment faire, alors ?
    Merci d'avance,
    --
    Jean-Pierre
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  2. #2
    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
    Il existe une propriété TabIndex pour tous les contrôles que tu places sur userform.
    Si, par construction, tes contrôles n'ont pas été placé dans l'ordre de saisie, tu peux redéfinir cette propriété dans Useform_Initialise() (ou _Load() ? )
    Pour placer le focus de ta textbox à l'ouverture de l'userform, tu dois donc mettre
    Il en va de même de tous tes contrôles.
    L'idéal est de à l'avance la structure de ton userform et d'ajouter les contrôles dans le bon ordre
    A+

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Merci pour la réponse, sauf que
    1. j'ai placé mes contrôles en fonction de l'ordre de tabulation ;
    2. ta suggestion (TextBox1.TabIndex = 1 ou 0 ou ...), ne fait rien...

    Mystérieux, VBE...

    Des précisions à propos de ce problème : Ce TextBox placé sur ma form est le 1er dans l'ordre de tabulation ; si je "tourne en rond" dans les contrôles, un <TAB> sur le dernier contrôle place bien le focus sur celui qui me préoccupe. Me demande si ça n'est pas lié à l'affichage de la form...
    Passer par les messages Windows ? Comment les appelle-t-on depuis VBE ?
    --
    Jean-Pierre
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    bonjour

    Il est préférable de définir la propriété TabIndex des contrôles en mode création de ton userform, et pas par programmation VBA.

    Ainsi, le contrôle ayant TabIndex égal à 0 (zéro) sera le contrôle actif à l'initialisation de ton userform.

    Si tu ne vois pas les propriétés de tes contrôles dans VBE (éditeur de VBA), va dans Affichage/Fenêtre propriétés ( F4)

    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    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
    Entièrement d'accord avec Pierre Fauconnier, il est préférable de le faire au moment de la création (TabIndex = 0 au lieu de 1 mis à part, pour le premier TabIndex...)
    Ceci dit, si tu as un grand nombre de contrôles sur ton userform, que ton code est renseigné, tu peux encore modifier manuellement TabIndex. Le pb est que chaque fois que tu en modifies un, un autre est modifié sans que tu puisses prévoir lequel.
    Essaie d'effectuer cette modification par le dernier de tes contrôles et de redescendre vers le 1er.
    Et prends en compte que le premier a l'index 0

    Si tu peux, vaut mieux reconstruire ton userform depuis zéro.

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Re, Pierre.

    Merci de tes tuyaux (que je connaissais déjà, après 10 ans de fréquentation de Delphi et un peu de VB4-6 de tps en tps).

    Le problème viendrait-il du fait que le TextBox concerné est posé sur un Multipage ?
    J'ai eu beau mettre TabStop = False, à ce Multipage, rien...
    Ça me rend fou, ce truc...

    [edit]
    Si tu peux, vaut mieux reconstruire ton userform depuis zéro.
    On peut toujours tout, mais c'est dingue, alors ![/edit]
    --
    Jean-Pierre
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Ouskel'n'or
    ...(TabIndex = 0 au lieu de 1 mis à part, pour le premier TabIndex...)
    Que veux-tu dire? Le premier tabindex est bien 0... Me trompe-je?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Les pages d'un MultiPage possèdent une propriété INDEX qui va de 0 au nombre de pages -1 contenues dans le multipage.

    Le MULTIPAGE en lui-même possède une propriété VALUE qui peut être déterminée en mode création ou en exécution. En mode création, cette propriété détermine la page qui sera affichée à l'initialisation du userform.

    Les index des contrôles posés sur une page de multipage sont indépendants des index des contrôles de la feuille et des autres pages du multipage. En clair, chaque page de multipage contient son propre jeu d'index. Dès lors, pour chaque page du multipage, tu auras un index 0 pour le contrôle qui sera actif à l'activation du multipage.

    Il faut donc déterminer la propriété VALUE du MULTIPAGE et les index des contrôles de chaque page.

    Attention. Si tu mets TABSTOP = FALSE au multipage, tu ne pourras plus le sélectionner par TAB dans le déroulement des contrôles du userform.

    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    J'avance un peu :
    D'accord pour les TabIndex, aussi pour les TabIndex des pages, des trucs sur les pages, etc, c'est comme en Delphi, VB et sans doute d'autres.

    Je m'en sors presque en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MultiPage1.TabStop = False 'à la conception
     
    MultiPage1.SetFocus ' dans le UserForm_Initialize
     
    Private Sub MultiPage1_Enter()
        tbx_Chassis_New.SetFocus
    End Sub
    et ensuite un coup de <TAB> pour entrer dans mon TextBox.
    C'est un peu nul et moche, non ?
    Cependant, si quelqu'un sait comment envoyer <TAB> depuis MultiPage1_Enter, on peut tenter...

    Le MULTIPAGE en lui-même possède une propriété VALUE qui peut être déterminée en mode création ou en exécution.
    J'ai essayé de jouer avec, hier soir, et j'avoue humblement n'y avoir rien compris (ah la la, l'aide n'est pas top, des fois) : j'essayais simplement de forcer l'affichage de Pages(0) au lancement, mais makkache, que des insultes ! (un ch'tit coup de main là-d'ssus serait le bienvenu.)

    Le problème d'origine, c'est quand je faisais <TAB>, le focus entrait sur le contrôle avec TabIndex à 1, celui qui me préoccupe est bien à 0, et si je "tourne en rond", à un moment le focus y entre bien...
    --
    Jean-Pierre
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  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
    Citation Envoyé par Pierre Fauconnier
    Que veux-tu dire? Le premier tabindex est bien 0... Me trompe-je?
    Non non, tu ne te trompes pas, mais dans la ligne de code que j'ai donnée, j'avais mis 1 sans réfléchir Donc, j'insistais sur le fait que toi, tu avais bien mis 0 et que c'était bien ce qu'il fallait faire
    La prochaine fois, j'irai corriger ma ligne

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Jipété
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MultiPage1.TabStop = False 'à la conception
     
    MultiPage1.SetFocus ' dans le UserForm_Initialize
     
    Private Sub MultiPage1_Enter()
        tbx_Chassis_New.SetFocus
    End Sub
    A la conception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Multipage1.TabStop = TRUE ' Pourquoi FALSE??
    Multipage1.TabIndex=0
    tbx_Chassis.TabIndex = 0
    Si ta page 0 du multipage n'est pas frontale en mode création (et donc à mettre par sécurité), il faut forcer son activation par
    à l'initialisation du userform

    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par ouskel'n'or
    Non non, tu ne te trompes pas, ...
    Ok. Bonne journée
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #13
    Invité
    Invité(e)
    Par défaut


    Je ne comprends pas très bien pourquoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Activate()
      UserForm1.TextBox1.SetFocus
    End Sub
    Ne fonctionne pas !?

    Les objets dans un Multipage ne sont pas dépendants de celui-ci !

    Donc un SetFocus sur un objet doit fonctionner !

    A+

  14. #14
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Activate()
      UserForm1.TextBox1.SetFocus
    End Sub
    Parce que je ne la connaissais pas !

    Bien vu, Bruno ! + 1 et
    --
    Jean-Pierre
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  15. #15
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Salut Bruno

    Citation Envoyé par BrunoM45
    ...
    Les objets dans un Multipage ne sont pas dépendants de celui-ci !

    Donc un SetFocus sur un objet doit fonctionner !

    A+
    Pour que le focus puisse être placé sur un contrôle d'une page, il faut que celle-ci soit visible. Il faut donc au minimum s'assurer que la page est visible via avant d'utiliser SetFocus.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  16. #16
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    il faut que celle-ci soit visible
    Elle doit l'être sur le Form_Activate, mais si tu pouvais préciser ta pensée sur cette histoire de "Value" avec un ch'tit exemple, ça serait hyper-cool.
    Merci d'avance,
    --
    Jean-Pierre
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  17. #17
    Invité
    Invité(e)
    Par défaut
    :salut Pierre,

    Tu as tout a fait raison !

    Dans la première question de Jipété, il ne parlait pas de page visible ou non !

    Sinon il faut effectivement tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub UserForm_Activate()
      ' TextBox1 se situe sur la Page1 du Multipage
      If UserForm1.MultiPage1.Visible = True Then
        UserForm1.TextBox1.SetFocus
      End If
    End Sub
    Voilà

  18. #18
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Il faut que la page contenant le contrôle sur lequel tu effectues le SetFocus soit affichée AVANT de mettre le SetFocus.

    Cela peut se faire (et normalement devrait) juste avant la ligne forçant le focus.

    Dès lors, on peut avoir dans l'évènement ACTIVATE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub UserForm_Activate()
        MultiPage1.Value = 0
        TextBox1.SetFocus
    End Sub
    Pour la propriété VALUE de l'objet MULTIPAGE...

    Il n'y a pas moyen d'utiliser SETFOCUS sur une page d'un objet Multipage...
    La seule façon d'activer une page de multipage est de forcer la propriété VALUE de l'objet MULTIPAGE. Cette propriété peut prendre une valeur allant de 0 au nombre de pages du multipage -1.

    En mode création, la page activée (à l'avant-plan) peut très bien ne pas être celle qui contient le contrôle qui doit avoir le focus à l'activation du userform. Dès lors, à l'activation, et quelle que soit la valeur de la propriété VALUE du multipage, c'est la page active en création qui sera la page active à l'exécution. . C'est triste, mais c'est comme cela.
    De même, à l'utilisation, si tu as un bouton qui force le focus d'un contrôle placé sur une page de multipage, il est important que tu t'assures que la page est visible avant de forcer le focus, sous peine d'obtenir une erreur d'exécution.

    C'est pourquoi tu dois connaître les index des pages de ton multipage, afin de pouvoir forcer le focus sur le contrôle désiré. (voir pièce jointe)

    Donc, pour faire simple : , le contrôle dont tu veux le focus à l'activation doit avoir la propriété TABINDEX à 0 (zéro) et tu dois forcer l'affichage de la page qui le contient via avec x ayant la valeur de l'index de la page du multipage. Ce code peut être placé à l'initialisation ou à l'activation de la feuille, et juste avant chaque si CONTROLE est placé sur une page de multipage, pour éviter les erreurs d'exécution.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  19. #19
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    C'est triste, mais c'est comme cela
    Cela ne me gène absolument pas : en fait je manque surtout de connaissances concernant les possiblités de VBA (voir ce que je disais à propos de "Value"), du coup je ne sais pas trop comment coder ce bazar que je maîtrise sans pb en Delphi...

    Mais pour ce coup-ci, grace à vos conseils lumineux, c'est vraiment de chez

    --
    Jean-Pierre
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

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

Discussions similaires

  1. [VBA-E] Question sur image dans userform ?
    Par damsmut dans le forum Excel
    Réponses: 3
    Dernier message: 04/04/2007, 06h32
  2. [vba-E97] focus sur textbox
    Par stargates dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 10/02/2007, 17h29
  3. [VBA-E] focus sur textbox
    Par stargates dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/01/2007, 12h08
  4. Vba envoi valeur à un textbox dans un etat
    Par en_gel_ho dans le forum IHM
    Réponses: 7
    Dernier message: 04/01/2007, 14h58
  5. [VBA E] boucle sur textbox d'une userform
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 03/07/2006, 21h37

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