> Tous les forums > Forum Bureautique
 Barre de progression dans une listview Excel
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
alain080
  Posté le 18/04/2019 @ 16:10 
Aller en bas de la page 


Bonjour,


Je cherche à savoir s'il est possible d'insérer une barre de progression dans une colonne d'une listview. Pour l'instant j'ai trouvé une solution soit avec une progressbar ou zone de texte où l'on fait jouer la largeur. Ce n'est pas pratique d'aligner ces objets à côté de la listview. D'où ma question d'ajouter une colonne où je puisse insérer la barre dans une colonne de la listview. Est ce que l'un d'entre vous aurait déjà fait cela...... je suis sous excel 2013.

Merci à tous de votre aide.

Alain

Lien vers une image externe

[Configuration automatique à compléter]
Windows 10
Firefox 66.0

Publicité
Debrief
 Posté le 19/04/2019 à 11:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour,

Post supprimé car il s'agit ici d'une ListView et mon blabla sur la ListBox n'avait rien de pertinent

D.



Modifié par Debrief le 19/04/2019 21:28
alain080
 Posté le 19/04/2019 à 12:54 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page

Bonjour Debrief,

En fait j'avais mis des objets en regard de mes listview(s)... ici ce sont des zones de libellés modifiables en largeur où je peux inscrire le % du budget utilisé.

Inconvénients: a) si la barre est trop petite en pourcentage, je ne vois plus la valeur affichée.

b) Si j'utilise un Progressbar, je ne peux pas indiquer la valeur de la progression (à moins de mettre encore à côté la valeur)

c) l'alignement en face du listview est assez difficile

J'ai vu sur le net qu'il est est possible de mettre une progressabr dans une listview , MAIS EN VISUAL BASIC(VB)

D'où l'idée de demander à l'entre vous si vous aviez été déjà confontrés à à ce genre de demande

en fait

Debrief
 Posté le 19/04/2019 à 13:50 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Ok, ce n'est pas une barre de progression au sens habituel mais plus une série d'indicateurs de niveau de % ou de remplissage statiques.

J'ai vu sur le net qu'il est est possible de mettre une progressabr dans une listview , MAIS EN VISUAL BASIC(VB)

As-tu le lien qui en parle ?



Modifié par Debrief le 19/04/2019 21:30
alain080
 Posté le 19/04/2019 à 15:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page

Debrief,

Merci pour ton aide.

Juste une information que j'ai oublié de vous donner, c'est que la listview fait partie d'un Userform plein écran avec une synthèse du budget permettant de savoir si les ateliers sont hors budget et le % indiquant combien ils ont déjà grillé. Les objets se situant sur la droite indique le taux du budget utilisé sont des libellés coloriés en vert avec la largeur variable en fonction du taux.

Alain

Debrief
 Posté le 19/04/2019 à 16:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

En fait je me rends compte que je ne sais pas ce qu'est une ListView, donc c'est difficile de répondre sur la base d'une ListBox !

alain080
 Posté le 19/04/2019 à 16:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page

Une listbox est limite à 9 ou 10 colonnes, alors qu'une listview n'est pas limitée..... et c'est beaucoup plus puissant qu'une listbox.

Debrief
 Posté le 19/04/2019 à 21:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bon, j'ai pu créer une ListView mais je n'ai aucune idée de comment y mettre une "barre de progression" en colonne .

Mettre des images mais il en faudrait tellement pour représenter les %.
Utiliser un caractère spécial (e.g. Webdings 103) dans une ListView à droite (en respectant Font.Size pour l'alignement) donne une barre trop longue pour résoudre même à 5%.

Faut aller voir sur le Web Embedding Controls in a ListView !



Modifié par Debrief le 20/04/2019 00:56
Debrief
 Posté le 20/04/2019 à 21:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Pas facile de trouver sur Internet, il y a beaucoup de liens mais c'est du charabia dans des projets complexes en VB.NET ou C#.
Je n'ai trouvé qu'un lien en VBA dont je me suis inspiré.

  • Ce que je sais faire c'est prendre une ProgressBar définie dans le UserForm pour la placer dans une colonne de la ListView. Pour N lignes, il faut définir N ProgressBars.
  • Ce que je NE sais PAS faire c'est copier ou définir dynamiquement des ProgressBars dans le UserForm pour satisfaire dynamiquement le besoin selon le nombre de lignes de la ListView. Ça c'est très chaud (possible ?) !
    On peut copier des Controls genre boutons mais j'ai essayé en vain avec les ProgressBars.

Ici un exemple avec 10 ProgressBars définies dans le UserForm et donc 10 lignes de la ListView les utilisant. Il faudrait donc en théorie, définir un nombre de ProgressBars suffisant pour couvrir la max de lignes affichées par la ListView.
Jusqu'à 20, 30 ou 50 avec les copier/coller c'est très rapide. En attendant mieux... si possible en VBA !

Dis-moi si ce genre de manip t'intéresse... Il reste le % à indiquer, je n'ai pas trouvé de propriété qui permette de le faire dans la ProgressBar. Le plus simple serait d'avoir une colonne dédiée au %.



Modifié par Debrief le 20/04/2019 21:52
Publicité
alain080
 Posté le 20/04/2019 à 23:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page

Bonsoir Debrief,

Cela à l'air pas mal ta méthode et cela pourrait me convenir d'autant que ma barre de progression est un pourcentage, donc de 0 à 100. maintenant cela fait beaucoup de progressbar , mais je ne comprends pas trop la manière de les faire apparaitre dans la listview..... as tu un fichier même non terminé ?

En tout cas je te remercie de ton aide...... je suis en train de regarder le lien que tuas mis en allemand (traduit en français)

Alain

Debrief
 Posté le 21/04/2019 à 06:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Le fichier -> https://www.cjoint.com/c/IDvej2uzGL1

C'est normal d'avoir à définir 1 ProgressBar par ligne car chacune de ces ProgressBars ensuite déplacée dans la ListView est un objet indépendant qui peut subir des modifications propres, notamment concernant l'évolution de la propriété ProgressBar.Value qui est quand même l'intérêt principal d'une ProgressBar dont l'objet est de... progresser :).

C'est pourquoi il serait peut-être préférable de créer 20 (résolution 5 %) ou 33 (résolution 3%) ou 50 (résolution 2%) ou 100 (résolution 1%) images barre (automatiquement bien sûr), les placer dans un répertoire et les utiliser en colonne de ListView. Mais c'est sûr que c'est moins "direct" que les ProgressBar.

Une solution serait de créer des ProgressBars dynamiquement mais je n'ai rien trouvé pour le faire. Ça parait improbable. J'ai quand même posé une question sur StackOverFlow.

D.

Debrief
 Posté le 21/04/2019 à 07:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Une autre solution un peu "tirée par les cheveux" consiste à aligner 2 ListViews.
La 2ème à droite est en Font "Webdings" en utilisant le caractère Chr(103) qui est le caractère "g" en ASCII et le carré plein en Font "Webdings".

Hélas, pour une même Font.Size de la ListView, "Webdings" est plus haut que le défaut "Calibri" par exemple. Donc les lignes ne sont pas en regard les unes des autres.
Ici je n'ai pu ajuster les lignes qu'en utilisant "Calibri" 9 et "Webdings" 7. Il y a sans doutes d'autres combinaisons mais il faut tester.

Voilà quand même le fichier -> https://cjoint.com/c/IDvlYO4erl1 avec 4 résolutions de % possibles:

'Const CharBarreStringLen = 20 '20 => Resolution 5%
Const CharBarreStringLen = 33 '33 => Resolution 3%
'Const CharBarreStringLen = 50 '50 => Resolution 2%
'Const CharBarreStringLen = 100 '100 => Resolution 1%

Plus la résolution est petite, plus la colonne de la barre est grande évidemment car on doit y placer plus de caractères "Webdings" Chr(103) pour représenter le %.



Modifié par Debrief le 21/04/2019 14:14
Debrief
 Posté le 21/04/2019 à 19:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

alain080
 Posté le 21/04/2019 à 20:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page

Bonjour Debrief,

Finalement, j'ai utilisé ma méthode que tu peux voir dans le fichier ci-joint. Encore merci pour toutes tes recherches sur Internet.. Effectivement cela à l'air plus facile avec le VB.net

Encore Merci

Alain

Alain

Debrief
 Posté le 22/04/2019 à 07:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Ok, je suppose que tu fais donc l'alignement programme par rapport aux lignes de la ListView.

Qu'est-ce que tu as utilisé comme objets pour les pourcentages (visuel vert, cadre et texte) ?

alain080
 Posté le 22/04/2019 à 11:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page

Pour les barres vertes, j'utilise 2 contrôles "Libellé" (le label)

Le 1er libellé colorié en vert sera dimensionné en largeur par le calcul et sera visible en arrière plan

l'autre libellé sert à indiquer la valeur en pourcentage, en mode transparent et en premier plan

les 2 libellés de mêmes dimensions sont donc superposés

Debrief
 Posté le 22/04/2019 à 12:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Ok, c'est ce que j'imaginais mais je voulais ta confirmation.

Et aussi confirmation de 2 points:
- Ces libellés (doubles) sont créés dynamiquement en VBA (genre Set Label = UserForm.Controls.Add("forms.Label.1"))
- Ces libellés (doubles) sont positionnés par VBA en regard des lignes de la Listview

Ci-joint un fichier illustrant ta méthode simple et efficace pour ces barres de statut en génération dynamique des Labels et positionnement calculé VBA -> https://cjoint.com/c/IDxiEOypLYf



Modifié par Debrief le 23/04/2019 10:33
Publicité
alain080
 Posté le 23/04/2019 à 09:11 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page

Pour ma synthèse, j'ai placé manuellement les objets, mais c'est vrai que j'aurais pu le faire par vba

Debrief
 Posté le 23/04/2019 à 10:33 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Tu peux éventuellement te servir directement de la fonction Sub InsertLabelsPourcentage() qui est générale et prévoit dans la version délivrée à l'instant sur cjoint tout une série de paramètres (avec valeurs par défaut) pour le contrôle du format des labels qui sont générés et placés automatiquement dans le UserForm. Rien à faire

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
Aucun sujet pertinent lié trouvé
 > Tous les forums > Forum Bureautique