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 :

Relation Listbox Textbox [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2013
    Messages : 68
    Par défaut Relation Listbox Textbox
    Bonjour à toutes et à tous,

    D'avance, merci pour votre aide.

    En fait, je ne comprends pas bien le fonctionnement des Listbox, mais dans le fichier joint, j'ai un userform qui s'ouvre dès l'ouverture, avec un combobox, un textbox (alimenté automatiquement en fonction du contenu du combobox) et un listbox.
    Je voudrai récupéré (sur 2 colonnes) dans ce listbox les valeurs du combobox et du textbox; j'arrive à récupérer la valeur du combobox mais pas celle du textbox. Je bloque.....

    Ensuite, en cliquant sur le bouton, je voudrai copier ces valeurs contenues dans la listbox dans la feuille "Feuil1" dans les colonnes correspondantes (Résidents sortants et Pavillon).

    Je n'ai pas vraiment essayé la programmation sur le bouton vu que déjà je bloque sur la récupération des données dans la listbox.
    J'ai vu qu'on pouvait paramétrer une listbox pour qu'elle aie x colonnes, et ainsi récupérer des données qui seraient balancées dans chacune de ces colonnes, mais je n'y arrive pas....

    Un grand merci pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour Averell,
    A priori ce n'est pas toi qui a crée cette macro, dans ce cas je te conseille de faire tourner la macro en mode "pas a pas" (tu affiche le code et tu mets ton curseur sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub UserForm1_Initialize()
    puis avec la touche F8 tu fais défiler ta macro).
    Un bon moyen de contrôle également est l'utilisation des "Espions" : sélectionnes une variable , ici j'ai choisi Nom : Untitled.jpg
Affichages : 594
Taille : 20,1 Ko
    et avec un clic droit tu sélectionnes "Ajouter un espion" une fenêtre apparaîtra avec la variable sélectionnée (tu peux en sélectionner plusieurs) et tu verra la valeur que prend ta variable en cours de traitement par ton code.

    C'est ce que j'ai fait et j'ai remarqué que dans cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1.Value = Range("A" & a).Value
    le code compare la valeur de la textBox1 ou se trouve les noms des personnes et la colonne A de l'onglet "Données" ou se trouvent les noms des pavillons : ces deux données ne seront jamais égales, essayes plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1.Value = Range("B" & a).Value
    En scrutant ce que fait le code, tu verra comment il fonctionne et tu pourra modifier en conséquence.
    Bon courage
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Deux choses, parente tes Ranges :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If ComboBox_Resident = Worksheets("Données").Range("B" & a).Value Then
        TextBox1.Value = Worksheets("Données").Range("A" & a).Value
        '...
    ça évite souvent des prises de tête !
    Ensuite, pour avoir des valeurs affichées sur plusieurs colonnes dans une ListBox ou ComboBox, il faut en définir le nombre, pour toi, "ColumnCount" doit être sur 2 !
    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
     
    Private Sub ComboBox_Resident_Change()
     
        Dim a As Integer
     
        For a = 2 To 53
     
            If ComboBox_Resident = Worksheets("Données").Range("B" & a).Value Then
                TextBox1.Value = Worksheets("Données").Range("A" & a).Value
     
                Exit For
            End If
     
        Next a
     
        'il faut que la propriété ColumnCount soit sur 2 si tu veux 2 colonnes !!!
        With List_Residents
     
            .AddItem ComboBox_Resident.Text
            .List(.ListCount - 1, 1) = TextBox1.Text
     
        End With
     
    End Sub
    Autre chose, évites, autant que possible, les "GoTo quelque chose", le code est plus difficile à maintenir par la suite ! Dans une boucle, un Exit For va très bien.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comment alimenter un contrôle ListBox ?
    A condition que la liste comprenne tous les lignes de la plage de données, le plus simple est l'utilisation de la propriété RowSource
    Exemple : sSi la liste de données se trouve dans la feuille nommée db et est comprise entre A1 et F11 avec comme première ligne les étiquettes de colonnes,
    La syntaxe est RowSource = db!A2:F11
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub UserForm_Initialize()
     With Me.ListBox1
     .RowSource = "db!A2:F11"
     .ColumnCount = 6 ' Nbre de colonnes affichées
     .ColumnHeads = True ' Affiche les étiquettes de colonnes
     End With
    End Sub
    Comment récupérer les données sélectionnées par le clic dans la liste ?
    La propriété ListIndex du contrôle ListBox permet de connaître la ligne sélectionnée dans la liste. Le premier élément sélectionné étant égal à 0

    Voici un code rapide qui charge la liste contenue dans une feuille à condition que cette liste contienne en première ligne les étiquettes de colonnes et qu'elle débute en cellule A1
    Il faut dans le UserForm : 1 contrôle ListBox1 et 2 contrôles TextBox1 et TexBox2
    Modifié le nom de la feuille ;qui se trouve dans la constante SheetName. Cette feuille doit se trouver dans le classeur où se trouve le UserForm
    Procédure à placer dans le code du UserForm
    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
    Option Explicit
    Const SheetName As String = "db" ' Nom de la feuille
    Dim rng As Range, rngdata As Range
     
    Private Sub ListBox1_Click()
     With Me.ListBox1
      TextBox1 = rngdata(.ListIndex + 1, 1) ' 1ère colonne de la ligne sélectionnée
      TextBox2 = rngdata(.ListIndex + 1, 2) ' 2ème colonne de la ligne sélectionnée
     End With
    End Sub
     
    Private Sub UserForm_Initialize()
     Set rng = ThisWorkbook.Worksheets(SheetName).Range("A1").CurrentRegion
     With rng
      Set rngdata = .Offset(1).Resize(.Rows.Count - 1)
     End With
     With Me.ListBox1
     .RowSource = rngdata.Address(external:=True)
     .ColumnCount = rngdata.Columns.Count ' Nbre de colonnes affichées
     .ColumnHeads = True ' Affiche les étiquettes de colonnes
     End With
    End Sub
    A lire éventuellement USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire.


    [EDIT]
    A la ligne 13 du code publié, j'avais laissé la valeur constante "db", alors qu'il fallait placer à la place la constante nommée SheetName
    La correction a été faite.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre confirmé
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2013
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2013
    Messages : 68
    Par défaut Relation Listbox Textbox
    Merci infiniment pour votre aide.
    Avec tout cela, je vais pouvoir me débrouiller.
    J'avais malgré tout avancé un peu sur le sujet me suis confronté à un autre problème que j'ai exposé ce jour dans un autre post.

    Merci encore!!

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

Discussions similaires

  1. [Débutant] recherche dynamique listBox - textBox
    Par Markast dans le forum Windows Forms
    Réponses: 5
    Dernier message: 05/06/2012, 11h46
  2. listbox textbox et base de donnee local
    Par AcideBlood dans le forum VB.NET
    Réponses: 20
    Dernier message: 19/04/2011, 09h40
  3. [AJAX] copier-coller de listbox->textbox
    Par pascb423 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/12/2008, 08h45
  4. [VBA-E] relation label / textbox
    Par comanche dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/04/2007, 23h35
  5. [VB.NET] Probleme d'affichage entre ListBox/TextBox
    Par Monster77 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/08/2004, 11h02

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