sisi231
Messages postés207Date d'inscriptionmercredi 5 mars 2003StatutMembreDernière intervention29 mars 2013
-
5 juil. 2008 à 15:30
sisi231
Messages postés207Date d'inscriptionmercredi 5 mars 2003StatutMembreDernière intervention29 mars 2013
-
7 juil. 2008 à 11:06
Bonjour !
Dans une macro Word je voudrait redimensionner les largeurs des colonnes d'un tableau créé par ma macro
de la largeur de leur titre c'est-à-dire de la chaîne de caractère figurant sur leur première rangée,
en exécutant l'instruction :
le_tableau.Columns(i).PreferredWidth = CentimetersToPoints(largeur_colonne).
Seulement je ne sais pas calculer la largeur en centimètres à passer à cette fonction en fonction
de la chaîne de caractère de la cellule de la première ligne de cette colonne et de la police de cette chaîne.
C'est ce que je voudrais savoir.
elle te retourne la taille d'une chaine en pixels selon sa typo
++
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
sisi231
Messages postés207Date d'inscriptionmercredi 5 mars 2003StatutMembreDernière intervention29 mars 20135 5 juil. 2008 à 17:43
Il me faut la taille en centimètre avec l'HDC de l'imprimante, et pour [auteur/GILLARDG/1360034.aspx gillardg] la mesure dépend du matériel donc la macro ne serait pas portable.
SISI231
Vous n’avez pas trouvé la réponse que vous recherchez ?
sisi231
Messages postés207Date d'inscriptionmercredi 5 mars 2003StatutMembreDernière intervention29 mars 20135 5 juil. 2008 à 18:52
Que je suis bête !! Avec la même police c'est la taille en pixels qui est dépendante d e l'imprimante mais pas la taille en centimètres (avec Word) : c'est donc gillardg qui a raison.
Seulement la taille dépend des caractères, en effet un " m " n'aura pas la même largeur qu'un " a " et pour ma macro, les titres des colonnes changent mais ce n'est pas grave, je me contenterais de cet à-peu-près sauf si quelqu'un trouve la réponse exacte entre temps.
gillardg
Messages postés3275Date d'inscriptionjeudi 3 avril 2008StatutMembreDernière intervention14 septembre 20142 6 juil. 2008 à 16:34
Public
Function
Text2Pixels(
ByVal
text
As
String
,
ByVal
police
As
String
,
ByVal
polsize
As
Integer
,
ByVal
polstyle
As
FontStyle)
As
Decimal
Dim
MainFont
As
New
Font(police, polsize, polstyle)
Dim
g
As
Graphics =
Me
.CreateGraphics
Dim
size2
As
SizeF = g.MeasureString(text, MainFont)
Return
(size2.Width)
End
Function
voila le texte en pixels,
pour les pixels en centimètres cela dépends de la résolution du périphérique
(la taille d'un pixel n'est pas la même sur un écran 22Pouces que sur un écran 15 pouces)
donc comme dit plus haut le mieux c'est de l'imprimer et de le mesurer( ou d'utiliser la règle de Wordpad après l'avoir reglée sur CM)
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 6 juil. 2008 à 16:59
Et, en plus, nous sommes sous VBA
Word...
sisi231 a écrit :
"Dans une macro Word je voudrait redimensionner les largeurs des colonnes d'un tableau créé par ma macro
de la largeur de leur titre c'est-à-dire de la chaîne de caractère figurant sur leur première rangée"
Sous VB6, l'utilisation de TextWidth était toute indiquée (mais nous ommes sous VBA)...
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 6 juil. 2008 à 19:26
Je commence à être perdu ...
Qu'as-tu finalement au départ ? des pixels ?
Si oui, voilà comment transformer en unités physiques (ici des points) une largeur connue au départ en pixels.
Il nous faut pour celà calculer d'abord le nombre horizontal (pour la largeur) de twips par pixel de ton écran.
Option Explicit
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, _
ByVal hdc As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, _
ByVal nIndex As Long) As Long
Const couic As Long = 1440
Function nbtwipsparpixhor() As Single
Dim coucou As Long
coucou = GetDC(0)
nbtwipsparpixhor = couic / GetDeviceCaps(coucou, 88)
ReleaseDC 0, coucou
End Function
Function nbtwipsparpixver() As Single
Dim coucou As Long
coucou = GetDC(0)
nbtwipsparpixver = couic / GetDeviceCaps(coucou, 90)
ReleaseDC 0, coucou
End Function
Private Sub Command2_Click()
Dim testwipsh As Integer, pixelsparpoucex As Double, pointsparpoucex As Double, k As Double, nbpixels
testwipsh = nbtwipsparpixhor()
pixelsparpoucex = 1440 / testwipsh
pointsparpoucex = 72
k = pixelsparpoucex / pointsparpoucex
nbpixels = 200
MsgBox "voilà, sur TA machine, " & nbpixels & " pixels en points ===>>" & nbpixels / k & " points"
End Sub
Voilà !
Si tu veux passer des pixels en centimètres au lieu des points, c'est facile
- soit tu transforme les points en centimètres en passant par les pouces,
- soit tu fais directement un calcul similaire sur la base de
567 twips par centimetre au lieu de le faire (comme ci-dessus) sur la base de
1440 twips par pouce et de 72 points par pouce.
Je te laisse à ce calcul arithmétique élémentaire, hein
Nota (je n'ai utilisé dans mon exemple que la largeur. Pour la hauteur, c'est le même principe, mais en faisant appel à nbtwipsparpixver
pour calculer le nombre de twips par pixel verticalement
Dans la très grande majorité des cas, le nombre de twips par pixel est 15, tant horizontalement que verticalement, mais tu peux tomber sur des configurations particulières et il vaut donc mieux se méfier, en calculant (mon code) ces nombres de twips par pixel.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 6 juil. 2008 à 21:16
Euh...
On est sous VBA... (voilà bien pourquoi le choix de la section adéquate est nécessaire )
Pas d'objet Screen ===>> Pas du reste, donc ...
Pauvre VBA ...
sisi231
Messages postés207Date d'inscriptionmercredi 5 mars 2003StatutMembreDernière intervention29 mars 20135 6 juil. 2008 à 21:26
screen.twipsperpixelx, screen.twipsperpixely >>
Non car ce qui nous intéresse c'est la largeur en cm pour l'imprimante car la règle de Word est pour l'imprimante.
Deuxio dac pour passer des pixels aux centimètres mais il faudrait pouvoir trouver la largeur de la chaîne en pixels, en delphi ça se fait avec printer.canvas.textwidth, ce qui veut bien dire que cette longueur en pixels de même que le nombre de pixels par pouces est dépendant de l'imprimante.
SISI231