Dans un ListBox : Séparer les colonnes et les Formater

Bonjour

Dans un ListBox avec l’option « ColumnHeads » on peut matérialiser les colonnes, mais cela n’apparait que juste dans une barre au-dessus des dites colonnes.

Je n’ai pas trouvé le moyen de le faire réellement à l’intérieur du corps du ListBox, Est-ce possible ?

J’ai aussi vu la possibilité toujours dans les propriétés, avec l’option « TextAlign » que l’on pouvait formater ces mêmes colonnes à gauche, au centre, ou a droite », mais cela agit alors pour toutes les colonnes.

Est-il possible directement à l’intérieur du code du ListBox de

1) paramétrer ce formatage

2) Et de faire éventuellement par colonne

Merci

Bonsoir

J'ajoute un fichier exemple pour être plus clair

Bonjour,

Tu fais l'erreur que beaucoup font, une listeBox avec la propriété columns ne signifie pas que tu peu avoir des COLONNES DIFFÉRENTES mais que L'AFFICHAGE se fait par colonne au lieu de liste. En d'autre terme, l'affichage est horizontal au lieu de vertical.

Mais il n'y a toujours qu'une seule "colonne"

A+

Bonjour

Je croix comprendre ce que tu veux dire, si on fait le parallèle avec Excel, on peut axer un tableau en vertical, ce qui est généralement ce que tout le monde fait, mais aussi horizonnèrent.

Alors, en Vertical j’ai par exemple mes articles qui s’étalent de A1 à A20 ou en Horizontal, ils s’étalent alors de A1 à T1.

Je veux dire que pour moi, si l’affichage était horizontal, toutes les données devraient être listes sur une seule ligne, non ?

Donc en conséquence, il faut admettre que, dans une ListBox, si je suis bien ton explication, que je mets nullement en doute, mais que j’ai du mal à cerner, cela veux dire que si je demande de lister les colonnes A, B et C, il va lister horizontalement en 1er la colonne A (Car pour l’instant c’est bien horizontal et non vertical), puis il va faire une coupure dans la liste, vous venir se repositionner en tête de liste avec un décalage sur la droite, puis ainsi de suite.

Mais alors, si tel est bien le cas, si on est capable techniquement de demander de faire une coupe après la liste A, pour lister la colonne B en demandant que l’affichage se face à droite de la colonne A, à tant de caractères et sur telle largeur, on devrait être capable de demander à ce que l’affichage soit centré (par exemple) a partir de cette coupure, non ?

Re,

Pour ma première intervention sur ce forum je me suis lamentablement planter, en effet, j'ai confondu avec la ListBox de VB6, je code dans différent langages et ça m'arrive.

Excel dispose d'une listBox que l'ont peu configurer sur plusieurs colonnes. Mais comme tu l'a constaté ont ne peu pas disposer les alignement par colonnes.

Par contre pour remplir tes colonnes tu peu mettre la propriété ListFillRange à A5:D20 et ColumnCount à 4. par exemple

Sorry

A+

Re,

Tout le monde peut se tromper

Mais c'est bien dommage, que l'on ne puisse pas matérialiser les colonnes avec un trait de séparation, c'est pas trop grave.

On peut toujours le faire en rusant avec un artifice..

Mais que l'on ne puisse pas formater les colonnes individuellement, cela est très pénalisant et pour le moins très disgracieux

Bonjour

Essayes la ListView

Bonjour Banzai64

Merci, mais je ne connaissais pas ce ListView

Peux-tu m'en dire un peu plus pour sa mise œuvre ou m'aiguiller

(J'ai un fichier exemple éventuellement dans mon post)

Merci

A+

Bonjour

Tu trouveras certainement beaucoup de renseignements avec notre ami

Juste un conseil/avis : Ta base de données évites le saut des colonnes, la programmation sera allégée

Re,

Merci, la difficulté, avec les tutos de notre ami, c’est qu’ils sont remarquablement bien fait, mais ils sont plutôt costauds !

Ils s’adressent de préférence à des personnes bien expérimenté en la matière.

Déjà pour le début, comment insérer un ListView, heureusement je viens de finir par trouver, c’est déjà un début

Reste le plus gros à faire.

Ta base de données évites le saut des colonnes, la programmation sera allégée

J'avoue que je comprends pas bien ce que tu veux dire

Pourrais-tu détailler

Bonsoir

Un exemple

Bonjour,

Réponse hors sujet. A supprimer Svp

Bonjour

Merci pour ton exemple

Je vois que les possibilités sont toutes autres

En revanche, l’approche semble bien différente

Et certainement, de prime tout au moins, parait plus complexe.

Dans ton exemple, les colonnes sont toutes à la suite

J’ai rajouté une colonne espacée en I

Pour la visualisé, j’ai rajouté une nouvelle variable et

        For Ib = 9 To 9
          .ListItems(Nb).ListSubItems.Add , , WsBdD.Cells(J, Ib)
        Next Ib

Cela fonctionne, mais je suppose que ce n’est pas forcément le code le plus simple pour une seule colonne. ?

J’ai tenté d’obtenir le même effet, avec le ListView qu’avec le ListBox

En ce qui concerne le positionnement sur le bon thème

Soit me positionner sur le Thème A en cliquant par exemple sur un article de ce thème.

Je suppose que c’est possible ??

Mais je ne suis parvenu à trouver le bon code

Bonjour

Outre mes 2 questions précédentes

Je rencontre un problème plus important

En essayant de me servir de ton exemple pour faire un ListView à l’intérieur de mon fichier je rencontre une erreur

« Type défini par l’utilisateur non définie »

Il y a 2 choses qui m’interrogent

1) Je vois que tu alimente le ListWiew à partir du ListBox ?

2) Tu as fait une BdD, pourquoi et est obligatoire de procéder ainsi ?

Merci si tu as le temps de réponde à toutes ces questions

Bonjour

Désolé je n'avais pas compris que tu attendais des réponses

christG a écrit :

Cela fonctionne, mais je suppose que ce n’est pas forcément le code le plus simple pour une seule colonne. ?

Comme tu dis ce n'est pas le moyen le plus simple, pourquoi faire une boucle pour 1

christG a écrit :

Soit me positionner sur le Thème A en cliquant par exemple sur un article de ce thème.

Je suppose que c’est possible ??

Oui c'est possible, la macro se positionne sur le bon article avec le thème choisit en début de page

christG a écrit :

« Type défini par l’utilisateur non définie »

Sans le fichier très dur de trouver

christG a écrit :

1) Je vois que tu alimente le ListWiew à partir du ListBox ?

Où ça ?

En principe ils sont indépendants. Il n'y a que la TextBox1 de commune

christG a écrit :

2) Tu as fait une BdD, pourquoi et est obligatoire de procéder ainsi ?

Non rien n'est obligatoire, c'est juste pour simplifier la programmation, il est plus aisé de faire une boucle et de récupérer les infos que de taper x fois le même code car les colonnes sont un peu éparpillées

Re,

Merci pour tes réponses

Comme tu dis ce n'est pas le moyen le plus simple, pourquoi faire une boucle pour

La réponse est toute bête

Parce que dans ton exemple, je n'ai pas trouvé ce code et que je n'ai pas trouvé le bon code par moi-même

Oui c'est possible, la macro se positionne sur le bon article avec le thème choisit en début de page

Oui mais dans ton exemple, cela fonctionne bien avec le ListBox, mais pas avec le ListView ...

Où ça ?

En principe ils sont indépendants. Il n'y a que la TextBox1 de commune

Autant pour moi, tu as raison

christG a écrit:« Type défini par l’utilisateur non définie »

Sans le fichier très dur de trouver

Oui évidement, je te mets quand-même la ligne en jaune, des fois que cela te permettrais d'avoir une intuition

Mais , je n'ai pas constitué de feuille récapitulative comme toi "BdB"

de fait tout est issu de la Feuille 1, cela vient peut être d'une erreur de ce côté là

Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)

Bonsoir

Ton code

        For Ib = 9 To 9
          .ListItems(Nb).ListSubItems.Add , , WsBdD.Cells(J, Ib)
        Next Ib

ma réponse

Banzai64 a écrit :

Comme tu dis ce n'est pas le moyen le plus simple, pourquoi faire une boucle pour 1

Ne pas oublier la fin de la réponse le 1

Tu peux faire directement

.ListItems(Nb).ListSubItems.Add , , WsBdD.Cells(J, 9)

Plus simple non ?

christG a écrit :

Oui mais dans ton exemple, cela fonctionne bien avec le ListBox, mais pas avec le ListView .

Si tu cliques sur un item de la ListView , en colonne B tu as bien le thème (le premier de la série) et la cellule sélectionné est bien l'item sélectionné

Quand je dis qu'il faut le fichier , ce n'est pas une ligne qu'il me faut

Tu m'as marqué la ligne en faute (la ligne de début de la macro), cela veut dire que l'interpréteur a trouvé une erreur dans la macro

Une mauvaise déclaration par exemple

sting à la place de String

Mais là je travaille dans le vide

A suivre avec ton fichier

Bonjour

J’essaye toujours de faire un ListView en partant de ton exemple

Mais en faisant tout à partir de la « Feuil1 » soit sans passer par une liste récapitulative « BdB »

Je n’ai pas de message d’erreur, mais je n’ai rien de visualisé dans le ListView.

Par ailleurs je ne comprends pas à quoi correspond cette clé « K » ?

ListItems.Add , "K" & J, WsF1.Range("A" & J)

Bonsoir

Tu es libre de faire comme tu veux (même si je pense que ce n'est pas la bonne méthode)

Avec des colonnes qui ne suivent pas tu es obligé (à 90%) de te passer d'une boucle

Tu dois ajouter les éléments 1 par 1 avec un code du style

(Macro non fonctionnelle)

' Pour le 1er élément
.ListItems.Add , "K" & J, WsF1.Range("A" & J)
' Pour les autres (exemples : les numéros des colonnes ne sont pas bons)
ListItems(Nb).ListSubItems.Add , , WsF1.Cells(J, 2)
ListItems(Nb).ListSubItems.Add , , WsF1.Cells(J, 4)
ListItems(Nb).ListSubItems.Add , , WsF1.Cells(J, 5)
' etc etc etc

Pour la clé, elle me sert à stocker la ligne qui contient les informations que je note dans la listview, mais elle est utile pour d'autre cas

Un précédent message je t'avais indiqué un lien pour une explication sur les ListView (l'as-tu vu ?)

Bonjour

J’aurai peut-être dire pourquoi je souhaitais faire comme cela,

C’est que mon tableau est très volumineux et donc de faire une nouvelle feuille récapitulative alourdiraient inévitablement son traitement, sauvegarde et chargement.

Donc je préfère me passer de boucles quitte à passer plus de temps à écrire ce ListVeiw

J’ai donc laissé l’instruction telle quelle comme tu semble le préconiser

ListItems.Add , "K" & J, WsF1.Range("A" & J)

(Sans trop comprendre à quelle ligne elle fait référence, sans doute la ligne 1, puisque c’est la 1ère ligne de donnée ?)

Puis j’ai modifié le reste ainsi

    For J = 2 To WsF1.Range("A" & Rows.Count).End(xlUp).Row
      If WsF1.Cells(J, 1) Like "*" & Me.TextBox1 & "*" Then
        'on rempli la première colonne de la listview avec la valeur de la variable et une clé (utile par la suite : Numéro de ligne)
        .ListItems.Add , "K" & J, WsF1.Range("A" & J)
        Nb = Nb + 1                                         ' Nombre d'enregistrement dans la Listview
        'on remplit les autres colonnes de la listview
        'For I = 2 To 7
        '  .ListItems(Nb).ListSubItems.Add , , WsF1.Cells(J, I)
        'Next I
        .ListItems(Nb).ListSubItems.Add , , WsF1.Cells(J, 2)
        .ListItems(Nb).ListSubItems.Add , , WsF1.Cells(J, 3)
        .ListItems(Nb).ListSubItems.Add , , WsF1.Cells(J, 4)
        .ListItems(Nb).ListSubItems.Add , , WsF1.Cells(J, 5)
        .ListItems(Nb).ListSubItems.Add , , WsF1.Cells(J, 6)
        .ListItems(Nb).ListSubItems.Add , , WsF1.Cells(J, 7)
        .ListItems(Nb).ListSubItems.Add , , WsF1.Cells(J, 8)

Mais je l’avais déjà fait avant de revenir vers toi

Et je n’ai aucune donnée de listé dans mon ListView

(Mis à part, la ligne d’entête, qui elle est bien présente)

Un précédent message je t'avais indiqué un lien pour une explication sur les ListView (l'as-tu vu ?)

Oui, je l’ai bien lu, j’ai également bien vu le passage sur cette « Clé », malheureusement si il y a une courte explication sur son but, il n’y a aucun renseignement sur sa mise en œuvre.

Rechercher des sujets similaires à "listbox separer colonnes formater"