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 :

Difficultés sur: multipage activeX sur feuille + setfocus sur textbox avec touche enter


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Juin 2017
    Messages : 17
    Par défaut Difficultés sur: multipage activeX sur feuille + setfocus sur textbox avec touche enter
    Bonjour,
    Dans le cadre du développement d'un outil de création de nomenclature au sein de mon entreprise, j'aurais besoin de votre aide concernant un "tableau de bord" que j'ai créé via un controle ActiveX multipage.
    Ce tableau de bord est constitué de 3 pages sur lesquels se trouvent un ensemble de textbox et doit rester visible sur la feuille qui lui ai dédiée (j'affiche la nomenclature mise en page sur la feuille pour que l'utilisateur puisse voir l'avancement de son travail en temps réel).

    Le premier problème auxquel j'ai fait face fut la perte de focus lorsque je cliquai sur les textboxs de mon multipage (1er clic=focus OK, puis un genre "d'autorepaint" s'execute sans que je sache comment et le textbox perd le focus... il me fallait alors le recliquer pour retrouver le focus)
    Pour résoudre ce soucis j'ai inséré des frames pour "contenir" chacun de mes textbox.
    Est-ce la seule solution?

    Le second problème est qu'il me faudrait pouvoir "naviguer" de textbox en textbox via la touche enter. J'ai donc utilisé la fonction SetFocus, sur le keydown de mon premier textbox pour se rendre directement sur mon second textbox, mais malheureusement elle ne fonctionne qu'en pas à pas.
    Lorsque je l'utilise en automatique je n'ai visiblement pas le focus sur le textbox desiré... sauf que lorsque je sors du classeur (exemple clic sur le bureau ou sur la fenetre developpeur) puis réactive mon classeur alors le focus apparait correctement.
    Auriez-vous une idée d'ou vient ce "bug"?
    y-aurait-il un lien entre "l'autorepaint" de mon premier problème et le second? (si je peux mettre tous mes textbox directement sur la page de mon multipage je pourrai utiliser le tabindex...)


    afin de pouvoir illustrer mes soucies j'avais préparé un petit multipage avec 2 frame et 2 textbox mais les règles du forum m'interdisent de le joindre directement à ma première requête.
    Je vous mets donc le code en suivant:

    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
    Public WithEvents TB1 As MSForms.TextBox
    Public WithEvents TB2 As MSForms.TextBox
     
    Public WithEvents FR1 As MSForms.Frame
    Public WithEvents FR2 As MSForms.Frame
     
    Private Sub MP1_GotFocus()
    Set TB1 = MP1.Pages(0).Controls("TB1")
    Set TB2 = MP1.Pages(0).Controls("TB2")
     
    Set FR1 = MP1.Pages(0).Controls("FR1")
    Set FR2 = MP1.Pages(0).Controls("FR2")
     
    End Sub
     
    Private Sub TB1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
        TB2.Value = "toto"
        TB2.SelStart = 0
        TB2.SelLength = Len(TB2.Text)
        TB2.SetFocus
    End If
    MsgBox MP1.SelectedItem.ActiveControl.Name
    End Sub
    J'ai donc créé un multipage "MP1", inséré 2 frames "FR1" + "FR2" sur la première page, inséré un textbox par frame "TB1" dans "FR1" et "TB2" dans "FR2".

    Pour récupérer les évènements de chaque controls je passe par une déclaration "Public withevents...".

    Pour simplifier le code je charge des variables à chaque prise de focus du multipage.

    sur l'évènement keydown de TB1 je marque "toto" dans TB2 (mets en évidence que seul le setfocus déraille) puis je selectionne la totalité du texte de TB2 (permet un repère visuel pour l'utilisateur et une rapidité d'execution intéressante pour mon outil)

    Pour exposer le problème j'ai rajouté un msgbox qui montre bien que TB2 n'a pas le focus a la fin de l'execution (temps que l'on est pas sortie du classeur puis rerentré)

    PS: pour exposer le premier problème il suffit de faire glisser TB1 et TB2 en dehors des frames, directement sur la page et vous verrez alors ces soucis de focus et "autorepaint".

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    une solution plus simple aurais été de mettre tes controls dans un userform la gestion des évènement et focus en est beaucoup plus souple
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Juin 2017
    Messages : 17
    Par défaut
    Effectivement le userform aurait pu être une solution cependant lors de la dernière mise à jour vers Excel2016 certains outils développés au sein de l'entreprise ont souffert d'instabilités sur les userform. (je précise que je n'était pas le programmeur de ces outils )
    il m'a donc été donné comme directive d'utiliser le minimum d'userform d'où l'emploi du controle ActiveX sur la feuille. (j'utilise une userform pour la suppression d'accessoires via une combobox mais ca ne représente que 8 lignes de codes donc on me l'a accepté)

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Juin 2017
    Messages : 17
    Par défaut
    personne n'a d'idée?
    dans l'absolu je pense que trouver la solution à mon premier problème (qui produit une réaction stroboscopique à mon tableau de bord) serait suffisante pour me permettre de trouver par moi-même la solution au 2nd problème. Tout ca m'a l'air lié
    [EDIT] je viens de tester en ne posant qu'un seul multipage sur une feuille et en cliquant alternativement sur la feuille puis sur le multipage, ce dernier n'a pas cette réaction de clignotement (comme s'il était rechargé)... mais si on en pose 2 alors on aura le phénomène de clignotement. est ce que cela veut dire que je n'ai aucun recours? [EDIT]

  5. #5
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    pourquoi un multipage ???
    chaque onglet est une page d'un multipage nommé workbook
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juin 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Juin 2017
    Messages : 17
    Par défaut
    Alors pour illustrer la justification d'un multipage voici un imprim_ecran du tableau de bord que j'ai codé: (j'ai masqué les donnés sensibles)

    Nom : illustration forum.jpg
Affichages : 967
Taille : 426,5 Ko

    On peut donc y voir 3 onglets: cartouche/creation/revision (=onglets de mon multipage)
    A coté il y a la nomenclature créée en lecture uniquement (permet un apperçu dynamique pour l'utilisateur), l'utilisateur doit passer par le tableau de bord pour toute modification ou ajout d'élément.
    Ce tableau de bord se déplace dans la feuille en suivant les positions des scrollbars pour que l'utilisateur l'ait toujours "sous la main" et puisse se positionner à la hauteur des lignes qu'il modifie ou créé.
    L'ensemble est déjà codé à 95% et fonctionne bien sauf que nous aimerions qu'avec ENTER l'utilisateur puisse se déplacer de textbox en textbox (Rep -> Nb -> rech...).
    Je rappel que le setfocus ne fonctionne pas (Cf: explications du premier message).

    L'utilisation d'un userform affiché sur la feuille n'est pas désiré par le chef de projet.
    Je n'ai donc pas le choix d'utiliser ce multipage en control.activeX et, si j'ai bien compris la réponse de mjpmjp, l'utilisation d'un workbook exterieur pour simuler un multipage m'obligerai à gérer plusieurs classeurs en même temps... ce qui me parait assez "lourd" comme "organisation".
    L'idée est plus de charger les données d'entrées d'un fichier défini, à l'ouverture, dans l'outil puis de les compléter et/ou modifier, puis de les "restocker" dans le fichier défini.

Discussions similaires

  1. SetFocus sur la valuer d'un sous-formulaire ?
    Par Raphs dans le forum IHM
    Réponses: 2
    Dernier message: 05/12/2005, 18h51
  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. Executer une feuille XSLT sur du xml
    Par naiadeKaren dans le forum Général Python
    Réponses: 2
    Dernier message: 24/08/2005, 14h53
  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