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 :

Sélection d'une combobox dans un textbox [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2008
    Messages : 225
    Par défaut Sélection d'une combobox dans un textbox
    Bonjour,

    Dans un Userform, je dispose:
    D’une combobox (cbx_choix)
    D’une textbox « nbre_jours »
    En fonction de la sélection de la combobox, un nombre de jours devrait s’afficher dans la textbox « nbre_jours »
    J’ai écris le code ci-dessous. Pas de problème pour alimenter la combo mais la textbox reste vide.
    Quelqu’un pourrait-il me faire part de l’erreur ?

    D’avance merci

    Harry

    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 UserForm_Click()
    List = Array("Bricolage","Bureautique", "Poterie") 
    For i = 0 To UBound(List)
    cbx_choix.AddItem List(i)
    Next i
    If cbx_choix.Value = List(0) Then
        nbre_jours.SetFocus
        nbre_jours.Value = "4"
        Else
        If cbx_choix.value = List(1) Or cbx_choix.value = List(2) Then
            nbre_jours.SetFocus
            nbre_jours.value = "5"
    End If

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Je vais répondre sur le code sans discuter la méthode.
    D'abord, tu dois bien choisir l'évènement.
    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub UserForm_Initialize() ' au lieu de UserForm_Click()
    'ici tu remplis ta combo
    Ensuite, pour écrire dans ta TextBox après choix dans ta combo, on utilise cet évènement (par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub cbx_choix_AfterUpdate
    Select case cbx_choix
       Case Is "toto":nbre_jours.value = 1
       Case Is "tata":nbre_jours.value = 2
    ...
    End select
    ceci étant à propos du fonctionnement du code.
    et pour analyser le problème;
    Pourquoi ne pas faire une combo à 2 colonnes? une variante

  3. #3
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Il y a de nombreuses solutions, en voici une :
    Un tableau de valeurs : col1 (Activité) Col2 (Durée) que je nomme ListeDureesActivites
    Dans la userform, une liste de zone modifiable (lstChoixActivite) et une textbox (txtDuree).

    Paramétrage de lstChoixActivite : RowSource = ListeDureesActivites, Bound Column = 2; Column Count = 1.

    Une procédure évènementielles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private sub lstChoixACtivite_Change
    Me.txtDuree = Me.lstChoixActivite
    End sub
    Bien sûr, suivant le contexte on peut faire de nombreuses varaiantes.

    Cordialement,

    PGZ

  4. #4
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2008
    Messages : 225
    Par défaut Merci
    Merci à tous les deux pour votre réponse.
    La solution proposée par Mercatoq fonctionne à merveille.
    L'idée proposée par PGZ est élégante mais me demande un peu plus de réflexion. Je m'y attèle demain dimanche.
    Je vous tiens au courant

    Excellent weekend.

    Harry

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonsoir,

    Moi, je te propose ce petit jeu (juste pour exercer ton agilité) :
    Sur un UserForm : une Combobox nommée macombo ...

    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 Form_Initialize()
      'petite cerise de décoration
      Dim i As Integer, toto
      macombo.Tag = "Bricolage@3@Bureautique@5@Poterie@1@" ' tout se passe ici
      toto = Split(macombo.Tag, "@")
      For i = 0 To UBound(toto) - 2 Step 2
        macombo.AddItem toto(i)
      Next
    End Sub
     
    Private Sub macombo_Click()
      MsgBox Val(Mid(macombo.Tag, InStr(macombo.Tag, "@" & macombo.Text & "@") + Len(macombo.Text) + 2))
    End Sub

  6. #6
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2008
    Messages : 225
    Par défaut
    Bonjour,

    J’ai suivi les suggestions de Mercatog et de PGZ; quoique l’époque de la choucroute soit encore lointaine, je suis en plein dedans.
    • La propriété « RowSource » de la combobox « cbx_choix » remplie avec l’instruction
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      =list.BoundColumn = 2; ColumnCount = 1
      donne le message « could not set the RowSource property. Invalid property value. »


    La combobox « cbx_choix » est remplie via le code (option Base 1):
    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()
    Dim list()
    ReDim list(1 To 3, 1 To 3)
    list1 = Array("Bricolage ", " Bureautique ", " Poterie ")
    list2 = Array("4", "5", "5")
    For i = 1 To UBound(list1, 1)
        list(1, i) = list1(i)
        list(2, i) = list2(i)
    Next i
    cbx_choix.ColumnCount = 2
    cbx_choix.Column() = list
    End Sub
    Lorsque le module s’exécute , j’obtiens bien deux colonnes (Bricolage 4, Bureautique 5, …)
    Le code de l’étape suivante est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub cbx_choix_afterupdate()
    MsgBox cbx_choix.Value
    Me.nbre_jours.Value = Me.cbx_choix.BoundColumn = 2
    End Sub
    • Première remarque, le A de « afterupdate » n’est pas en majuscule (même remarque pour l’évènement "change".)


    • Lors de l’exécution du code tel que ci-dessus, , la mention « FALSE » apparaît dans la textbox « nbre_jours ».


    J'espère que mes explications sont suffisemant claires pour espérer un petit coup de pouce de votre part afin d'accéder à la colonne reprenant le nombre de jours.

    D'avance merci et excellent dimanche
    Pour UCFoutu, je creuse le "petit jeu" après avoir résolu le problème actuel
    Note complémentaire
    Je viens, après avoir écrit ce message, d'exécuter le code du premier module (initialize) en pas à pas. L'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cbx_choix.ColumnCount = 2
    affiche la valeur "ColumnCount = 1". Et pourtant, je vois les deux valeurs dans la combobox.
    Harry

  7. #7
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour le fil le forum
    met le code dans change!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub cbx_choix_Change()
    MsgBox cbx_choix
    nbre_jours = cbx_choix.list(cbx_choix.ListIndex, 1)
    End Sub

  8. #8
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2008
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2008
    Messages : 225
    Par défaut
    Bonjour Laeticia,

    Merci pour le conseil.
    Je viens de tester et l'application fonctionne correctement.

    Bonne fin de weekend

    Harry

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

Discussions similaires

  1. [XL-2003] Remplir des Textbox fonction du choix d'une Combobox dans un USF - Newbie
    Par Vrancky dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 06/06/2014, 09h30
  2. lier une combobox et un textbox dans un datagrid
    Par guigui14760 dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 06/09/2010, 14h25
  3. Réponses: 11
    Dernier message: 31/08/2010, 10h49
  4. Sélection d'une ligne dans un JTable
    Par dam21 dans le forum Composants
    Réponses: 3
    Dernier message: 28/07/2004, 13h57
  5. Déplacer la sélection d'une ligne dans un stringgrid
    Par jer64 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 14/03/2003, 01h57

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