Largeur cm string vba word

Résolu
sisi231 Messages postés 207 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 mars 2013 - 5 juil. 2008 à 15:30
sisi231 Messages postés 207 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 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.

Merci de m'aider.

A+

SISI231

22 réponses

gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
5 juil. 2008 à 15:32
ben tu l'imprimes et tu la mesures???!!!
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
6 juil. 2008 à 12:11
Re,

Non ...

les pixels sont des unités logiques, alors que les points, centimètres, millimètres et pouces sont des unités physiques !

Lorsque tu as la taille en points, sa transposition en centimètres n'est nullement dépendante du nombre de pixels par unité physique !

Il y a 72 points par pouce, dans tous les cas de figure !

et un pouce vaut 25,4 mm


le reste n'est qu'arithmétique.
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
5 juil. 2008 à 16:00
salut,
la classe de cette source devrait être compatible VBA sans modification :
http://www.vbfrance.com/codes/MESURER-TAILLE-CHAINE-PIXELS-MODULE-CLASSE_40299.aspx

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  
0
sisi231 Messages postés 207 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 mars 2013 5
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sisi231 Messages postés 207 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 mars 2013 5
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.

SISI231
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 juil. 2008 à 20:01
Un truc tout bête si tu ne veux pas te lancer dans du plus compliqué :


Un Label invisible avec sa propriété autosize à true : tu mets ta chaîne dans son caption et tu mesures la largeur qu'il prend automatiquement.
0
sisi231 Messages postés 207 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 mars 2013 5
5 juil. 2008 à 20:14
oui jmfmarques mais ce sera en pixels et non en centimètres (de l'imprimante) !
SISI231
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 juil. 2008 à 23:29
Bon...


Je croyais que le VBA de Word comptait tout (comme celui de Excel) sur une echelle de points et non de pixels ...

Quoi qu'il en soit : rien n'est plus simple que de transformer une dimension donnée en une échelle en une dimension donnée dans l'autre !!!
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
5 juil. 2008 à 23:39
mdr
wordpad.exe vous savez le bête éditeur de richtext qui est livré en standart avec windaube
ben il a une règle en centimètres


je viens de m'en apercevoir 
0
sisi231 Messages postés 207 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 mars 2013 5
6 juil. 2008 à 11:31
Encore une fois le nombre de pixels par centimètres (ou points) dépend de l'imprimante et je voudrais une macro portable !

SISI231
0
sisi231 Messages postés 207 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 mars 2013 5
6 juil. 2008 à 16:05
oui pour centimètres/pouces mais pas pour pixels/centimètres ou pixels/pouces j'ai parlé trop vite

SISI231
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
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)
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 juil. 2008 à 16:48
<li>
Vous êtes ici : [infomsg.aspx Thèmes] / [infomsgf_VISUAL-BASIC_1.aspx Visual Basic 6] / [infomsgt_DIVERS_220.aspx Divers] / [infomsgt_GENERAL_222.aspx General] / Largeur cm string vba word</li>
VB6 ...
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
6 juil. 2008 à 16:54
houps sorry j'avais oublié vb6
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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)...
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 juil. 2008 à 17:05
exact, d'où mon tout premier message (class) qui ne passe par aucun control

est-ce que les méthodes .ScaleX et .ScaleY existent?

si oui (à retoucher) :
http://www.codyx.org/snippet_convertir-taille-objet-stdpicture_281.aspx
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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.

 
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 juil. 2008 à 19:53
screen.twipsperpixelx, screen.twipsperpixely
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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 ...
0
sisi231 Messages postés 207 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 mars 2013 5
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
0
Rejoignez-nous