Régler individuellement la largeur des colonnes et les entêtes de cette ListView

Gedch

XLDnaute Occasionnel
Bonjour à tous

Je rencontre un problème pour adapter cette ListView à mon fichier.

J’aurai besoin de régler individuellement les largeurs des colonnes ce cette ListView
La largeur a été codée de façon très judicieuse par rapport aux largeurs des colonnes d’Excel si j’ai bien compris.
Mais si dans le dossier exemple, cela fonctionnait bien.
Dans mon fichier, dans la colonne « TYPE » je ne visualise que 2 caractères.
Et dans la colonne « $ », je me retrouve avec le même problème que celui que vous pouvez voir.

(Les largeurs dans le fichier joint sont exactement les mêmes que dans mon fichier d'origine)
(Bien que dans le fichier joint, le problème de la colonne "TYPE " ne se produit pas ???)

Je précise toutefois, bien que je ne vois pas de cause à effet, mon fichier est sous forme de tableau.

La colonne "Code" surtout la colonne "Libellé" est trop large, du coup la colonne "Rentrée n'apparait que partiellement

Si je modifie le "Coef" ; c’est toutes les largeurs des colonnes qui s’en trouvent bouleversées.
Je ne vois qu’une seule solution, adapter un codage de la largeur colonne par colonne
Mais je n’arrive pas à le faire.

Je rencontre aussi un autre problème, dans mon fichier d’origine, il n’y a pas de non de colonne
Je souhaiterais donc pouvoir rentrer directement les entêtes des colonnes.

Je suis donc à la recherche d’une aide
Merci d’avance

A+
 

Pièces jointes

  • Gedch- ListView Validation- v4 2.xlsm
    31.4 KB · Affichages: 70

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Régler individuellement la largeur des colonnes et les entêtes de cette ListVie

Bonjour Gedch, à tous,

Un essai pour les largeurs des colonnes. L'idée est de modifier la largeur des colonnes sur la feuille "Relevé" au strict minimum avec une largeur minimum (constante MinLargeurFeuille). Dans le calcul de la largeur total des colonnes, on ajoute aussi la largeur d'un éventuel ascenseur vertical (constante LargeurAscenseur). Le coeff des largeurs (colonne sur feuille / colonne dans listview1) tient compte de cette largeur calculée.

Si le phénomène d'affichage de points se produit, il faut augmenter MinLargeurFeuille.
Si l’ascenseur masque la dernière colonne de la Listview1, il faut augmenter LargeurAscenseur.

La macro modifie les largeurs de colonnes de la feuille "Relevé". On peut, avec un peu de code, si on le désire, recouvrer les largeurs d'origine.
 

Pièces jointes

  • Gedch- ListView Validation- v5a.xlsm
    45.4 KB · Affichages: 54
Dernière édition:

Gedch

XLDnaute Occasionnel
Re : Régler individuellement la largeur des colonnes et les entêtes de cette ListVie

Bonjour MaPomme, Si. et tout le Forum

MaPomme
Je te remercie encore pour ces codes que tu as accomplis

Je suis depuis ce matin sur ta dernière solution
Le code était déjà complexe, mais là c’est vraiment tarabiscoté !

- Au niveau du résultat, en ce qui concerne la colonne $, elle est un peu trop large, mais cela ne gêne pas.

- Pour la colonne « Type », certaines données sont en majuscules sur 4 lettres, aussi la largeur est insuffisante, je vois que 2 caractères, mais en remplaçant le 3 de MinLargeurFeuille par 2, cela fonctionne

- La largeur de la colonne Code qui se gère sur 3 caractères, est insuffisante, pour palier le problème, j’ai rentré un mot de 4 lettres "CODE" dans une cellule cachée, cela corrige le problème.

- Reste le plus gros problème, c’est que ton code modifie toutes les largeurs de mes colonnes !!
Comme je l’avais dit, je ne peux pas modifier les largeurs de mes colonnes dans mon tableau, (à cause des autres cellules qui sont apparentes bien que en dehors du tableau et à cause des contrôles ActivX présents sur la feuille), Du coup je me retrouve avec une belle pagaille dans mon fichier si tôt lancée la ListView !
Pour corriger le problème j’ai fait une macro qui rétabli la feuille, dès que l’ouverture de la ListView est ouverte, dans les largeurs d’origines.

Bref cela devient une usine à gaz !
Le temps d’affichage est important.
La validation qui était immédiate avec ta précédente solution, provoque un balayage général de mon fichier, donc pas terrible et long
Le changement des largeurs est long et pas terrible visuellement.

Pour améliorer ce problème j’ai rajouté « Application.ScreenUpdating = False » en début de code
Mais cela reste très insuffisant...

Tu as déjà fait beaucoup de choses pour moi (ainsi que Si.), je ne peux pas modifier mes largeurs de colonnes, mais je vais prendre le temps nécessaire pour modifier quand même la structure de mon fichier, je vais adapter en fait mon fichier à ta précédente ListView. c'est sans doute le moins que je puisse faire.
J’ai remarqué que en changeant seulement la largeur de la colonne Type et de la colonne $, cela pouvait aller, je me mets au travail …..

Juste une question qui m’intrigue
Dans ma ListView postée tout au début, les largeurs étaient paramétrées par ce bout de code

Code:
        If .TextBox1 = "" Then Exit Sub
        With .ListView1
            .ListItems.Clear              ' On efface les colonnes de la ListView

        With .ColumnHeaders               ' Avec les colonnes de la Listview
            .Clear                        ' On efface les entetes de Colonnes

            .Add , , "Dates", 70          ' On crée une colonne qui affichera les dates
            '"Dates" Affichage de ce titre dans la tête de cette colonne
            ' Le nombre indiqué juste après indique la largeur de cette colonne

            .Add , , "A1", 0              ' 1 On crée une colonne qui affichera la Colonne "C"
            ' Cette colonne n'est pas utilisée, le nombre après la virgule est donc 0

            .Add , , "Type ", 40, 0       ' 2 On crée une colonne qui affichera le Type de paiement
            ' Le chiffre 1 en dernier alligne le nombre à dtoite, 0 l'alligne sur la gauche

            .Add , , "Code", 40, 0        ' 3 On crée une colonne qui affichera les Codes
            .Add , , "Libellé", 190, 0    ' 4 On crée une colonne qui affichera les Libellés
            .Add , , "Dépense   ", 70, 1  ' 5 On crée une colonne qui affichera les Dépenses
            .Add , , "", 16               ' 6 On crée une colonne qui affichera les Validations
            .Add , , "Rentrée   ", 70, 1  ' 7 On crée une colonne qui affichera les Rentrées
            .Add , , "Ligne", 0           ' 8 On crée une colonne qui affichera la "Ligne source"
        End With
        'fin du traitement des colonnes de la Listview

Ton code est certainement bien plus sophistiqué, mais pourquoi n’avoir pas conservé ce code beaucoup plus simple ?, Y a-t-il une incompatibilité avec la nouvelle vocation finale de celle-ci ?



A+
 

Si...

XLDnaute Barbatruc
Re : Régler individuellement la largeur des colonnes et les entêtes de cette ListVie

re
Par contre pour les largeurs, s'il s'agit de régler la largeur en remplaçant la valeur de Lg, c'est la catastrophe
Car pour voir tout le libellé en entier, je vais être obliger d'augmenter considérablement ce nombre, et je vais me retrouver avec des largeurs épouvantables pour les colonnes comme celle du signe Dollar.
Mais je n'ai peut-être pas bien compris la méthode ??
Je pense que, quelle que soit la méthode, tu auras ce problème (avec des titres allant de 2 à 36000 caractères) surtout si, comme le $, ils sont acompagnés d'une multitude d'espaces.

En étudiant de plus près la demande je me pose quelques questions

1-) le formulaire avec ce contrôle ListView (qui pose problème), est-il indispensable ?
Pour ne lister que les lignes de $ et modifier ce caractère on peut faire facilement sur la feuille à partir d’évènementielles

2-) si on y tient et que l’on veut adapter son initialisation pour différents classeurs, pourquoi ne pas prévoir les données avant d’ouvrir le formulaire ?
Plutôt que de manipuler, allonger les codes, on peut définir ces données comme dans l'exemple joint puis adapter les largeurs de colonnes directement sur le contrôle.

3-) des différences de police sont-elles envisageables ? Là pour moi, ce serait le summum de la complication.; largeur de colonne, largeur de l'objet (pas la même base), taille des polices, nombre de caractères variable, ce n'est déjà pa simple.

Je joins un dernier exemple avec un nouvel onglet prévu pour les données de titre (mais on peut les avoir autrement).
 

Pièces jointes

  • ListView à adapter .xlsm
    86.8 KB · Affichages: 65

Gedch

XLDnaute Occasionnel
Re : Régler individuellement la largeur des colonnes et les entêtes de cette ListVie

Bonjour Si..

Je pense que, quelle que soit la méthode, tu auras ce problème (avec des titres allant de 2 à 36000 caractères) surtout si, comme le $, ils sont acompagnés d'une multitude d'espaces.
Je ne comprends pas bien ce que tu veux dire ?

1-) le formulaire avec ce contrôle ListView (qui pose problème), est-il indispensable ?
Pour ne lister que les lignes de $ et modifier ce caractère on peut faire facilement sur la feuille à partir d’évènementielles
Cela me semblait la meilleure solution, mais je n'ai pas tes connaissances, à quoi pense tu comme évènementielles ?

2-) si on y tient et que l’on veut adapter son initialisation pour différents classeurs, pourquoi ne pas prévoir les données avant d’ouvrir le formulaire ?
Plutôt que de manipuler, allonger les codes, on peut définir ces données comme dans l'exemple joint puis adapter les largeurs de colonnes directement sur le contrôle.
Çà c'est génial !!!
Et tu gère cela uniquement dans ce petit bout ce code ??
Code:
Private Sub CommandButton1_Click()
  For Co = 1 To Lv.ColumnHeaders.Count
    [largeur].Rows(Co) = Lv.ColumnHeaders(Co).Width
  Next
  Unload Me
End Sub

3-) des différences de police sont-elles envisageables ? Là pour moi, ce serait le summum de la complication.; largeur de colonne, largeur de l'objet (pas la même base), taille des polices, nombre de caractères variable, ce n'est déjà pa simple.
Là je pense que tu répond à une question que j'avais posé dans un précédant post et qui jamais trouvée réponse
Comme quoi il faut toujours être patient !
Comme je n'avais jamais eu de réponse, je m'étais dit que ma question était sans doute loufoque pour des spécialistes, et que la réponse devait donc être non !
Pourtant on peut bien gérer les caractères gras, un caractère gras à pourtant une dimension supérieure ?
Pourquoi ne pas penser que l'on puisse gérer différentes tailles de caractère ?

Je joins un dernier exemple avec un nouvel onglet prévu pour les données de titre (mais on peut les avoir autrement).
Je regarde cela attentivement ci après.....

Merci et à plus
 

Gedch

XLDnaute Occasionnel
Re : Régler individuellement la largeur des colonnes et les entêtes de cette ListVie

Bonjour MaPomme

J’ai donc refait toute la structure de mon fichier dans lequel j’ai intégré ton avant dernier code
J’ai quand même pris le code pour l’ascenseur qui se trouvait dans ton dernier code
J’ai refait un exemple avec les largeurs réelles de mon fichier
Cela fonctionne du tonnerre !

Pour terminer ce fichier, il me restait à faire à une autre ListView pour valider les lignes dont les cellules dans la colonne « * » sont vides.
Jai donc fait une copie du précédant en question, j’ai supprimé le caractère « $ » dans la TextBox.

Comme dans celui-ci , je vais avoir à faire 2 types de validation :
Soit par une « * » comme dans l’autre
(Je suivrai plus tard les conseils de Si. En mettant un autre caractère !!)
Soit par un « $ ».

J’ai donc opté pour une validation par un double-clic ou un clic droit
Tout cela fonctionne parfaitement
(Voir « Validation 2 »).

Mais j’ai quand même 2 petits problèmes
et je viens encore à l’aide, car je ne trouve pas la solution....

Le premier problème :
Dans mon tableau j’ai des lignes vides
Du coup avec ma 2ème ListView, je visualise aussi bien les lignes qui sont pleines mais avec une cellule vide dans la colonne H, que les lignes qui sont totalement vides.
Il faudrait que je fasse un test sur la colonne date qui doit forcément être >0.
Mais donc je ne trouve pas la solution, et je me demande même où je dois faire ce test ???

Mon 2ème problème, qui se passe dans un ou l’autre des ListView, à partir du moment ou l’ascenseur s’affiche, que je double-clique ou clique droit, j’ai une remontée automatique en début de la ListView.
C’est particulièrement gênant si je veux valider plusieurs lignes à la suite !

Et là je ne vois où cela se gère ??

A+
 

Pièces jointes

  • Gedch ListView Double Validation.xlsm
    50.6 KB · Affichages: 117

Gedch

XLDnaute Occasionnel
Bonsoir Si, MaPomme, et à tous

MaPomme : peut-être n'a tu pas vu mon post 17 ?
Si tu as encore un peu de temps
Je ne pense pas que la solution soit très compliquée
Mais je n'y arrive pas par moi même

Si : Je ne sais pas si tu as vu mon pst 18 ?
Si tu as un peu de temps ?
J'ai donc essayé ton code qui me parait parfait
Mais je n'arrive pas à l'implanter dans mon fichier
J'ai bien sur incorporé la feuille supplémentaire pour les paramètres des largeur
Mais je me retrouve avec une Erreur d’exécution 424 Objet requis

Merci d'avance et A Plus j'espère
 

Si...

XLDnaute Barbatruc
re

Si : Je ne sais pas si tu as vu mon pst 18 ?
Si tu as un peu de temps ?
J'ai donc essayé ton code qui me parait parfait
Mais je n'arrive pas à l'implanter dans mon fichier
J'ai bien sur incorporé la feuille supplémentaire pour les paramètres des largeur
Mais je me retrouve avec une Erreur d’exécution 424 Objet requis

Merci d'avance et A Plus j'espère

Comme toujours les codes donnés sont adaptés au fichier donné donc posent souvent problème avec le fichier d'origine. Regarde les noms définis et vois si tu peux t'en sortir.

Je ne sais pas si les listes sont très longues dans ton fichier de travail mais l'utilisation de nombreuses couleurs peut ne plus donner un rendu lisible (agréable).
 

Pièces jointes

  • Noms.jpg
    Noms.jpg
    98.7 KB · Affichages: 39

Discussions similaires

Statistiques des forums

Discussions
314 450
Messages
2 109 724
Membres
110 552
dernier inscrit
jasson