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 :

Gestion du tabindex dans un userform


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut Gestion du tabindex dans un userform
    Bonjour à tous,

    Je suis en train de travailler sur un userform de saisie qui est exclusivement constitué de boutons, labels, combobox et textbox
    qui sont créés dynamiquement en fonction de la feuille concernée.

    Tant que le traitement doit fonctionner sans contraintes, il n'y a pas de souci, avec un module de classe tout va bien.

    J'ai par contre une feuille où la saisie serait plus correcte si certains contrôles pourraient ne pas être utilisés
    selon l'ordre des rubriques de la feuille.
    Par exemple je voudrais saisir les contrôles dans l'ordre 1 5 8 2 3 4 6 7 9
    car le 5 est un combo dont dépend le combo 8 suivant qui lui va permettre de contrôler les textbox suivantes qui précédent sur la feuille.

    Pour cela j'ai essayé d'utiliser le tabindex en le mettant à zéro, dans l'ordre inverse de l'utilisation souhaitée,
    c'est-à-dire en partant de 9 pour arriver à 1,
    mais le résultat n'est pas conforme à ce que j'espérai : l'ordre récupéré n'est pas toujours le même.

    Si quelqu'un a une idée pour faire fonctionner le principe de façon correcte et fiable, je l'en remercie par avance.

  2. #2
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Bonjour à toi,

    Tu est parti sur le bon principe, il te faut en effet jouer avec les TabIndex de chaque contrôles pour les mettre dans l'ordre que tu désire.
    Après le TabIndex ne sert qu'à définir l'ordre lors de l'appui sur la touche Tab.

    Si tu souhaite réellement bloquer un contrôle tant que tu n'est pas passé dans celui d'avant qui en dépends tu peut le désactiver avec Enable = False

    Peut tu poster le code de ta macro qui gère cette partie la qu'on en voit un peu plus ?

  3. #3
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,

    Merci de ta réponse encourageante et voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        For Each obj In Me.Controls
            If Not Left(obj.Name, 2) = "WT" Then obj.TabIndex = 0
        Next obj
        For col = UBound(tbr, 2) To 1 Step -1
            For ctl = UBound(tbr, 2) To 1 Step -1
                If prc(col) = tbr(1, ctl) Then
                    Me.Controls("WT_" & ctl).TabIndex = 0
                    Exit For
                End If
            Next ctl
            If ctl < 1 Then MsgBox "Erreur : " & prc(col)
        Next col
    Comme cela ne fonctionnait pas j'ai commencé par traiter les contrôles non combo/textbox
    pour ensuite positionner en tête les contrôles de saisie mais certains tabindex générés sont au-delà du nombre de mes combo/textbox.

    prc est la table de mes rubriques dans l'ordre où je les veux
    tbr est la table des rubriques dans l'ordre des contrôles.

    Il y a peut-être une faille que je ne vois pas, pourtant c'est presque bon.

  4. #4
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Dans un premier temps il faut établir l’ordre des contrôles quelques part pour chaque feuille.

    Genre dans une feuille caché tu fais un petit tableau :
    Nom de feuille Ordre contrôles
    Feuille1 Txt1;Cmb2;Ctrlxxx
    Feuille2 Cmb2;Ctrlxxxxx;Txt1

    Ensuite à l'ouverture de ton USF tu va chercher par rapport au nom de la feuille concerné l'odre des contrôles appliquer.
    Tu Split sur ; et tu parcours le résultat et tu applique le TabIndex dans l'ordre en partant de 0 puis tu défini le focus sur le contrôle que à le TabIndex à 0

  5. #5
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Citation Envoyé par cerede2000 Voir le message
    Dans un premier temps il faut établir l’ordre des contrôles quelques part pour chaque feuille.
    C'est bien ce que j'ai dans mes deux tables mémoire tbr et prc


    tu applique le TabIndex dans l'ordre en partant de 1 puis tu défini le focus sur le contrôle que à le TabIndex à 1
    en recréant le tabindex de cette façon, cela ne fonctionne pas car si je met le tabindex 3 au contrôle 8 par exemple, cela perturbe tous les autres et l'on obtiens un peu n'importe quoi car excel ne gère pas de trou dans sa table. C'est pour cela que j'étais parti sur ma solution en ordre inverse.

    Je vais modifier mon algorithme pour faire selon ta proposition et je te donne le résultat.

  6. #6
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Il faut absolument tous les renseigner en partant de 0 vers le plus haut.

    Car si l’ordre n'est pas respecté et cohérent ils se retrouvent numéroté aléatoirement

    D'ou la liste dans l’ordre souhaité avec incrément de 0 à Nombre de contrôle avec le TabIndex défini par cet incrément

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

Discussions similaires

  1. [XL-2007] Gestion Erreur dans un userform - CDate
    Par mouftie dans le forum Excel
    Réponses: 4
    Dernier message: 31/03/2014, 13h01
  2. Réponses: 14
    Dernier message: 20/05/2012, 16h55
  3. Gestion des headers dans un Makefile
    Par Weren dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 09/11/2004, 10h44
  4. Gestion du blit dans un moteur2D
    Par Fry dans le forum DirectX
    Réponses: 2
    Dernier message: 01/11/2004, 02h05
  5. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20

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