XL 2010 Comment récupérer largeur de colonnes suite affichage plein écran

cathodique

XLDnaute Barbatruc
Bonjour,

J'ai bien trouvé des solutions pour aligner des labels (entêtes de titre) et colonnes d'une listbox.

Mais en prenant comme référence les largeurs des colonnes de la feuille.

Ou en utilisant une listbox à une seule ligne et y mettre les mêmes dimensions que ceux la seconde listbox.

J'utilise un code de PatrickToulon pour adapter mon userform à mon écran. Comment récupérer les largeurs après affichage de l'userform?

L'idée est de déterminer la valeur de la position left des différents labels.

En vous remerciant par avance.
 

Pièces jointes

  • Entete_Label.xlsm
    30.5 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Cathodique, Patrick,
( oups, un peu tard ! :( )
Si j'ai bien compris, il suffit de rajouter ces deux lignes :
Code:
With Me.ListBox1
    .ColumnCount = 13
    .ColumnWidths = "64;30;45;200;150;50;50;180;50;52;50;40;0"
    .List = Tb
    Largeurs = Mid(.ColumnWidths, 1, Len(.ColumnWidths) - 3)       ' Renvoie une chaine avec les largeurs
    Tlargeur = Split(Largeurs, " pt;")      ' Contient les largeurs de colonnes
End With
Largeur renvoie la chaine :
"64 pt;30 pt;45 pt;200 pt;150 pt;49,95 pt;49,95 pt;180 pt;49,95 pt;52 pt;49,95 pt;40 pt;0"
Le tableau revoir la largeur de chaque colonne :
1673961977095.png
 

patricktoulon

XLDnaute Barbatruc
bonjour @sylvanu
ben en fait ça dépend
si @cathodique veut modifier le columnwidths et le font de la listbox en même temps

et puis je ne m’ennuie pas à enlever les "pt " j'utilise val

exemple en faisant abstraction du redimensionnement

VB:
t=split(listbox1.columnwidths,";")
for i= 0 to ubound(t)
t(i)=val(t(i))
next
'si on considère que les labels d'entête se nomment ent0,ent1,ent2,etc....
for i= 1 to ubound(t)
with me.controls("ent" & i)
.left=t(i-1)'+listbox1.left'si elle n'est pas en 0 left du userform
.width=t(i)
next
me.controls("ent0").width=t(0)

il sont positionnés et redimensionnés (width) idem au columnwidths de la listbox

mais je le répète
si vous faites une recherche vous trouverez un module resize_form qui gère tout
 

cathodique

XLDnaute Barbatruc
Bonjour @cathodique
c'est pourtant simple
tu split le columnwidth de ta listbox pour avoir les widths de tes colonnes et dans une boucle tu les additionne pour avoir chaque left de tes labels d’entêtes
et en plus tu utilise une version obsolète de mon principe de redimensionnement proportionnel
Bonjour @patricktoulon ;), @sylvanu ;),

@patricktoulon : Avant tout, merci beaucoup. Si j'ai demandé de l'aide c'est que j'ai atteint la limite de mes connaissances. Je suis un peu dépassé (out) depuis que j'utilise ta version devenue d'après toi obsolète. Je suis preneur de ta dernière version.

@sylvanu: Merci beaucoup, je réponds sur le vif sans avoir rien testé de ta proposition. Je reviens dans un moment, je dois récupérer un enfant de la crèche.
L'objectif est d'aligner les labels sur les colonnes de la listbox.

A+
 

patricktoulon

XLDnaute Barbatruc
ok
1° la liste box est déjà plus grande que le userform à la base elle a donc la scrollbar horizontale
ce qui fait que les entêtes ne suivront pas quand tu utilisera la scrollbar de la listbox
en fait le mieux serait de la mettre dans un frame et utiliser le scrollbar de la frame pour naviguer de gauche à droite

2°la listbox doit elle etre adapté en terme de font size et largeur colonne lors du redimensionnement???,
 

cathodique

XLDnaute Barbatruc
bonjour @sylvanu
ben en fait ça dépend
si @cathodique veut modifier le columnwidths et le font de la listbox en même temps

et puis je ne m’ennuie pas à enlever les "pt " j'utilise val

exemple en faisant abstraction du redimensionnement

VB:
t=split(listbox1.columnwidths,";")
for i= 0 to ubound(t)
t(i)=val(t(i))
next
'si on considère que les labels d'entête se nomment ent0,ent1,ent2,etc....
for i= 1 to ubound(t)
with me.controls("ent" & i)
.left=t(i-1)'+listbox1.left'si elle n'est pas en 0 left du userform
.width=t(i)
next
me.controls("ent0").width=t(0)

il sont positionnés et redimensionnés (width) idem au columnwidths de la listbox

mais je le répète
si vous faites une recherche vous trouverez un module resize_form qui gère tout
@patricktoulon ; J'ai eu beau cherché, je n'ai pas encore trouvé ce module resize_form.

J'ai ajouté ton code mais il y a quelque chose qui ne va pas. le 1er label est label29 doit se positionner en "0", étant donné que la listbox est à "0". Là, le label se met en 64.
Aujourd'hui, je suis saturé, je verrai ça demain.

Bonne soirée.
 

patricktoulon

XLDnaute Barbatruc
Bonjour @cathodique , @sylvanu
juste avant de partir en exterieur
voici le fichier remanié
la listbox est dans une frame le scroll est celui de la frame(les entêtes suivent )
tu a le positionnement dans l'initialyse et dans le activate tu a le re calcul des dimensions et du font size
 

Pièces jointes

  • Entete_Label V patricktoulon.xlsm
    29.8 KB · Affichages: 3
Dernière édition:

cathodique

XLDnaute Barbatruc
re
je te reprends tout ça demain dans la journée
en attendant je te laisse regarder un peu ces deux modules
Bonjour @patricktoulon ;), @sylvanu ;),

Vos codes se ressemblent, on "split" les largeurs des colonnes de la listbox.
J'ai ce code dans UserForm_Initialize
VB:
With Me.ListBox1
      .ColumnCount = 13
      .ColumnWidths = "64;30;45;200;150;50;50;180;50;52;50;40;0"
      .List = tb
   End With
donc les largeurs sont prédéfinies dans UserForm_Initialize. Ce qui me chiffonne, j'ai mis vos code dans UserForm_Activate contenant le code obsolète de @patricktoulon de mise en proportion du formulaire.
Or, dans le split on retrouve les mêmes valeurs initialement prédéfinies dans UserForm_Initialize. Pourquoi?

@patricktoulon : Très intéressant ton fichier. En toute franchise, j'ai du mal à comprendre l’ensemble de ton codage. Je dois de mon côté faire des recherches pour essayer de comprendre et l'assimiler. Mais pas dans l'immédiat car je dois avancer sur ce petit projet.

Dans mon cas Listbox1.Left=0, mes labels commencent à 29
donc 1er label, Label29.left=0
2ème -->Label30.Left=t(0)
2ème -->Label31.Left=t(1)
etc...
Et bien le résultat n'est pas bon.
Conclusion: je fais du n'importe quoi:eek::eek::eek:

Bonne journée.
 

cathodique

XLDnaute Barbatruc
Bonjour @cathodique , @sylvanu
juste avant de partir en exterieur
voici le fichier remanié
la listbox est dans une frame le scroll est celui de la frame(les entêtes suivent )
tu a le positionnement dans l'initialyse et dans le activate tu a le re calcul des dimensions et du font size
Bonjour,

@patricktoulon : C'est très gentil de ta part. C'est fonctionnel, mais ne répond à ce que je voudrai obtenir.
J'ai joint un fichier pour illustrer mon problème (j'ai viré pein de contrôles et leurs codes). Je ne veux pas trop tripoter mon véritable fichier pour ne pas foutre en l'air tout ce qui fonctionne bien jusqu'à présent.
Ce qui me dérange beaucoup, c'est la barre de défilement horizontale.
En cas bravo pour tout ce que tu partages sur XLD.

Bonne journée.
 

patricktoulon

XLDnaute Barbatruc
re
ma fois la barre horizontal est là pour pouvoir voir toute la liste étant donné que la somme des largeur de colonnes est plus grande que la liste box et même le userform
sinon il faudra me dire a quoi te sert d'avoir 12 colonnes si tu ne peux pas les voir ,ca n'a pas de sens
 

Discussions similaires

Réponses
15
Affichages
877

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa