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 :

VBA Excel: insertion d'un tableau dans une listbox


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Par défaut VBA Excel: insertion d'un tableau dans une listbox
    Bonjour,

    j'utilise une feuille excel qui se remplie grâce à un userform. cette feuille contient plusieurs colonnes:
    colonne A: Date (textbox1)
    colonne B: NOM (combobox1)
    colonne C: Montant (textbox2)
    colonne D: Taux (textbox3)

    Je voudrais lorsque je tape dans le combobox1 un nom existant déjà sur la feuille excel il m'affiche dans la listbox un petit tableau (résumé) sur les conditions déjà accordés à cette relation. (une relation peut avoir plusieurs offres anciennes).

    Merci pour votre aide

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Langazou, bonjour le forum,

    Si ta ListBox se nome ListBox1 et si j'ai bien compris, le code ci-dessous devrait te convenir :
    • Pense à adapter le nom de l'onglet O à ton cas.
    • Attention à bien conserver les variables en début de code hors procédures.
    • Ce genre de code n'accepte que 10 colonnes maximum dans la ListBox...

    Je t'ai rajouté la procédure Click de la LisBox1 que tu aménageras mais qui permet de récupérer la ligne de l'élément sélectionné...

    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
    45
    46
    47
    48
    49
    50
    51
    52
    Private O As Worksheet 'déclare la variable O (Onglet)
    Private TC As Variant 'déclare la variable TC (Tableau de Cellules)
    Private NL As Integer 'déclare la variable NL (Nombre de Lignes)
    Private NC As Byte 'déclare la variable NC (Nombre de Colonnes)
    Private LI As Integer 'déclare la variable LI (LIgne)
     
     
    Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
    Dim D As Object 'déclare la variable D (Dictionnaire)
    Dim I As Integer 'déclare la variable I (Incrément)
     
    Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
    TC = O.Range("A1").CurrentRegion 'définit le tableau de cellules TC
    NL = UBound(TC, 1) 'définit le nombre de lignes NL du tableau de cellules TC
    NC = UBound(TC, 2) 'définit le nombre de colonnes NC du tableau de cellules TC
    Me.ListBox1.ColumnCount = NC + 1 'définit la nombre de colonnes de la ListBox1 (une de plus que le nombre de colonnes de TC)
    Me.ListBox1.ColumnWidths = "0 pt" 'masque la première colonne de la ListBox1 (ou sera stocké le numéro de ligne)
    Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
    For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tableau de cellules TC (en partant de la seconde)
        D(TC(I, 2)) = "" 'alimente le dictionnaire avec la liste des noms en colonne 2 de TC
    Next I 'prochaine ligne de la boucle 1
    Me.ComboBox1.List = D.keys 'alimente la ComboBox1 avec la liste ds éléments du dictionnaire D sans doublon
    End Sub
     
     
    Private Sub ComboBox1_Change() 'au changement dans la ComboBox1
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim J As Byte 'déclare la variable J (incrément)
     
    Me.ListBox1.Clear 'vide la ListBox1
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'si nouveau nom, sort de la procédure
    For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tableau de cellules TC (en partant de la seconde)
        If TC(I, 2) = Me.ComboBox1.Value Then 'condition : si la valeur ligne I, colonne 2 de TC est égale à la valeur de la ComboBox1
            With Me.ListBox1 'prend en compte la ListBox1
                .AddItem 'ajoute un élément
                .Column(0, .ListCount - 1) = I 'stocke dans la colonne masquée le numéro de ligne I
                For J = 1 To NC 'boucle 2 : sur toutes les colonnes J de TC
                    .Column(J, .ListCount - 1) = TC(I, J) 'récupère dans la colonne J de la ListBox1 la valeur ligne I colonne J de TC
                Next J 'prochaine colonne de la boucle 2
            End With 'fin de la prise en compte de la ListBox1
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle 1
    End Sub
     
     
    Private Sub ListBox1_Click() 'au clic dans la ListBox1
    With Me.ListBox1 'prend en compte la ListBox1
        LI = .Column(0, .ListIndex) 'récupère dans la variable LI le numéro de ligne de l'élément sélectionné
    End With 'fin de la prise en compte de la ListBox1
    MsgBox "l'élément sélectionner se troiuve en ligne : " & LI 'message
    'tu remplaceras le message au-dessus par ton code connaissant le numéro de ligne de l'élément sélectionné
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Par défaut
    Bonjour Thautheme,

    Merci pour votre réponse.

    je suis débutant en VBA et j'ai pas su comment l'adapter à mon cas. si vous pouvez jeter un coup d’œil sur mon exemple ci dessous.

    http://www.cjoint.com/c/EHqoWYUhkgR

    je voudrais créer une listbox qui affiche par exemple les dernières consultations de patrick sous forme d'un petit tableau lorsque je tape son nom dans le combobox (+10 colonnes)

    Merci d'avance.

  4. #4
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir Langazou, bonsoir le forum,

    Le problème avec ci-joint c'est qu'il faut d'abord que tu zippes ton fichier (Envoyer vers / Dossier compressé) et qu'ensuite tu le mettes en pièce jointe sinon il est inutilisable (ce qui est le cas actuellement)...

  5. #5
    Membre confirmé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Par défaut
    bonsoir,

    c'est bon j'ai compressé le fichier.

    http://www.cjoint.com/c/EHqrMK8J2aR

    Bonne reception

  6. #6
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Désolé Langazou mais tu utilises un code qui ne fonctionne pas et provoque un message d'erreur chez moi car j'utilise Excel 64 bits. Le système que je t'ai proposé et le code du Module1 semblent incompatibles...
    Je parviens, en mettant tout le code du Module1 en commentaires, à lancer ton UserForm mais ce n'est pas du tout la problématique exposée au début. Je n'ai ni l'envie ni le courage de réécrire tout le code... Au fait, Elle est où la ListtBox ?...
    Autre chose, quand tu envoies un fichier pour obtenir de l'aide, évite de masquer les onglets qui contiennent les données...

  7. #7
    Membre confirmé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Par défaut
    Re,

    le module 1 servira uniquement à utiliser la molette de la souris. c'est bon je l'ai supprimé et ça marche très bien chez moi. merci d'essayer le nouveau fichier.
    TEST (2).xlsm.

    Merci pour ton retour.

  8. #8
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Deux questions :

    • Où es la fameuse Listbox ?
    • À quoi sert la ComboBox1 ?

    à te lire...

  9. #9
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par Thautheme Voir le message
    Re,

    Désolé Langazou mais tu utilises un code qui ne fonctionne pas et provoque un message d'erreur chez moi car j'utilise Excel 64 bits.
    J'ai mis toutes les mouseries en commentaire. Cela ne fait que de ne pas activer la molette de la souris. Si tu acceptes de ne pas utiliser la roue de la souris dans le ListBox, tu peux même zapper le module au complet.

    Pour le reste, même si on sélectionne un nom, il n'y rien qui s'affiche et tous ses nombres, ou presque, sont considérés comme du texte par Excel.
    Fichiers attachés Fichiers attachés

  10. #10
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Ce que j'ai le moins compris Clément, c'est la rapport entre le premier post et le fichier joint. Je pensais qu'en sélectionnant un nom dans la ComboBox, il voulait alimenter une ListBox contenant toutes les lignes où ce nom apparait pour ensuite pouvoir sélectionner la bonne. Mais point de ListBox et une ComboBox1 masquée dont je n'ai toujours pas compris l'intérêt !..
    C'est peut -être dans les "mouseries" (arf !) qu'étaient les réponse mais comme j'ai supprimé et que Langazou ne réponds pas, je waite et je see...

  11. #11
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour Thautheme,

    De mémoire, cela me semble être le propre du personnage. Mister Danslevague qui veut que l'on sache ce qu'il veut avant lui.

  12. #12
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Arf ! et moi qui est mis ma boule de cristal sur le bon coin... Mais heureusement pour lui, je sais lire dans le marc de nescafé...

  13. #13
    Membre confirmé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Par défaut
    Bonjour,

    Désolé j'ai oublié de garder un seul combobox (c'est bon j'ai fait les modif). ma requete c'est d'avoir une idée sur l'historique (montant+periode+taux) pour chaque nom tapé dans le combo et qui existe sur ma feuille excel. je ne sais pas si la création d'une listbox fera l'affaire. j'ai une autre idée mais reste la concrétisation:
    - si le nom tapé dans le combo existe sur la feuille excel, il y'aura filtrage du tableau par ce meme nom (en arrière plan) et reste l'affichage du résultat dans un listbox.
    TEST.zip

    Merci.

  14. #14
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    Regarde si ça te convient...
    Fichiers attachés Fichiers attachés

  15. #15
    Membre confirmé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2015
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 197
    Par défaut
    Bonjour,

    Merci beaucoup Thautheme et Bonne journée. ;-)

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

Discussions similaires

  1. VBA Excel - passage a la ligne dans une MsgBox
    Par peyro51 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/11/2007, 16h32
  2. [vba-e] insertions de plusieurs cellules dans une
    Par titeZ dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/04/2007, 17h14
  3. Insertion d'un tableau dans une interface
    Par the java lover dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/03/2007, 13h04
  4. vba excel : insertion d image gif dans feuille excel
    Par chamus dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/01/2007, 13h16
  5. [VBA][OLE] insertion d'un graph dans une diapo Powerpoin
    Par Nexussmb dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/10/2005, 16h22

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