lSteph : Les shapes et leurs dimensions réelles

Le
Trirème
Concernant un post sur MPFE du 1 janvier 2008 21:29 (en France): "manque un bout
de code" par Emma.
Plus précisément, voir l'échange 2 janvier 2008 17:36

Pour compléter ce post entre lSteph et moi, voici la formule qui permet de
connaître la dimension réelle qu'aura un objet (shape) lorsqu'on lui impose une
taille précise.

ValeurRéelle = MAX(3/4, INT(4/3 * ValeurSouhaitée + 0.5) * 3/4)
En soi la formule n'est pas compliquée, mais comme la taille ne peut pas être
inférieure à 0,75, la fonction Max l'alourdit un peu.

Le code suivant affiche une taille souhaitée et la taille conservée par Excel.

Sub VerifHauteurObjet()
'
' Macro enregistrée le 03/01/2008 par Trirème
' Lorsqu'on impose une taille à un objet
' Excel "arrondit" cette valeur et l'objet peut avoir une taille non souhaitée
' Une boucle inscrit dans 3 colonnes distinctes la hauteur souhaitée,
' la hauteur "arrondie" par Excel et la hauteur obtenue par calcul.

Dim i As Integer

Sheets.Add ' On insère un rectangle dans une nouvelle feuille
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0#, 0#, 60#, 12.75). _
Select
Range("B1") = "Haut. souhaitée"
Range("C1") = "Haut. ""corrigée"" par Excel"
Range("D1") = "Haut. calculée"
For i = 2 To 100 ' et on fait varier sa hauteur dans une boucle
Selection.ShapeRange.Height = i ' On impose une hauteur à l'objet
Range("B" & i) = i
Range("C" & i) = Selection.ShapeRange.Height ' … Puis on lit la hauteur de
l'objet
Range("D" & i) = Application.Max(3 / 4, Int(4 / 3 *
Selection.ShapeRange.Height + 0.5) * 3 / 4)
' ValeurRéelle = MAX(3/4, INT(4/3 * ValeurSouhaitée + 0.5) * 3/4)
' La comparaison des ValeurSouhaitée et ValeurRéelle
' permet d'apprécier les différences
Next
End Sub


Cordialement,
--
Trirème
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Misange
Le #5114841
Je mets de côté ! merci d'avoir fait la compil de cette discussion
Trirème ;-)

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Concernant un post sur MPFE du 1 janvier 2008 21:29 (en France): "manque
un bout de code..." par Emma.
Plus précisément, voir l'échange 2 janvier 2008 17:36

Pour compléter ce post entre lSteph et moi, voici la formule qui permet
de connaître la dimension réelle qu'aura un objet (shape) lorsqu'on lui
impose une taille précise.

ValeurRéelle = MAX(3/4, INT(4/3 * ValeurSouhaitée + 0.5) * 3/4)
En soi la formule n'est pas compliquée, mais comme la taille ne peut pas
être inférieure à 0,75, la fonction Max l'alourdit un peu.

Le code suivant affiche une taille souhaitée et la taille conservée par
Excel.

Sub VerifHauteurObjet()
'
' Macro enregistrée le 03/01/2008 par Trirème
' Lorsqu'on impose une taille à un objet
' Excel "arrondit" cette valeur et l'objet peut avoir une taille non
souhaitée
' Une boucle inscrit dans 3 colonnes distinctes la hauteur souhaitée,
' la hauteur "arrondie" par Excel et la hauteur obtenue par calcul.

Dim i As Integer

Sheets.Add ' On insère un rectangle dans une nouvelle feuille...
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0#, 0#, 60#, 12.75). _
Select
Range("B1") = "Haut. souhaitée"
Range("C1") = "Haut. ""corrigée"" par Excel"
Range("D1") = "Haut. calculée"
For i = 2 To 100 ' ... et on fait varier sa hauteur dans une boucle
Selection.ShapeRange.Height = i ' On impose une hauteur à l'objet...
Range("B" & i) = i
Range("C" & i) = Selection.ShapeRange.Height ' … Puis on lit la
hauteur de l'objet
Range("D" & i) = Application.Max(3 / 4, Int(4 / 3 *
Selection.ShapeRange.Height + 0.5) * 3 / 4)
' ValeurRéelle = MAX(3/4, INT(4/3 * ValeurSouhaitée + 0.5) * 3/4)
' La comparaison des ValeurSouhaitée et ValeurRéelle
' permet d'apprécier les différences
Next
End Sub


Cordialement,


LSteph
Le #5114731
;-)

je m'disais aussi que cela pouvait être utile à tous!
Bien vu à tous les deux et Merci.

--
lSteph

Je mets de côté ! merci d'avoir fait la compil de cette discussion
Trirème ;-)

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Concernant un post sur MPFE du 1 janvier 2008 21:29 (en France):
"manque un bout de code..." par Emma.
Plus précisément, voir l'échange 2 janvier 2008 17:36

Pour compléter ce post entre lSteph et moi, voici la formule qui
permet de connaître la dimension réelle qu'aura un objet (shape)
lorsqu'on lui impose une taille précise.

ValeurRéelle = MAX(3/4, INT(4/3 * ValeurSouhaitée + 0.5) * 3/4)
En soi la formule n'est pas compliquée, mais comme la taille ne peut
pas être inférieure à 0,75, la fonction Max l'alourdit un peu.

Le code suivant affiche une taille souhaitée et la taille conservée
par Excel.

Sub VerifHauteurObjet()
'
' Macro enregistrée le 03/01/2008 par Trirème
' Lorsqu'on impose une taille à un objet
' Excel "arrondit" cette valeur et l'objet peut avoir une taille non
souhaitée
' Une boucle inscrit dans 3 colonnes distinctes la hauteur souhaitée,
' la hauteur "arrondie" par Excel et la hauteur obtenue par calcul.

Dim i As Integer

Sheets.Add ' On insère un rectangle dans une nouvelle feuille...
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0#, 0#, 60#, 12.75). _
Select
Range("B1") = "Haut. souhaitée"
Range("C1") = "Haut. ""corrigée"" par Excel"
Range("D1") = "Haut. calculée"
For i = 2 To 100 ' ... et on fait varier sa hauteur dans une boucle
Selection.ShapeRange.Height = i ' On impose une hauteur à l'objet...
Range("B" & i) = i
Range("C" & i) = Selection.ShapeRange.Height ' … Puis on lit la
hauteur de l'objet
Range("D" & i) = Application.Max(3 / 4, Int(4 / 3 *
Selection.ShapeRange.Height + 0.5) * 3 / 4)
' ValeurRéelle = MAX(3/4, INT(4/3 * ValeurSouhaitée + 0.5) * 3/4)
' La comparaison des ValeurSouhaitée et ValeurRéelle
' permet d'apprécier les différences
Next
End Sub


Cordialement,




LSteph
Le #5114571
Re, bonsoir,

...après test en résumé Excel passe par paliers de 0.25
du coup selon cette formule le calculé et le "arrondi" sont les mêmes.

Donc en prenant le calcul même en double cela reste à 0.25 lorsqu'on a
dimensionné soi même des cellules et par macro c'est pire puisqu'on ne
peut utiliser que columnwidth et non width qui est en lecture seule.
Cela reviendrait donc à dire qu'on ne peut pas fixer comme on veut une
largeur précise...

C'est bien cela?

J'espère un peu me tromper...
Enfin tout de même c'est pas dramatique pour une vue normale 0.25 c'est
pas flagrant

Faudra que je retourne aussi voir le lien que tu as donné hier, j'y ai
vu un peu vite de nombreuses choses potentiellement intéressantes aussi.

Merci encore.

--
Stéphane



Concernant un post sur MPFE du 1 janvier 2008 21:29 (en France): "manque
un bout de code..." par Emma.
Plus précisément, voir l'échange 2 janvier 2008 17:36

Pour compléter ce post entre lSteph et moi, voici la formule qui permet
de connaître la dimension réelle qu'aura un objet (shape) lorsqu'on lui
impose une taille précise.

ValeurRéelle = MAX(3/4, INT(4/3 * ValeurSouhaitée + 0.5) * 3/4)
En soi la formule n'est pas compliquée, mais comme la taille ne peut pas
être inférieure à 0,75, la fonction Max l'alourdit un peu.

Le code suivant affiche une taille souhaitée et la taille conservée par
Excel.

Sub VerifHauteurObjet()
'
' Macro enregistrée le 03/01/2008 par Trirème
' Lorsqu'on impose une taille à un objet
' Excel "arrondit" cette valeur et l'objet peut avoir une taille non
souhaitée
' Une boucle inscrit dans 3 colonnes distinctes la hauteur souhaitée,
' la hauteur "arrondie" par Excel et la hauteur obtenue par calcul.

Dim i As Integer

Sheets.Add ' On insère un rectangle dans une nouvelle feuille...
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0#, 0#, 60#, 12.75). _
Select
Range("B1") = "Haut. souhaitée"
Range("C1") = "Haut. ""corrigée"" par Excel"
Range("D1") = "Haut. calculée"
For i = 2 To 100 ' ... et on fait varier sa hauteur dans une boucle
Selection.ShapeRange.Height = i ' On impose une hauteur à l'objet...
Range("B" & i) = i
Range("C" & i) = Selection.ShapeRange.Height ' … Puis on lit la
hauteur de l'objet
Range("D" & i) = Application.Max(3 / 4, Int(4 / 3 *
Selection.ShapeRange.Height + 0.5) * 3 / 4)
' ValeurRéelle = MAX(3/4, INT(4/3 * ValeurSouhaitée + 0.5) * 3/4)
' La comparaison des ValeurSouhaitée et ValeurRéelle
' permet d'apprécier les différences
Next
End Sub


Cordialement,


Modeste
Le #5114561
Bonsour® LSteph avec ferveur ;o))) vous nous disiez :
Cela reviendrait donc à dire qu'on ne peut pas fixer comme on veut une
largeur précise...
le pixel dépend en effet de la partie physique, donc variable selon le

périphérique(marque, résolution)
le Twips est screen-independent (1440 twips par pouce, ou 567 twips par cm)
selon le periphérique il y a donc une relation variable pixel/twips
!!!!
supreme raffinement les pixels ne sont pas circulaires mais ovales !!!!!

http://support.microsoft.com/kb/463203/fr
http://support.microsoft.com/kb/210590
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q94927

Le twip logique
Une unité de distance, reposant sur twips, qui lors de l'impression, équivaut à
un twip.
Cela permet de s'assurer que le placement et la proportion d'éléments d'écran
dans l'écran d'affichage de la même application sur tous les systèmes.
A unit of distance, based on twips, that when printed, equals one twip.
This ensures that placement and proportion of screen elements in your screen
application display the same on all systems.

Un twip est une unité de longueur égale à 1 / 20 d'une imprimante, une
imprimante et le point est 1 / 72 de pouce. Il ya environ 1440 twips à une
logique pouces ou 567 twips à une logique centimètre (la longueur d'un élément
d'écran, mesurant un pouce ou d'un centimètre lors de l'impression).
A twip is a unit of length equal to 1/20 of a printer's point, and a printer's
point is 1/72 of an inch. There are approximately 1440 twips to a logical inch
or 567 twips to a logical centimeter (the length of a screen item measuring one
inch or one centimeter when printed).

Toute unité de mesure absolue, comme les pouces, centimètres ou twips, n'est pas
nécessairement compatible lorsqu'ils traitent avec les périphériques externes
tels que des moniteurs ou des imprimantes. Si, par exemple, vous programmez la
dessiner une ligne d'un pouce sur l'écran, le mesurer avec une règle pour
s'assurer qu'elle est un pouce, puis passez à un plus grand écran, la ligne ne
sera plus un pouce. Par conséquent, l'une logique twip peut être constituée
d'une ou plusieurs twips.
Any absolute unit of measurement, such as inches, centimeters, or twips, is not
necessarily consistent when dealing with external devices such as monitors or
printers. If, for example, you programmatically draw a one inch line on a
monitor, measure it with a ruler to ensure that it is one inch, then switch to a
larger monitor, the line will no longer be one inch. Therefore, one logical twip
may consist of one or more twips.



@+
;o)))

Trirème
Le #5114551
OUPS !
Kolossale méprise, à la place de :
Range("D" & i) = Application.Max(3 / 4, Int(4 / 3 * Selection.ShapeRange.Height
+ 0.5) * 3 / 4)

Il faut écrire :
Range("D" & i) = Application.Max(3 / 4, Int(4 / 3 * i + 0.5) * 3 / 4)
bien sûr, le but étant de retrouver par calcul ce qu'Excel va prendre comme valeur.


Trirème, contrit
Trirème
Le #5114541
...après test en résumé Excel passe par paliers de 0.25
NON, regarde bien les résultats obtenus. Lorsqu'on incrémente par pas de 1,

Excel incrémente irrégulièrement de 0,75 ou de 0,5 =-O !!

Pour mieux comprendre les variations, dans mon programme test on peut changer la
boucle avec un pas plus petit :

For i = 2 To 200 ' ... et on fait varier sa hauteur dans une boucle
Selection.ShapeRange.Height = i / 10 ' On impose une hauteur à l'objet...
Range("B" & i) = i / 10
Range("C" & i) = Selection.ShapeRange.Height ' … Puis on lit la hauteur de
l'objet
Range("D" & i) = Application.Max(3 / 4, Int(4 / 3 * i / 10 + 0.5) * 3 / 4)
' ValeurRéelle = MAX(3/4, INT(4/3 * ValeurSouhaitée + 0.5) * 3/4)
' La comparaison des ValeurSouhaitée et ValeurRéelle
' permet d'apprécier les différences
Next


du coup selon cette formule le calculé et le "arrondi" sont les mêmes.
Tout à fait, le calculé, permet de savoir à l'avance la valeur qu'Excel utilisera.


Donc en prenant le calcul même en double cela reste à 0.25 lorsqu'on a
dimensionné soi même des cellules et par macro c'est pire puisqu'on ne
peut utiliser que columnwidth et non width qui est en lecture seule.
Cela reviendrait donc à dire qu'on ne peut pas fixer comme on veut une
largeur précise...

C'est bien cela?
Et ouais :-(


Enfin tout de même c'est pas dramatique pour une vue normale 0.25 c'est
pas flagrant
Si j'ai travaillé dessus, c'est parce que je dessinais des formes en utilisant

des couleurs différentes (vert ou rouge, bon ou mauvais) selon la taille
calculée. Or, à l'écran, j'obtenais des tailles identiques avec des couleurs
différentes.

Exemple, trait vert si inférieur à limite, rouge si supérieur à limite :
hauteur limite = 10
hauteur calculée = 9,5 --> vert, taille réelle d'Excel : 9,75
hauteur calculée = 10,1 --> rouge, taille réelle d'Excel : 9,75 également

LSteph
Le #5114441
Bonjour les amis,

Oui j'ai bien compris cela mais me suis mal exprimé sur
ce que je remarque toutefois: exemple 11.5+0.75.25
la partie décimale n'est jamais inférieure à 0.25
seuil en deçà duquel on aura possiblement pas davantage de précision.

..arrgh pour les couleurs je me mets à ta place, j'aurais certes pédalé
un moment dans la choucroute avant de comprendre ce qui m'arrivait!
;-)

Je sens que Misange va pouvoir revenir faire un tour par ici, car
j'ai aperçu qu'il y a encore du grain pour notre moulin!

M'en vais donc voir plus en détail ce que nous en dit notre Anichois,
que je remercie également, il paraitrait que les pixels, ça joue au
Rugby, j'ai lu cela vite,
moi ce sont mes neurones qui vont commencer à faire la mêlée.

Merci.

@+

--
lSteph

...après test en résumé Excel passe par paliers de 0.25
NON, regarde bien les résultats obtenus. Lorsqu'on incrémente par pas de

1, Excel incrémente irrégulièrement de 0,75 ou de 0,5 =-O !!

Pour mieux comprendre les variations, dans mon programme test on peut
changer la boucle avec un pas plus petit :

For i = 2 To 200 ' ... et on fait varier sa hauteur dans une boucle
Selection.ShapeRange.Height = i / 10 ' On impose une hauteur à
l'objet...
Range("B" & i) = i / 10
Range("C" & i) = Selection.ShapeRange.Height ' … Puis on lit la
hauteur de l'objet
Range("D" & i) = Application.Max(3 / 4, Int(4 / 3 * i / 10 + 0.5) *
3 / 4)
' ValeurRéelle = MAX(3/4, INT(4/3 * ValeurSouhaitée + 0.5) * 3/4)
' La comparaison des ValeurSouhaitée et ValeurRéelle
' permet d'apprécier les différences
Next


du coup selon cette formule le calculé et le "arrondi" sont les mêmes.
Tout à fait, le calculé, permet de savoir à l'avance la valeur qu'Excel

utilisera.

Donc en prenant le calcul même en double cela reste à 0.25 lorsqu'on a
dimensionné soi même des cellules et par macro c'est pire puisqu'on ne
peut utiliser que columnwidth et non width qui est en lecture seule.
Cela reviendrait donc à dire qu'on ne peut pas fixer comme on veut
une largeur précise...

C'est bien cela?
Et ouais :-(


Enfin tout de même c'est pas dramatique pour une vue normale 0.25
c'est pas flagrant
Si j'ai travaillé dessus, c'est parce que je dessinais des formes en

utilisant des couleurs différentes (vert ou rouge, bon ou mauvais) selon
la taille calculée. Or, à l'écran, j'obtenais des tailles identiques
avec des couleurs différentes.

Exemple, trait vert si inférieur à limite, rouge si supérieur à limite :
hauteur limite = 10
hauteur calculée = 9,5 --> vert, taille réelle d'Excel : 9,75
hauteur calculée = 10,1 --> rouge, taille réelle d'Excel : 9,75 également



LSteph
Le #5114401
;-) Grand Merci !
Thank's a lot !


Bonsour® LSteph avec ferveur ;o))) vous nous disiez :
Cela reviendrait donc à dire qu'on ne peut pas fixer comme on veut une
largeur précise...
le pixel dépend en effet de la partie physique, donc variable selon le

périphérique(marque, résolution)
le Twips est screen-independent (1440 twips par pouce, ou 567 twips par cm)
selon le periphérique il y a donc une relation variable pixel/twips
!!!!
supreme raffinement les pixels ne sont pas circulaires mais ovales !!!!!

http://support.microsoft.com/kb/463203/fr
http://support.microsoft.com/kb/210590
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q94927

Le twip logique
Une unité de distance, reposant sur twips, qui lors de l'impression, équivaut à
un twip.
Cela permet de s'assurer que le placement et la proportion d'éléments d'écran
dans l'écran d'affichage de la même application sur tous les systèmes.
A unit of distance, based on twips, that when printed, equals one twip.
This ensures that placement and proportion of screen elements in your screen
application display the same on all systems.

Un twip est une unité de longueur égale à 1 / 20 d'une imprimante, une
imprimante et le point est 1 / 72 de pouce. Il ya environ 1440 twips à une
logique pouces ou 567 twips à une logique centimètre (la longueur d'un élément
d'écran, mesurant un pouce ou d'un centimètre lors de l'impression).
A twip is a unit of length equal to 1/20 of a printer's point, and a printer's
point is 1/72 of an inch. There are approximately 1440 twips to a logical inch
or 567 twips to a logical centimeter (the length of a screen item measuring one
inch or one centimeter when printed).

Toute unité de mesure absolue, comme les pouces, centimètres ou twips, n'est pas
nécessairement compatible lorsqu'ils traitent avec les périphériques externes
tels que des moniteurs ou des imprimantes. Si, par exemple, vous programmez la
dessiner une ligne d'un pouce sur l'écran, le mesurer avec une règle pour
s'assurer qu'elle est un pouce, puis passez à un plus grand écran, la ligne ne
sera plus un pouce. Par conséquent, l'une logique twip peut être constituée
d'une ou plusieurs twips.
Any absolute unit of measurement, such as inches, centimeters, or twips, is not
necessarily consistent when dealing with external devices such as monitors or
printers. If, for example, you programmatically draw a one inch line on a
monitor, measure it with a ruler to ensure that it is one inch, then switch to a
larger monitor, the line will no longer be one inch. Therefore, one logical twip
may consist of one or more twips.



@+
;o)))





Patrick BASTARD
Le #5340341
Bonjour, *Trirème LSteph et Modeste*

ET COMMENT SE FAIT-IL QUE CE NE SOIT PAS ENCORE SUR XlWiki ???

m'enfin...

--
Bien amicordialement,
P. Bastard

Avant d'imprimer ce mail, ayez une pensée pour les arbres.

Concernant un post sur MPFE du 1 janvier 2008 21:29 (en France):
"manque un bout de code..." par Emma.
Plus précisément, voir l'échange 2 janvier 2008 17:36

Pour compléter ce post entre lSteph et moi, voici la formule qui
permet de connaître la dimension réelle qu'aura un objet (shape)
lorsqu'on lui impose une taille précise.

ValeurRéelle = MAX(3/4, INT(4/3 * ValeurSouhaitée + 0.5) * 3/4)
En soi la formule n'est pas compliquée, mais comme la taille ne peut
pas être inférieure à 0,75, la fonction Max l'alourdit un peu.

Le code suivant affiche une taille souhaitée et la taille conservée
par Excel.
Sub VerifHauteurObjet()
'
' Macro enregistrée le 03/01/2008 par Trirème
' Lorsqu'on impose une taille à un objet
' Excel "arrondit" cette valeur et l'objet peut avoir une taille non
souhaitée ' Une boucle inscrit dans 3 colonnes distinctes la hauteur
souhaitée, ' la hauteur "arrondie" par Excel et la hauteur obtenue
par calcul.
Dim i As Integer

Sheets.Add ' On insère un rectangle dans une nouvelle feuille...
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0#, 0#, 60#, 12.75). _
Select
Range("B1") = "Haut. souhaitée"
Range("C1") = "Haut. ""corrigée"" par Excel"
Range("D1") = "Haut. calculée"
For i = 2 To 100 ' ... et on fait varier sa hauteur dans une boucle
Selection.ShapeRange.Height = i ' On impose une hauteur à
l'objet... Range("B" & i) = i
Range("C" & i) = Selection.ShapeRange.Height ' . Puis on lit la
hauteur de l'objet
Range("D" & i) = Application.Max(3 / 4, Int(4 / 3 *
Selection.ShapeRange.Height + 0.5) * 3 / 4)
' ValeurRéelle = MAX(3/4, INT(4/3 * ValeurSouhaitée + 0.5) * 3/4)
' La comparaison des ValeurSouhaitée et ValeurRéelle
' permet d'apprécier les différences
Next
End Sub


Cordialement,


Misange
Le #5340271
Ah ça c'est une réaction que j'apprécie Patrick ! C'est vrai ça, qu'est
ce qui empêche ceux qui ont de bonnes idées, qui prennent la peine de
les mettre en forme, de faire la synthèse avec ce que d'autres ont
ajouté, de mettre leurs oeuvres en ligne :-) XlWiki est justement fait
pour ça.
Trirème si tu veux écrire sur XlWiki (les autres cités ont déjà le
droit) il faut que tu me demandes un mot de passe (misange at excelabo
point net) : j'ai été obligée d'empecher l'accès en écriture aux
utilisateurs non enregistrés biscotte un crétin robotisé (voire
lobotomisé plutôt) efface des trucs et met des concetés.
Je ne saurais que trop vous encourageer à reprendre le chemin du wiki
qui dort (mais qui est pourtant drolement bien consulté...)

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Bonjour, *Trirème LSteph et Modeste*

ET COMMENT SE FAIT-IL QUE CE NE SOIT PAS ENCORE SUR XlWiki ???

m'enfin...



Publicité
Poster une réponse
Anonyme