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 :

ListBox à plusieurs colonnes pour les en-têtes d'un tableau structuré [XL-2019]


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
    Retraité
    Inscrit en
    Mars 2022
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2022
    Messages : 60
    Par défaut ListBox à plusieurs colonnes pour les en-têtes d'un tableau structuré
    Bonjour,

    En adaptant un exemple trouvé ici sur Internet j’ai écrit le code ci-joint pour remplir une Listbox de formulaire avec plusieurs colonnes à partir de Tableaux Structurés.

    Si celui-ci marche à merveille pour la partie "Databodyrange", il me pose 2 problèmes
    1) Je ne comprends pas bien ce que fait la fonction Evaluate
    2) J’ai essayé en vain d’adapter le code pour la ligne des titres de colonnes en créant une ListBox dédiée (j’imagine qu’il faut utiliser HeaderRowRange voire Range au lieu du DataBodyRange mais sans succès …..)

    Quelqu’un peut-il m’aider, sinon m’éclairer ?
    Merci d’avance

    [CODE]Private Sub UserForm_Initialize()

    Set ts_Recap = Sommaire.Range("tbl_Recap").ListObject
    ColVisu = Array(4, 3, 2, 8)
    LargeurCol = Array(140, 80, 150, 40)

    Me.lstboxContrats.ColumnCount = UBound(ColVisu) + 1
    Me.lstboxContrats.ColumnWidths = Join(LargeurCol, ";")
    Me.lstboxContrats.List = Application.Index(ts_Recap.DataBodyRange, Evaluate("Row(1:" & ts_Recap.ListRows.Count & ") "), ColVisu)
    Me.lstboxTitres.ColumnCount = UBound(ColVisu) + 1
    Me.lstboxTitres.ColumnWidths = Join(LargeurCol, ";")
    Me.lstboxTitres.List = Application.Index(Sommaire.ListObjects("tbl_Recap").HeaderRowRange, Evaluate("Row(1:2)"), ColVisu)
    'Me.lstboxTitres.List = Application.Index(Sommaire.ListObjects("tbl_Recap").Range, Evaluate("row(1:2"), ColVisu) '"row(1:1)"), ColVisu)
    Set ts_Recap = Nothing

    End Sub/CODE]

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, modifie cette ligne:

    Me.lstboxTitres.List = Application.Index(ts_Recap.HeaderRowRange, 1, ColVisu)

  3. #3
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2022
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2022
    Messages : 60
    Par défaut
    Citation Envoyé par Franc Voir le message
    Salut, modifie cette ligne:

    Me.lstboxTitres.List = Application.Index(ts_Recap.HeaderRowRange, 1, ColVisu)
    Bonsoir Franc,

    merci pour ta proposition mais malheureusement il s'agit là d'une solution que j'avais testée avec le résultat suivant:
    les 4 colonnes définies dans l'array (pour info : souscripteur, produit, référence et Investi) sont bien renvoyées mais dans le formulaire elles apparaissent l'une en dessous de l'autre dans la première colonne de la listbox des Titres
    voir la PJ.

    Je sais qu'il y a d'autres solutions comme une boucle avec une variable tableau ou l'utilisation de label pour chaque titre mais je voudrais comprendre pourquoi cela ne fonctionne pas ...

    Merci de ton aide

    cordialement
    Images attachées Images attachées  

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Le problème c'est que tu exposes ton problème sans préciser exactement ce que tu voudrais et sans fournir de fichier exemple pour travailler dessus.
    Donc, avec un minimum d'explications, tu obtiendras un minimum de résultats.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je ne comprends pas bien ce que fait la fonction Evaluate
    La fonction génère un tableau contenant les lignes à exporter dans la liste
    Evaluate("Row(1:100)") génère un tableau de 1 à 100 éléments
    merci pour ta proposition mais malheureusement il s'agit là d'une solution que j'avais testée
    La fonction index avec une seule ligne ne renvoie pas un tableau multidimensionnel mais juste un simple tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tb = Application.Index(ts_Recap.HeaderRowRange, Evaluate("Row(1:2)"), ColVisu)
    MsgBox "lignes: " & UBound(tb, 1) 'lignes
    MsgBox "colonnes: " & UBound(tb, 2) 'colonnes
    changer pour un simple ligne : Evaluate("Row(1:1)")

  6. #6
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 254
    Par défaut
    Hello,
    c'est plus facile à faire en utilisant une Listview :
    Nom : Listview.gif
Affichages : 140
Taille : 167,0 Ko

    Ami calmant, J.P

  7. #7
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2022
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2022
    Messages : 60
    Par défaut
    Citation Envoyé par rMist2024 Voir le message
    La fonction génère un tableau contenant les lignes à exporter dans la liste
    Evaluate("Row(1:100)") génère un tableau de 1 à 100 éléments

    La fonction index avec une seule ligne ne renvoie pas un tableau multidimensionnel mais juste un simple tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tb = Application.Index(ts_Recap.HeaderRowRange, Evaluate("Row(1:2)"), ColVisu)
    MsgBox "lignes: " & UBound(tb, 1) 'lignes
    MsgBox "colonnes: " & UBound(tb, 2) 'colonnes
    changer pour un simple ligne : Evaluate("Row(1:1)")
    Bonjour rMist2024,

    Merci pour tes explications.
    J'ai en outre modifié la ligne de code comme suggéré mais il n'y a alors aucun renvoi dans la listbox des Titres (lstboxTitres)

    Pour faciliter la compréhension du problème j'ai recréé un fichier exemple dans lequel bien sûr le formulaire n'a pas grand intérêt (il s'agit seulement de mettre en évidence la ligne des titres pour chaque colonne de données)

    Merci de vos implications

    Cordialement
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/06/2014, 23h37
  2. Plusieurs projets pour les meme sources
    Par henryjeanl dans le forum Eclipse PHP
    Réponses: 1
    Dernier message: 26/09/2007, 23h42
  3. Listbox plusieurs colonnes - quitter les decimales
    Par Spani dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/08/2007, 15h28
  4. Plusieurs styles pour les liens
    Par oranoutan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 11/01/2006, 12h49
  5. [C#][ListBox]Plusieurs colonnes ?
    Par Kcirtap dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/10/2005, 10h20

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