Ajouter des "Tag" ou "Key" aux Items d'une ListBox (Façon ListView)

YANN-56

XLDnaute Barbatruc
Bonsoir à ceux qui passeront par ici,

Je suis en train de me battre avec pour remplacer une ListView par une ListBox,
tout en conservant la possibilité d'attribuer aux Items un "Tag" et un "Key"

Il serait possible d'ajouter simplement autres colonnes à la liste,
et de venir récupérer les SubItems par suite d'un Click sur celle-ci.
Mais là, je ne suis pas très à l'aise, et je préfère la première solution qui me suffit.

L'exemple joint vous montrera mon incapacité à gérer les "List(x). ...:p

Merci pour votre aide, si vous disposez d'un morceau de temps.......J'en gagnerai énormément!

Yann
 

Pièces jointes

  • TEST_LISTBOX.xls
    32 KB · Affichages: 77
  • TEST_LISTBOX.xls
    32 KB · Affichages: 79
  • TEST_LISTBOX.xls
    32 KB · Affichages: 81

Habitude

XLDnaute Accro
Re : Ajouter des "Tag" ou "Key" aux Items d'une ListBox (Façon ListView)

Rebonjour

@david
Les tags évite de travailler à la fois sur la liste, à la fois sur la feuille.
Sans les tags, pour un tri, tu dois trier les données sur la feuille et ensuite refaire un AddItem.
Avec le tag qui conserve le numéro de la ligne, tu peux trier la liste directement. L'ordre entre la liste et la feuille ne sont plus les même.
 

david84

XLDnaute Barbatruc
Re : Ajouter des "Tag" ou "Key" aux Items d'une ListBox (Façon ListView)

Re
Les tags évite de travailler à la fois sur la liste, à la fois sur la feuille.
Sans les tags, pour un tri, tu dois trier les données sur la feuille et ensuite refaire un AddItem.
Avec le tag qui conserve le numéro de la ligne, tu peux trier la liste directement. L'ordre entre la liste et la feuille ne sont plus les même.
Peut-être que je comprends mal ce que tu veux m'expliquer mais jusqu'à présent quand j'ai besoin de trier les données dans un code, je ne les trie pas sur la feuille : j'utilise un Quick Sort.
Peux-tu mettre un exemple concret de ce que tu veux dire ?
Merci !
A+
 

Habitude

XLDnaute Accro
Re : Ajouter des "Tag" ou "Key" aux Items d'une ListBox (Façon ListView)

Re

Dans l'exemple ci-joint
Avec Tag et Sans Tag

Ton code sans Tag, en mode liste inversé ne donne pas le bon résultat.
 

Pièces jointes

  • TEST_LISTBOX.xls
    40 KB · Affichages: 68
  • TEST_LISTBOX.xls
    40 KB · Affichages: 63
  • TEST_LISTBOX.xls
    40 KB · Affichages: 65

david84

XLDnaute Barbatruc
Re : Ajouter des "Tag" ou "Key" aux Items d'une ListBox (Façon ListView)

Re
Ok, merci pour cet exemple.
Mais là encore, je n'ai pas absolument besoin de Tag pour obtenir le même résultat (l'utilisation de Match par exemple le fait également).
Maintenant que j'ai cette propriété en tête, je vais regarder d'autres exemples utilisant cette propriété pour m'en faire une idée plus précise et repérer les situations où elle me semble être "incontournable".
Le fait par exemple qu'elle évite de passer par des variables publiques ou pour le moins déclarées en tête de module me paraît intéressant. En fait, j'ai l'impression que Tag sert à stocker des informations, les-dites infos devenant de fait des "propriétés" du contrôle et peuvent être utilisées comme telles.
Est-ce cela ?
A+
 

Fo_rum

XLDnaute Accro
Re : Ajouter des "Tag" ou "Key" aux Items d'une ListBox (Façon ListView)

Bonjour,

Re
Le fait par exemple qu'elle évite de passer par des variables publiques ou pour le moins déclarées en tête de module me paraît intéressant.

Si tu ne passes par une variable, tu es obligé de déterminer à chaque fois la donnée nécessaire et ce peut-être des lignes plus ou moins compliquées.
Pour garder des informations, il y a plus d'une façon. Avec un contrôle "ListBox", on peut utiliser des colonnes supplémentaires, ou des concaténations (voir l'exemple joint) ou ...
 

Pièces jointes

  • LISTBOX_Colonnes.xls
    40 KB · Affichages: 62

Habitude

XLDnaute Accro
Re : Ajouter des "Tag" ou "Key" aux Items d'une ListBox (Façon ListView)

Re
Le tag peut stocker a peu près n'importe quoi.
Il améliore de facon considérable les performances.
Pas tres utile en listbox, c'est une incontournable des listview.

Il permet d'indexer l'item et évite ainsi le match ou le Find.
C'est un accès direct aux données.
Car sur 300 000 éléments, le match et le find deviennent vite inefficace.

Attendons l'exemple de Yann
 

YANN-56

XLDnaute Barbatruc
Re : Ajouter des "Tag" ou "Key" aux Items d'une ListBox (Façon ListView)

Bonjour à tous,

En premier lieu pardonnez mon absence...J'ai eu des contraintes de temps par ailleurs.

Voici joint deux exemples de l'utilisation des tags.

Le but n'est que de montrer comment les trimbaler de procédure en procédure,
sans variables "Public"

Version "Seul"
On peut modifier l'ordre alphabétique de la ListView en cliquant sur son entête,
et il est à constater que cela ne change rien au bon choix de la ligne.
Version "PLUS"
De la même façon la création dynamique des Boutons et du résultat de leur "Click" seront corrects.

Je ne l'ai pas fait; mais on peut imaginer l'ouverture d'un Classeur externe, initialiser la Liste, et le fermer.
Il en est de même que le premier USF peut être "Unload" puisque le deuxième aura en mémoire les données.

Les possibilités sont énormes
(A noté que j'ai oublié la capacité maximale des Tags qui est de toute façon conséquente)

Amicalement,

Yann
 

Pièces jointes

  • LISTVIEW_ET_TAGS_PLUS.xls
    56 KB · Affichages: 40
  • LISTVIEW_ET_TAGS_SEUL.xls
    40 KB · Affichages: 42

Habitude

XLDnaute Accro
Re : Ajouter des "Tag" ou "Key" aux Items d'une ListBox (Façon ListView)

Merci Yann pour ces exemples

Si je peux me permettre
Le Add d'un listview renvoie le nouvel objet créer.
Tu peux donc directement lui associé sont tag

.ListItems.Add(Text:=Worksheets("ACCUEIL").Cells(i, 1).Value).Tag = i

Évite le positionnement dans la liste avec le listcount et gagne en efficacité.


Autre chose, au lieu de l'événement Click. Utlise plutot l'événement Item_click
Qui te retourne l'item.
évite l'utilisation de la fonction selectedItem.
Fonctionne aussi avec le déplacement à l'aide des touches fléché, pas seulement la souris.

Pour parcourir la liste
lieu du classique for i= 1 to .....listcount
regarde du coté de
Dim Item As ListItem
For Each Item In ListView1.ListItems
 
Dernière édition:

YANN-56

XLDnaute Barbatruc
Re : Ajouter des "Tag" ou "Key" aux Items d'une ListBox (Façon ListView)

Re Habitude,

Il est vrai que j'ai été un peu "Expéditif" en rédigeant ces exemples.
Ceci dit pour ceux qui les ouvriront)

Quant à ta politesse:
Si je peux me permettre
Alors: Surtout permets-le-toi!........ Plus tu le feras; plus j'appendrai!

Pour la syntaxe:
Code:
[ListItems.Add(Text:=Worksheets("ACCUEIL").Cells(i , 1).Value).Tag = i

Je vais voir à rectifier mon code.


Fonctionne aussi avec le déplacement à l'aide des touches fléché, pas seulement la souris.

Là nous sommes dans le Module de Classe.
Je devrais savoir adapter...... Je vais tenter; et si échec je te demanderai de l'aide.

Tes compétences sont balaises! Quel bonheur de te croiser!!!

Amicalement,

Yann, qui va réviser sa copie.
 
Dernière édition:

YANN-56

XLDnaute Barbatruc
Re : Ajouter des "Tag" ou "Key" aux Items d'une ListBox (Façon ListView)

Comment veux-tu que je n'ai pas la tête comme une lessiveuse! :rolleyes:
regarde du coté de
Dim Item As ListItem
For Each Item In ListView1.ListItems

Bon! O.K. Je ne suis pas encore trop vieux, mais les neurones sont quand-même un peu usagés!
Pour ce qui est de la contenance; il y a encore de la place (Je pense),
mais pour la réactivité c'est un peu devenu "Diesel"

Dans ton extrême Ouest tu n'en as rien à foutre du Foot à l'Est du vieux continent... Il est évident!:)

Je vais regarder ce que la pluralité ethnique de notre équipe saura apporter à notre chauvinisme national.

Il est certain que ce soir, après, je vais appliquer tes conseils. (Si pépé n'est pas trop fatigué!)

Grand Merci à toi... Tu es vraiment mon copain.

Yann qui fera suite par exemple modifié
 

Habitude

XLDnaute Accro
Re : Ajouter des "Tag" ou "Key" aux Items d'une ListBox (Façon ListView)

Re

Vieux continent, les termes Ouest et Est sont plus qu'appropriés. Évitant ainsi tout sous-entendu politique.
L'Est étant bien à droite ?

ET

Effectivement, rien à foutre du foot.
Vivement le hockey dans toute sa froideur.
 

YANN-56

XLDnaute Barbatruc
Re : Ajouter des "Tag" ou "Key" aux Items d'une ListBox (Façon ListView)

Bonjour aux participants,

Au bénéfice des enseignements de Habitude, j'ai revu mon exemple.

Le chargement de la ListView avec les Tags de ses Items est plus rationnel,
et l'action sur les flèches du clavier est effective. (Y compris pour le groupe de boutons)

mapomme:
Je vais aussi me pencher sérieusement sur l'utilisation des "tableaux virtuels" que je découvre à peine.
Quant à l'ajout de SubItems dans les ListBox ou les ListView, cela est évidement possible,
mais ce n'est plus le sujet, car j'ai totalement abandonné l'idée d'utiliser des ListBoxes!

Merci à toi pour ce productif rappel concernant ces tableaux.

David:
Tu me sembles relativement convaincu par l'utilisation des Tags.
J'espère ne pas avoir été trop maladroit à en démontrer le bien-fondé dans ce dernier exemple.

Merci à toi de m'avoir conforté sur l'intérêt de cette approche.

Fo-rum:
Je n''ai parlé ci-dessus que d'éviter moult colonnes et du transport des tags.
Il y a aussi une bonne raison par suite du constat de la disparition de ma variable "Public"
comme j'en fait allusion dans ce post:
http://www.excel-downloads.com/forum/184719-souci-avec-une-variable-public-qui-ne-le-reste-pas.html

Merci à toi pour ta suggestion.

Habitude:
En ce qui concerne l'Ouest ou l'Est, tu seras toujours au centre de mon intérêt
Dis-moi si ton élève n'a pas fait trop de fautes dans la rédaction rectifiée de ses codes...

Merci à toi pour ton aide qui dépasse largement ce que l'on peut trouver via Google.

Amicalement à tous, et au plaisir de vous lire,

Yann

P.S. Les deux Fichiers sont à mettre dans un même répertoire.
 

Pièces jointes

  • LISTVIEW_ET_TAGS_2.xls
    89.5 KB · Affichages: 45
  • SOURCE.xls
    13.5 KB · Affichages: 45
  • LISTVIEW_ET_TAGS_2.xls
    89.5 KB · Affichages: 48
  • SOURCE.xls
    13.5 KB · Affichages: 45
  • LISTVIEW_ET_TAGS_2.xls
    89.5 KB · Affichages: 49
  • SOURCE.xls
    13.5 KB · Affichages: 45

YANN-56

XLDnaute Barbatruc
Re : Ajouter des "Tag" ou "Key" aux Items d'une ListBox (Façon ListView)

Bonjour Habitude, :):):)

Effectivement, j'ai mis à 999 le potentiel de boutons créés.
Dans le cas présent seulement 7 aurait suffi. (Ce n'est issu que de ma fainéantise)

Il y a aussi le "Redim Preserve" qui avec une variable "N" par exemple,
devrait adapter cela au besoin........ Mais je n'aime pas ajouter des lignes aux codes!

Ton savoir mettre le doigt où il faut est impressionnant!

Amicalement, avec encore Merci pour avoir pris la peine de regarder.

Yann
 

david84

XLDnaute Barbatruc
Re : Ajouter des "Tag" ou "Key" aux Items d'une ListBox (Façon ListView)

Bonsoir,
Merci à tous pour vos explications et fichiers exemple.
Comme je suis principalement sur Excel 2010 version 64 bits, je dois oublier les ListViews car impossibilité de les utiliser, et donc de tester les fichiers qui en ont (j'ai testé le fichier de Yann56 sur une version 2007).
De toutes les façons, je n'ai pour l'instant pas ressenti le besoin de les utiliser car je m'en sort jusqu'à présent sans problème avec les autres contrôles.
Maintenant, sur le principe, je trouve l'utilisation du Tag intéressant.
Je vais rechercher des exemples plus parlant -en dehors de son utilisation avec une ListView- où le Tag me semblera LA solution réellement adaptée.
Mais bon, je crois en avoir compris l'utilité, donc maintenant que je l'ai en tête, je pourrai tester cette propriété quand cela me semblera adapté.
A+
 

Statistiques des forums

Discussions
311 708
Messages
2 081 750
Membres
101 812
dernier inscrit
trufu