Je propose une idée pour gérer les largeurs des colonnes des ListView (es)

  • Initiateur de la discussion Initiateur de la discussion YANN-56
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

YANN-56

XLDnaute Barbatruc
Bonsoir à tous, et à ceux qui passeront par ici,

Après un gros "Ras le bol" de tester les largeurs de colonnes de mes ListView, 😡 ... je me suis fait ceci:

J'adapte les largeurs à ce que je voudrais en voir, par le biais du curseur.
Par la suite en cliquant sur un bouton (Provisoire) ... Ici "CommandButton1"
je récupère les largeurs de colonnes qui me vont bien, et les écrit dans la Feuille "x"

Code:
Private Sub CommandButton1_Click()
For i = 1 To Me.ListView1.ColumnHeaders.Count
Worksheets("Feuil1").Cells(i + 6, 1).Value = Me.ListView1.ColumnHeaders(i).Text
Worksheets("Feuil1").Cells(i + 6, 2).Value = Me.ListView1.ColumnHeaders(i).Width
LARGEUR_LISTE = LARGEUR_LISTE + Me.ListView1.ColumnHeaders(i).Width
Next i
Worksheets("Feuil1").Cells(3, 1).Value = "LARGEUR TOTALE DE LA LISTVIEW: " & LARGEUR_LISTE
Worksheets("Feuil1").Cells(4, 1).Value = "AVEC PLACE POUR L'ASCENCEUR EVENTUEL: " & LARGEUR_LISTE + 18
End Sub

J'imprime, et je n'ai plus qu'à lire et recopier les bonnes largeurs dans:
Code:
With .ColumnHeaders
          .Add , , "MACHIN", et la bonne largeur
Et c...
(Il est même facile d'adapter la taille de l'USF à celle de cette ListView)

Même au risque de paraître simpliste aux yeux des Experts en la matière;
j'avais seulement envie de partager.


(Quant à la mise en page dynamique, je laisse à chacun de s'y amuser)

Amicalement

Yann
 
Re : Je propose une idée pour gérer les largeurs des colonnes des ListView (es)

Bonjour a tous les deux et le forum
je travaille actuellemnt sur un listview c'est la première fois et justement je trouvé galère de devoir a chaue fois regarder le listview pour adapter les colonnes,
j'ai juste trouver une petite solution c'est ajouter a la valeur de depart de colonne la fonction len(expression) ou expression et la valeur precedente
Code:
With .ColumnHeaders
          .Add , , "MACHIN", largeur de depart
.Add , , "Truc", largeur de depart + len(Truc)
et cela a l'air de fonctionner a merveille
A+
 
Re : Je propose une idée pour gérer les largeurs des colonnes des ListView (es)

Bonsoir Frédéric d'y avoir apporté ta touche, et à Excel-lent de m'avoir conforté dans ma démarche. 🙂

Quant aux 54 visiteurs que j'ai pu entrevoir, aussi Merci pour le silence!

Qu'il est doux dans ma campagne!

Il y a pourtant à poursuivre, notamment avec un autre USF en "Vbmodeless"
qui avec des toupies va mettre en place moult contrôles.
(Comme des Frames avec pour image de fond la sélection partielle d'une
copie d'écran de l'USF en cours de construction... C'est une autre idée...)

Le savez-vous? Un Frame ne peut pas être transparent!!! Donc c'est une astuce!
Et quand en plus on adapte la boite de dialogue à la taille de l'écran.. Bonjour!!!

A vos images, et bonne fin de soirée.

Amicalement

Yann
 
Re : Je propose une idée pour gérer les largeurs des colonnes des ListView (es)

Bonjour Yann, Excel-lent, Flhoest

Quant aux 54 visiteurs que j'ai pu entrevoir, aussi Merci pour le silence!

Ben, moi, j'ai vu de la lumière, je suis rentré. J'ai pas compris Frame, listview que je n'utilise jamais. Donc je suis sorti 😱.

Yann, en plus, tu as eu des réponses. Faut arrêter de penser que des qu'on a une idée (moi, j'en ai 30 par jour 😉), la terre entière va se précipiter 😛.
 
Re : Je propose une idée pour gérer les largeurs des colonnes des ListView (es)

Bonjour à tous,
pour relancer ce fil, une idée de largeur de colonne automatique en fonction de ce qu'il y a dans les lignes des colonnes
Code:
' déclarer les variables
public s as byte
public c as range
'au dessus du code ci-dessous "construction des colonnes"
s = 1
for each c in range("a1:a100")
if c="1" then
With ListView1
.ListItems.Add , , c.Offset(0, s)
largeur_colonne
.ListItems(1).ListSubItems.Add , , c.Offset(0, s)
largeur_colonne
.ListItems(.ListItems.Count).ListSubItems.Add , , c.Offset(0, s)
largeur_colonne
.ListItems(.ListItems.Count).ListSubItems.Add , , c.Offset(0, s)
largeur_colonne
.ListItems(.ListItems.Count).ListSubItems.Add , , c.Offset(0, s)
largeur_colonne
.ListItems(.ListItems.Count).ListSubItems.Add , , c.Offset(0, s)
largeur_colonne
End With
end if

Next c

End Sub
'----------------------------------------------------------------------
'----------------------------------------------------------------------
Sub largeur_colonne()
Dim largeur_auto As ColumnHeader
 Set largeur_auto = ListView1.ColumnHeaders(s) 'indice Colonne
  If largeur_auto.Width < (Len(ListView1.ColumnHeaders(s).Text) * 4) _
  + (Len(c.Offset(0, s).Text) * 3) Then largeur_auto.Width = (Len(ListView1.ColumnHeaders(s).Text) * 4) + (Len(c.Offset(0, s).Text) * 3)
  s = s + 1
 If largeur_auto.Width >=10 then  largeur_auto.Width =20
end sub
Au plaisir de partager...
 
Re : Je propose une idée pour gérer les largeurs des colonnes des ListView (es)

Bonjour Frédéric, et à ceux qui passeront par ici,

Etant toujours retors aux "Offsets" et les "range("xz:xy")"
et obnubilé par limiter le nombre de lignes dans un code;
je propose ceci:

Code:
Private Sub UserForm_Initialize()
Worksheets("Feuil1").Activate
' MISE EN PAGE
With Me.ListView1: .Gridlines = True: .View = 3
  With .ColumnHeaders
  For i = 1 To ActiveSheet.UsedRange.Columns.Count
   .Add , , ActiveSheet.Cells(4, i).Value, 5
       Select Case i
        Case 2, 3
        Me.ListView1.ColumnHeaders(i).Width = 30
        Case 1, 4, 6
        Me.ListView1.ColumnHeaders(i).Width = 80
        Case 5
        Me.ListView1.ColumnHeaders(i).Width = 180
      End Select
  LARGEUR_LISTE = LARGEUR_LISTE + Me.ListView1.ColumnHeaders(i).Width
  HAUTEUR_LISTE = HAUTEUR_LISTE + i * 8 ' "8" Suivant hauteur Police de la ListView
  Next i
  End With
' INITIALISATION
For i = 5 To ActiveSheet.UsedRange.Rows.Count
.ListItems.Add , , ActiveSheet.Cells(i, 1).Value
    For j = 2 To ActiveSheet.UsedRange.Columns.Count
    .ListItems(.ListItems.Count).ListSubItems.Add , , ActiveSheet.Cells(i, j).Value
     Next j
Next i
' ADAPTATION DE L'USF
.Width = LARGEUR_LISTE + 18 ' "18" Suivant essais
.Height = HAUTEUR_LISTE + 35 ' "35" Suivant essais
Me.Width = .Width + 70 ' Comme l'on veut
Me.Height = .Height + 40 ' Comme l'on veut

End With
End Sub

L'adaptation des largeurs de colonnes au nombre de caractères est bien,
mais "bikini" est moins large que "wamama"...!
J'en reviens donc à ma première solution pour informer, après un test le "Select Case"

Je pense que l'exemple joint sera plus parlant.
Je n'y ai pas ajouté l'enregistrement de la méthode manuelle dont
je parlais à l'ouverture de cette discussion, mais si quelqu'un est intéressé...

Amicalement

Yann
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour