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 :

Garnissage d'une listbox à partir d'un tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 3
    Par défaut Garnissage d'une listbox à partir d'un tableau
    Bonjour tout le monde,

    Voilà, ça fait 2 jours que je bute sur un truc stupide.
    Dans un formulaire de gestion d'adhérents, je fais figurer 2 listbox : l'une pour les interlocuteurs de l'entreprise sélectionnée, l'autre pour ses métiers.
    J'ai fait appel à une routine assez simple, qui fonctionne pour les interlocuteurs et m'affiche bien les 9 colonnes que j'ai demandées. Voici le bout de programme, qui me donne entière satisfaction, ainsi que la copie écran du résultat.

    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
     Dernligne = Worksheets("Interlocuteurs").Range("A65000").End(xlUp).Row
        Dim Tableau1_Interlocuteurs()
        ReDim Tableau1_Interlocuteurs(Dernligne - 1, 10)
     
        'Je commence par remplir un premier tableau en parcourant toute la feuille des interlocuteurs
        Compteur = 0
        For i = 2 To Dernligne
            If Worksheets("Interlocuteurs").Cells(i, "B") = Numero_Adhérent_Recherché Then
                Tableau1_Interlocuteurs(Compteur, 0) = Worksheets("Interlocuteurs").Cells(i, "A")
                Tableau1_Interlocuteurs(Compteur, 1) = Worksheets("Interlocuteurs").Cells(i, "D")
                Tableau1_Interlocuteurs(Compteur, 2) = Worksheets("Interlocuteurs").Cells(i, "E")
                Tableau1_Interlocuteurs(Compteur, 3) = Worksheets("Interlocuteurs").Cells(i, "F")
                Tableau1_Interlocuteurs(Compteur, 4) = Worksheets("Interlocuteurs").Cells(i, "G")
                Tableau1_Interlocuteurs(Compteur, 5) = Worksheets("Interlocuteurs").Cells(i, "H")
                Tableau1_Interlocuteurs(Compteur, 6) = Worksheets("Interlocuteurs").Cells(i, "I")
                Tableau1_Interlocuteurs(Compteur, 7) = Worksheets("Interlocuteurs").Cells(i, "J")
                Tableau1_Interlocuteurs(Compteur, 8) = Worksheets("Interlocuteurs").Cells(i, "C")
                Compteur = Compteur + 1
            End If
        Next
     
        'Puis je charge les éléments dans un tableau dont la taille correspond aux nombre d'éléments trouvés.
        Dim Tableau2_Interlocuteurs()
        ReDim Tableau2_Interlocuteurs(Compteur - 1, 9)
        For i = 0 To Compteur - 1
            For j = 0 To 8
                Tableau2_Interlocuteurs(i, j) = Tableau1_Interlocuteurs(i, j)
            Next
        Next
     
        'Et pour finir, je garnis la listbox des interlocuteurs
        Me.LB_Interlocuteurs.List = Tableau2_Interlocuteurs
    Nom : Interlocuteurs.jpg
Affichages : 566
Taille : 53,7 Ko

    Jusque là tout va bien, j'ai planté le décors. C'est maintenant que ça se corse.
    J'ai adapté cette routine pour les métiers, pour une listbox qui ne comporte que 2 colonnes (contre 9 dans la précédente).
    Elle tourne apparemment correctement, et en suivant le déroulement pas à pas, je trouve bien dans "Tableau2_Métiers" l'identifiant en (i,0) et l'intitulé du métier en (i,1).
    Par contre, dans la listbox "LB_Interlocuteurs.List", je ne retrouve que l'affichage de l'identifiant. L'intitulé du métier n'est pas chargé dans la listbox.
    Voici le bout de code concerné, ainsi que la copie écran du résultat. Il me semble pourtant que tout est en identique au premier code, mais peut-être que je deviens aveugle ?

    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
        Dernligne = Worksheets("Métiers Adhérents").Range("A65000").End(xlUp).Row
        Dim Tableau1_Métiers()
        ReDim Tableau1_Métiers(Dernligne - 1, 1)
     
        'On commence par remplir un premier tableau en parcourant toute la feuille des métierss
        Compteur = 0
        For i = 2 To Dernligne
            If Worksheets("Métiers Adhérents").Cells(i, "B") = Numero_Adhérent_Recherché Then
                Tableau1_Métiers(Compteur, 0) = Worksheets("Métiers Adhérents").Cells(i, "A")
                Tableau1_Métiers(Compteur, 1) = Worksheets("Métiers Adhérents").Cells(i, "C")
                Compteur = Compteur + 1
            End If
        Next
     
        'Puis je charge les éléments dans un tableau dont la taille correspond aux nombre d'éléments trouvés.
        Dim Tableau2_Métiers()
        ReDim Tableau2_Métiers(Compteur - 1, 1)
        For i = 0 To Compteur - 1
            For j = 0 To 1
                Tableau2_Métiers(i, j) = Tableau1_Métiers(i, j)
            Next
        Next
     
        'Et pour finir, je garnis la listbox des métiers
        Me.LB_Métiers.List = Tableau2_Métiers
    Nom : Métiers.jpg
Affichages : 569
Taille : 6,1 Ko

    Quelqu'un aurait-il une idée pour m'indiquer dans quelle direction chercher ? Qu'il en soit remercié par avance.

  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 Claude, bonjour le forum,

    N'aurais-tu pas omis de préciser la propriété [ColumnCount] = 2...
    Sinon, une autre approche de ton code :

    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
    Dim TM As Variant 'déclare la variable TM (Tableau des Métiers)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim TA() As Variant 'déclare la variable TA (Tableau des Adhérents)
    Dim J As Integer 'déclare la variable J (incrément)
     
    TM = Range("A1").CurrentRegion 'définit le tableau TM
    J = 1 'initialise J
    For I = 2 To UBound(TM, 1) 'boucle sur toutes les lignes du tableau TM (en partant de la seconde)
        If TM(I, 2) = Numero_Adhérent_Recherché Then 'condition : si la valeur en colonne 2 du tableau TM est égale à la variable "Numero_Adhérent_Recherché"
            ReDim Preserve TA(1 To 2, 1 To J) 'redimensionne le tableau de lignes TL (2 ligne, J colonnes)
            TA(1, J) = TM(I, 1) 'récupère la valeur en colonne 1 du tableau TM dans la ligne 1 du tableau TL
            TA(2, J) = TM(I, 3) 'récupère la valeur en colonne 3 du tableau TM dans la ligne 2 du tableau TL
            J = J + 1 'incrément J
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle
    Me.LB_Métiers.List = Application.Transpose(TA) 'alimente la listbox

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 412
    Par défaut
    dans ta routine au début essai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    
    ReDim Tableau1_Métiers(Dernligne - 1, 2)
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    
    ReDim Tableau1_Métiers(Dernligne - 1, 1)

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/09/2014, 23h08
  2. dessiner une courbe à partir d'un tableau de valeur
    Par bob75018 dans le forum C++Builder
    Réponses: 8
    Dernier message: 15/06/2007, 04h29
  3. Populer une DBGrid à partir d'un tableau
    Par toure32 dans le forum Delphi
    Réponses: 10
    Dernier message: 05/03/2007, 18h11
  4. Réponses: 2
    Dernier message: 26/09/2006, 11h14
  5. [MySQL] Comment ecrire dans une BDD à partir d'un tableau ?
    Par weed dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 16/09/2005, 15h53

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