Largeur des cellules Excel
Bonjour à tous.
En voulant créer un jeu sur Excel pour mon petit fils, à un moment donné j'ai voulu ajuster automatiquement la largeur de deux colonnes en fonction de la largeur de la fenêtre Excel, qui varie d'un PC à un autre. Extrêmement simple, me direz vous. Hé bien non ! Ou alors, je suis nul... Mais je vais m'améliorer, comme à chaque fois que je viens sur ce forum !
Bien. Tout d'abord une chose incompréhensible : Lorsque je crée les deux lignes de code suivantes, je suis censé "mesurer" la taille de la colonne N° 1, n'est_ce pas ?
Code:
1 2
| Test1 = Columns(1).ColumnWidth
Test2 = Cells(1,1).Width |
Mais le résultat est surprenant, puisque j'obtiens Test1 = 2, et Test2 = 15. Et la mesure "directe" sur la feuille Excel donne le résultat suivant : Largeur = 2 (25 pixels). Alors, quelle correspondance entre les valeurs "2", "15" et "25" ?? Je n'ai toujours pas la réponse. J'ai commencé par en déduire un ratio de 7,5 (15/2), mais c'aurait été trop simple. Une autre mesure sur la colonne 2 me donne respectivement 10,33 et 60, et Largeur = 10,33 (100 pixels). Du coup mon fameux ratio passe à 5,808 (60/10,33) au lieu de 7,5 auparavant... C'est raté pour le ratio !
Je précise par ailleurs que grâce à un autre sujet publié sur ce forum, je connais maintenant la résolution de l'écran (1680 x 945 dans mon cas) et - sauf erreur - les valeurs correspondant à "Screen.TwipsPerPixelX" et "Screen.TwipsPerPixelY", qui sont toutes les deux à 20. Mais est-ce que ça va me servir ?
Maintenant, je vais expliquer ma démarche. Je mesure la largeur totale de la feuille Excel par le code suivant (je n'en connais pas d'autre, alors s'il y a une bonne âme !) :
Code:
Largeur = Application.ExecuteExcel4Macro("Get.workspace(13)")
Pour info, j'obtiens 1005,6. Puis je mesure la largeur des 'N' cellules 'immuables' correspondant à l'espace du jeu créé (j'obtiens 950,2). Et c'est là que je veux ajuster les deux colonnes restantes (à gauche et à droite de cet espace), soit : (1005,6 - 950,2) / 2 = 27,7 pour chaque colonne.
Précision complémentaire ajoutée par la suite : Toutes les colonnes qui sont à droite de la colonne 'finale' sont masquées.
Mon problème, c'est que la seule commande que je connaisse pour modifier la largeur de colonne est :
Code:
Columns(1).ColumnWidth = 27,7
En effet, les commandes Range("A1").Width ou Cells(1,1).Width =27,7 provoquent une erreur.
Mais quand je fais ça, la colonne est beaucoup trop large, puisqu'elle passe à 257 pixels. Bref, j'y arrive bien en augmentant mes colonnes d'une unité à chaque fois, puis en vérifiant, puis en recommençant à nouveau tant que ce n'est pas bon. Mais ça fait sacrément sauter l'image, et de toute façon le but de l'opération c'est d'y arriver du premier coup. En fait, je m'aperçois que je suis en train de vouloir soustraire des oranges à des citrons. Et ça ne passe pas vraiment...
Voilà, je crois que j'ai tout dit. Encore une prise de tête pour un truc banal, et pas mal de temps perdu.
Merci de m'apporter, sinon une solution, au moins une explication.
Cordialement,
JR
Avancée dans mes recherches
Bonjour (re) et merci pour les réponses.
En fait, le tableau des correspondances (pas très clair à la première approche, ils auraient du présenter ça sous forme d'un vrai tableau) ne m'a rien apporté. Par contre, l'idée de l'unité du caractère du style "normal" (que j'appellerai l'unité "N") est à creuser. Par ailleurs, en poursuivant mes recherches, je me suis aperçu de la chose suivante :
Si X est la valeur que je donne dans l'instruction "Columns(1).ColumnWidth = X", on peut voir que :
La première valeur de largeur de colonne lue directement dans la feuille Excel est égale à X. Si je comprends bien, c'est ici que l'on a affaire à la fameuse unité dépndant du style normal. La seconde valeur, exprimée en pixels, est égale à : Y1 = 9 X + constante. Dans mon cas, cette constante est égale à 4.
Maintenant, si je lis la largeur de cellule par une macro, je constate que la valeur (donc exprimée en points si j'ai bien compris) est égale à : Y2 = 5,4 X + constante, avec Cte = 4,2 dans mon cas. Et pour ces deux équations, ça tombe vraiment pile poil !
Quelqu'un sait-il d'où viennent ces constantes ?
Ceci me permet donc de convertir directement la valeur cherchée pour la largeur de cellule, en me servant de la seconde équation à l'envers. En réalité, je ne tombe pas tout à fait juste et il faut que j'ajoute 1 point. Ja n'ai pas encore compris pourquoi, mais ça va venir.
Alors, comme apparemment l'unité "N" dépend du style normal, ma dernière question sera la suivante : Quel est le code qui permet de connaitre la valeur correspondant au caractère du style normal ?
Merci et @ plus pour vos réponses
JR