Hauteur de lignes (Points vs Pixels)

AC045364

XLDnaute Junior
Dans Excel, pour la hauteur des lignes, les entrées se font en points et Excel converti ces points en pixels.

Comme je croyais que le pixel était l'unité première je fus très surpris
de voir ces conversions .....
A gauche : les unitées de points (entrées manuellement) pour la hauteur des lignes
A droite: la conversion par Excel en pixels

213,67 unitées = 284 pixels
213,68 unitées = 286 pixels
213,69 unitées = 286 pixels

Pourquoi lorsque que je passe de 213,67 à 213,68 points, le nombre de pixels passe de 284 à 286?
Est-ce que quelqu'un peut m'expliquer?
Daniel
 

CBernardT

XLDnaute Barbatruc
Re : Hauteur de lignes (Points vs Pixels)

Bonjour AC045364 et le forum.

Dans un premier temps, les rapports Dimensions-Pixels ne sont pas les mêmes en vertical et en horizontal.

Sur mon écran avec Excel 2003, j'ai les rapports suivants :

1-Vertical : 213 = 284 Pixels, 213,75 = 285 Pixels, 214,50 = 286 Pixels, 215,25 = 287 Pixels, 216 = 288 Pixels. soit une valeur à priori constante de 0.75 par Pixel.

2- Horizontalement : 39.86 = 284 Pixels, 40 = 285 Pixels, 40,14 = 286 Pixels, 40,29 = 287 Pixels, 40,43 = 288 Pixels, 40,57 = 289 Pixels. Ici la largeur de colonne varie de 0.14 à 0.15 par Pixel.

On peut supposer que ce changement de valeur d'un Pixel correspond à l'arrondi à deux décimales.
 

AC045364

XLDnaute Junior
Re : Hauteur de lignes (Points vs Pixels)

Merci Bernard pour la réponse mais ....
Je cherche toujours la formule qui convertira mes points en pixels....
Je sais que ça dépend de la résolution et d'autres choses.
Si en vertical, les points ont une valeur à priori constante de 0.75 par Pixel, alors pourquoi je ne passerai pas de 284 à 285 pixels dans la conversion?

213,67 unitées = 284 pixels
213,68 unitées = 286 pixels

Aurais-tu une idée de la formule de conversion?
Merci
Daniel
 

kiki29

XLDnaute Barbatruc
Re : Hauteur de lignes (Points vs Pixels)

Salut,voir sur InformIT: Understanding and Using Windows API Calls for Excel Programming > Working with the Screen
tiré de l'excellent livre : Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft® Excel and VBA
Code:
Option Explicit

'Declare all the API-specific items Private to the module
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As Long) As Long

Private Const LOGPIXELSX = 88  'Pixels/inch in X
'A point is defined as 1/72 inches
Private Const POINTS_PER_INCH As Long = 72
Private Const SM_CXSCREEN = 0   'Screen width
Private Const SM_CYSCREEN = 1   'Screen height

'   The width of the screen, in pixels
Public Function ScreenWidth() As Long
    ScreenWidth = GetSystemMetrics(SM_CXSCREEN)
End Function

'   The height of the screen, in pixels
Public Function ScreenHeight() As Long
    ScreenHeight = GetSystemMetrics(SM_CYSCREEN)
End Function

'   The size of a pixel, in points
Public Function PointsPerPixel() As Double
Dim hDC As Long
Dim lDotsPerInch As Long
    hDC = GetDC(0)
    lDotsPerInch = GetDeviceCaps(hDC, LOGPIXELSX)
    PointsPerPixel = POINTS_PER_INCH / lDotsPerInch
    ReleaseDC 0, hDC
End Function
 
Dernière édition:

CBernardT

XLDnaute Barbatruc
Re : Hauteur de lignes (Points vs Pixels)

Bonsoir,

La recherche d'une formule doit prendre le maximum de pixel possible en vertical comme en horizontal pour trouver le rapport le plus juste.

Le calcul en vertical et en ouvrant une ligne au maximum dans Excel 2003, cela donne 546 Pixels pour 409.5 Points de hauteur. En utilisant le zoom 50% pour diminuer l'affichage.

Soit un pixel : 409,5/546 = 0.75 Pts
Ou un Pts = 546/409.5 = 1,3333333 Pxl

Le calcul en horizontal et en ouvrant une colonne au maximum, cela donne 1790 Pixels pour 255 Points de largeur.

Soit un pixel : 255/1790 = 0.1424581 Pts

Ou un Pts = 1790/255 = 7,01960784 Pxl

A toi de voir ce que tu veux calculer, maintenant. :)
 

AC045364

XLDnaute Junior
Re : Hauteur de lignes (Points vs Pixels)

Bernard,
SVP lâche pas!
Je suis tout à fait d'accord avec ton calcul.
Mais cela n'explique pas pourquoi lorsque j'augmente de 0,01 points Excel augmente de 2 (deux) pixels.
213,67 points = 284 pixels
213,68 points = 286 pixels
213,69 points = 286 pixels
Le calcul n'est donc pas strictement linéaire.
Et c'est ça qui m'empêche de dormir (ou presque)
Je cherche toujours la formule.
Merci de ton intérêt
Daniel
 

CBernardT

XLDnaute Barbatruc
Re : Hauteur de lignes (Points vs Pixels)

re,

Si tu essayais de faire les mêmes calculs que ceux précédemment exposés, peut-être qu'une solution verrait le jour !
Au lieu de cela tu restes bloqué sur :
213,67 unitées = 284 pixels
213,68 unitées = 286 pixels
213,69 unitées = 286 pixels

Donc fait tes opérations horizontales et verticales avec une ouverture maximum d'une cellule et sans les limiter à deux décimales. Dans un deuxième temps utilise la fonction arrondi() à deux décimales et dis-nous si cela fait varier certains résultats d'opérations avant de vouloir accuser Excel de faire n'importe quoi !:cool:
 

AC045364

XLDnaute Junior
Re : Hauteur de lignes (Points vs Pixels)

Cher Bernard,
Je n'accuse pas Excel de faire n'importe quoi.
Je connais déjà le bug qui fait qu'Excel ne peut étendre les mois de trois lettres ou les jours de trois lettres de la même façon qu'il le fait pour les mois ou les jours complets lorsqu'on se sert de la poignée de recopie.
Je m'en accomode parfaitement.

Vu que tu es en quelque sorte "engagé" dans cette conversation, je te donne le contexte complet.Avec Excel, je copie une image d'environ 2 cm de haut par 15 cm de largeur.
Vu que que copie sur différentes filières avec de données différentes (certaines feuilles ont 8 colonnes et d'autres 10, 12 ou 15 colonnes), je dois ajuster l'image pour que la largeur soit de 8, 10, 12 ou 15 colonnes.
En se faisant, la hauteur varie vu que l'image demeure à l'échelle.
Ceci est fait manuellement naturellement.
Mon problème commence ici.
Avec la hauteur précise de l'image (en centième de cm), je calcule le nombre de points correspondants (disons X)
J'ajuste la hauteur de la ligne 1 à ce nombre X et ....... voila où arrive la différence.
Le 213.68 n'est qu'un exemple parmi tant d'autres.

Je sais qu'à l'oeil, le bas de l'image "semble" se poser sur la ligne 1, mais il y a des différences minimum pour certaines valeurs dont entre autre le 213.68.

Je constate simplement que la rapport entre les points et les pixels n'est PAS LINEAIRE. Je suis prêt à l'accepter. Je voudrais simplement savoir comment Excel arrive à ce résultat.

Je ne veux pas gâcher ton dimanche .. loin de là!
Merci
Daniel
 

AC045364

XLDnaute Junior
Re : Hauteur de lignes (Points vs Pixels)

Bonjour Kiki et Bernard....
Je m'excuse pour le brouhaha mais j'ai trouvé la formule de la conversion.

Hauteur des lignes converti en points et pixel

213,67 213,68 Entrée manuelle
__0,45 __0,45 Ajoute 0,45
214,12 214,13 Sous total
213,75 214,50 Arrondi au multiple de 0,75
213,00 213,75 Soustrait 0,75 donne l'entrée manuelle converti par Excel
284,00 285,00 Divise par 0,75 donne le nombre de pixels de la hauteur


Ici l'entrée manuelle de 213,67 points donne 284 pixels
Ici l'entrée manuelle de 213,68 points donne 285 pixels
Pourquoi le 0,45? Je ne sais pas mais ça marche


Avec ma formule, je me rend compte que le 213.68 donne vraiment 285 pixels et non pas 286 comme initialement annoncé.
Je vais faire des démarches maintenant pour la largeur des colonnes.
Peut-être que le problème du 285-286 vient de là?
Peut-être aussi qu'il n'y a jamais eu de problèmes.
Mais au moins vous m'avez aidé à me casser la tête et pour ça je vous remercie.
DAniel
 

Charly88

XLDnaute Occasionnel
Re : Hauteur de lignes (Points vs Pixels)

Salut,voir sur InformIT: Understanding and Using Windows API Calls for Excel Programming > Working with the Screen
tiré de l'excellent livre : Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft® Excel and VBA

Bonjour à tous et en particulier à Kiki29, j'espère que tu es toujours sur ce forum.
J'utilise un code très proche de celui-ci que tu a posté en 2010 et je suis bloqué sur un programme que je veux migrer vers un Excel 2013 64bits pour profiter des gains de performance (temps de sauvegarde des fichiers).
A l'ouverture du programme, les 3 lignes ci-dessous apparaissent en rouge avec le message suivant :
"The code in this project must be updated for use on 64-bit systems. Please review and update Declare statements and then mark them with the PtrSafe attribute."

Code:
'Déclaration des fonction API Windows32
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


Quelqu'un peut-il m'aider à adapter le code / a-t-il une version adaptée à du 64 bits ?

J'avais déjà fait des recherches il y a quelques années et j'étais finalement arrivé/resté bloqué sur un problème de windows common controls / mscomctl.ocx.
 

Statistiques des forums

Discussions
312 323
Messages
2 087 301
Membres
103 512
dernier inscrit
sisi235