Largeur cm string vba word [Résolu]

Messages postés
210
Date d'inscription
mercredi 5 mars 2003
Dernière intervention
29 mars 2013
- 5 juil. 2008 à 15:30 - Dernière réponse :
Messages postés
210
Date d'inscription
mercredi 5 mars 2003
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
Afficher la suite 

Votre réponse

22 réponses

Meilleure réponse
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
5 juil. 2008 à 15:32
3
Merci
ben tu l'imprimes et tu la mesures???!!!

Merci gillardg 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de gillardg
Meilleure réponse
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
6 juil. 2008 à 12:11
3
Merci
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.

Merci jmfmarques 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de jmfmarques
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
5 juil. 2008 à 16:00
0
Merci
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  
Commenter la réponse de PCPT
Messages postés
210
Date d'inscription
mercredi 5 mars 2003
Dernière intervention
29 mars 2013
5 juil. 2008 à 17:43
0
Merci
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
Commenter la réponse de sisi231
Messages postés
210
Date d'inscription
mercredi 5 mars 2003
Dernière intervention
29 mars 2013
5 juil. 2008 à 18:52
0
Merci
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
Commenter la réponse de sisi231
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
5 juil. 2008 à 20:01
0
Merci
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.
Commenter la réponse de jmfmarques
Messages postés
210
Date d'inscription
mercredi 5 mars 2003
Dernière intervention
29 mars 2013
5 juil. 2008 à 20:14
0
Merci
oui jmfmarques mais ce sera en pixels et non en centimètres (de l'imprimante) !
SISI231
Commenter la réponse de sisi231
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
5 juil. 2008 à 23:29
0
Merci
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 !!!
Commenter la réponse de jmfmarques
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
5 juil. 2008 à 23:39
0
Merci
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 
Commenter la réponse de gillardg
Messages postés
210
Date d'inscription
mercredi 5 mars 2003
Dernière intervention
29 mars 2013
6 juil. 2008 à 11:31
0
Merci
Encore une fois le nombre de pixels par centimètres (ou points) dépend de l'imprimante et je voudrais une macro portable !

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

SISI231
Commenter la réponse de sisi231
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
6 juil. 2008 à 16:34
0
Merci
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)
Commenter la réponse de gillardg
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
6 juil. 2008 à 16:48
0
Merci
<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 ...
Commenter la réponse de PCPT
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
6 juil. 2008 à 16:54
0
Merci
houps sorry j'avais oublié vb6
Commenter la réponse de gillardg
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
6 juil. 2008 à 16:59
0
Merci
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)...
Commenter la réponse de jmfmarques
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
6 juil. 2008 à 17:05
0
Merci
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  
Commenter la réponse de PCPT
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
6 juil. 2008 à 19:26
0
Merci
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.

 
Commenter la réponse de jmfmarques
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
6 juil. 2008 à 19:53
0
Merci
screen.twipsperpixelx, screen.twipsperpixely
Commenter la réponse de PCPT
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
6 juil. 2008 à 21:16
0
Merci
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 ...
Commenter la réponse de jmfmarques
Messages postés
210
Date d'inscription
mercredi 5 mars 2003
Dernière intervention
29 mars 2013
6 juil. 2008 à 21:26
0
Merci
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
Commenter la réponse de sisi231

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.