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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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...

+ 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