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 :

afficher une valeur dans une textbox en fonction d'une listbox


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
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 46
    Par défaut afficher une valeur dans une textbox en fonction d'une listbox
    Bonjour à tous,

    je vous présente mon classeur puis mon problème.

    Je possède 3 classes qui sont répartit en 4 groupes.
    listbox1 est la selection de la classe : A, B ou C
    listbox2 est la section en fonction de listbox 1 du groupe : Aa, Ba,Ca,Da,Ab,Bb....Dc
    Listbox3 est la selection de l'élève en fonction de la classe et du groupe : Classe A, Gr Aa : élève Aa1..........

    Dans mon Excel, les élèves sont repartit dans les colonnes A,C,E,G et leur emplacement respectif dans les colonnes B,D,F,H

    Mon problème : lors de la selection de l'élève je veux faire apparaitre une textbox avec l'emplacement de l'élève.

    Exemple : si on selectionne l'élève Cb3 (feuille excel 2, cellule E6) alors la textbox affiche la cellule F6 de cette même feuille.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour.

    Essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1.Value = Range(ListBox3.RowSource).Cells(ListBox3.ListIndex + 1, 1).Offset(, 1).Value

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 46
    Par défaut
    Super ça fonctionne parfaitement sur ce programme. Vraiment merci.

    (Par contre sur mon vrai programme, qui est une bibliothèque qui référence les outils de métrologie ça me met une erreur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ListBox1a_Click()
     
    LabelNom.Visible = True
    LabelNom.Caption = "emplacement"
    TextBoxNom.Visible = True
    CommandButton6.Visible = False
     
    TextBoxNom.Value = Range(ListBox1a.RowSource).Cells(ListBox1a.ListIndex + 1, 1).Offset(, 1).Value
    est-ce possible que l'erreur vienne du fait que j'alimente la listbox1a de cette manière ?
    Seulement avec cette méthode je pouvais en fonction d'une liste dans Excel changer les éléments de listbox1a à listbox1b en fonction de leurs disponibilités.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Private Sub ListBoxC_Click()
    ListBox1a.Clear
    ListBox1b.Clear
    MultiPage1.Visible = True
     
    CommandButton6.Visible = False
     
    Dim rngA As Range, rngB As Range, rngC As Range
     
      Select Case Me.ListBoxC.ListIndex
        Case 0
          Set rngA = Range("Feuil8!A757:A769")
        Case 1
          Set rngA = Range("Feuil8!C757:C769")
        Case 2
          Set rngA = Range("Feuil8!E757:E769")
        Case 3
          Set rngA = Range("Feuil8!G757:G769")
        Case 4
          Set rngA = Range("Feuil8!I757:I769")
        Case 5
          Set rngA = Range("Feuil8!K757:K769")
        Case 6
          Set rngA = Range("Feuil8!M757:M769")
        Case 7
          Set rngA = Range("Feuil8!O757:O769")
        Case 8
          Set rngA = Range("Feuil8!Q757:Q769")
        Case 9
          Set rngA = Range("Feuil8!S757:S769")
        Case 10
          Set rngA = Range("Feuil8!U757:U769")
      End Select
     
      For Each rngB In rngA.Cells
        Set rngC = Range("FEUIL3!H2:H66999").Find(rngB, , , xlWhole)
          If rngC Is Nothing Then
            Me.ListBox1a.AddItem rngB
          Else
            Me.ListBox1b.AddItem rngB
          End If
      Next rngB
     
    End Sub

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour

    Ici tu utilises la méthode AddItem et non pas RowSource. C'est sûr que si on n'utilise pas la propriété RowSource pour remplir le contrôle Listbox, on ne peut pas utiliser la propriété RowSource pour savoir d'où proviennent les données.

    Une solution serait de créer une ListBox multicolonnes. ( Voir comment dans ce tutoriel :http://silkyroad.developpez.com/VBA/ControlesUserForm/)

    Ce qui te permettrait d'inclure immédiatement dans la seconde colonne du Listbox, les infos supplémentaires concernant chacun des items du Listbox.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 46
    Par défaut
    D'accord, donc une fois ma listbox à deux colonne crée, comment dois-je tourner mon code en rowsource ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      For Each rngB In rngA.Cells
        Set rngC = Range("FEUIL3!H2:H66999").Find(rngB, , , xlWhole)
          If rngC Is Nothing Then
            Me.ListBox1.AddItem rngB
          Else
            Me.ListBox1.list(ListBox1.ListCount - 1, 1).AddItem rngB
          End If
      Next rngB
     
    End Sub

  6. #6
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Ce serait mieux comme ceci pour que les ListBox contiennent toutes les infos:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For Each rngB In rngA.Cells
        Set rngC = Worksheets("Feuil3").Range("E2:E6000").Find(rngB, , , xlWhole)
          If rngC Is Nothing Then
            Me.ListBox1.AddItem rngB
            Me.ListBox1.List(ListBox1.ListCount - 1, 1) = rngB.Offset(, 1)
          Else
            Me.ListBox2.AddItem rngB
            Me.ListBox2.List(ListBox2.ListCount - 1, 1) = rngB.Offset(, 1)
          End If
      Next rngB

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/01/2015, 15h28
  2. Réponses: 3
    Dernier message: 31/01/2014, 08h19
  3. Réponses: 2
    Dernier message: 05/03/2008, 22h01
  4. Placer une valeur dans un textbox
    Par ThunderBib dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/05/2006, 22h34

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