OVH Cloud OVH Cloud

comprehension d'un bout de code

4 réponses
Avatar
Emcy
Bonjours,

je repose ma question differemment vu que personne ne m'a répondu :

dans le classeur de michel pierron sur le redimmensionnment dynamique d'une
image
http://www.excelabo.net/moteurs/compteclic.php?nom=mp-dynamiccontrol

jene coumprend pas ce bout de code :
Private Sub AxeY(ByVal x%, ByVal y%, S As Boolean)
Dim Toffset!
Toffset = Image1.Top
If S Then
Image1.Height = Image1.Height - Yp + y
Image1.Top = Image1.Top - (Image1.Top - Toffset)
Else
Image1.Top = Image1.Top - Yp + y
Image1.Height = Image1.Height - (Image1.Top - Toffset)
End If
HandPos
End Sub

il est marqué que "Toffset = Image1.Top" et que "Image1.Height =
Image1.Height - (Image1.Top - Toffset)"
si on simplifie la seconde formule à l'aide de la première, on obtient
"Image1.Height = Image1.Height - (Image1.Top - Toffset) = Image1.Height -
(Image1.Top - Image1.Top) = Image1.Height - (0) = Image1.Height"

donc normalement on obtient cette ligne de commande "Image1.Height =
Image1.Height"
pourtant lorsqu'on fait fonctionner la macro, on s'aperçois que la hauteur
de l'image n'est pas constante.

Quelqu'un peut-il m'expliquer pourquoi ?

4 réponses

Avatar
Michel Pierron
Bonjour Emcy;
Yp est la position y du curseur mémorisée au moment de l'appui sur le bouton
gauche sur la souris; c'est donc une constante.
y est égal à la position verticale instantanée du curseur sur un clip image,
lesquels sont repositionnés sur l'image en permanence s'il y a déplacement;
vu que la hauteur des clips vaut 4 points, y varie très peu. Toffset est
égal au Top initial de l'image à l'instant t tandis que Image1.Top est la
position de l'image corrigée à l'instant t+1. A l'instant t+1, le top de
l'image n'est donc pas égal à Toffset. Pour t'en convaincre et constater la
différence entre Toffset et Image1.Top, sur la feuille la feuille de calcul,
inscris:
En A1:Toffset
En A2:Yp
En A3:Y
En A4:Top
En A5:Height
Puis modifie la procédure comme suit:

Private Sub AxeY(ByVal X%, ByVal Y%, S As Boolean)
Dim Toffset!
With UserForm1.Image1
Toffset = .Top
Cells(2, 1) = Toffset
Cells(2, 2) = Yp
Cells(2, 3) = Y
If S Then
.Height = .Height - Yp + Y
.Top = .Top - (.Top - Toffset)
Else
.Top = .Top - Yp + Y
.Height = .Height - (.Top - Toffset)
End If
Cells(2, 4) = .Top
Cells(2, 5) = .Height
End With
UserForm1.HandPos
End Sub

Exécute la démo et observe les différences de valeurs en faisant varier
doucement le redimensionnement.
MP

"Emcy" a écrit dans le message de
news:%23HtJV8H%
Bonjours,

je repose ma question differemment vu que personne ne m'a répondu :

dans le classeur de michel pierron sur le redimmensionnment dynamique
d'une

image
http://www.excelabo.net/moteurs/compteclic.php?nom=mp-dynamiccontrol

jene coumprend pas ce bout de code :
Private Sub AxeY(ByVal x%, ByVal y%, S As Boolean)
Dim Toffset!
Toffset = Image1.Top
If S Then
Image1.Height = Image1.Height - Yp + y
Image1.Top = Image1.Top - (Image1.Top - Toffset)
Else
Image1.Top = Image1.Top - Yp + y
Image1.Height = Image1.Height - (Image1.Top - Toffset)
End If
HandPos
End Sub

il est marqué que "Toffset = Image1.Top" et que "Image1.Height > Image1.Height - (Image1.Top - Toffset)"
si on simplifie la seconde formule à l'aide de la première, on obtient
"Image1.Height = Image1.Height - (Image1.Top - Toffset) = Image1.Height -
(Image1.Top - Image1.Top) = Image1.Height - (0) = Image1.Height"

donc normalement on obtient cette ligne de commande "Image1.Height > Image1.Height"
pourtant lorsqu'on fait fonctionner la macro, on s'aperçois que la hauteur
de l'image n'est pas constante.

Quelqu'un peut-il m'expliquer pourquoi ?




Avatar
Emcy
il me semble que :
If S Then
.Height = .Height - Yp + Y
.Top = .Top - (.Top - Toffset)
Else
.Top = .Top - Yp + Y
.Height = .Height - (.Top - Toffset)
End If

peut être remplacé par :
If S Then
.Height = .Height - Yp + Y
.Else
.Top = .Top - Yp + Y
.Height = .Height - (.Top - Toffset)
End If

en tout cas, ça à l'air de marcher



"Michel Pierron" a écrit dans le message de
news:e5PJ2wJ%
Bonjour Emcy;
Yp est la position y du curseur mémorisée au moment de l'appui sur le
bouton

gauche sur la souris; c'est donc une constante.
y est égal à la position verticale instantanée du curseur sur un clip
image,

lesquels sont repositionnés sur l'image en permanence s'il y a
déplacement;

vu que la hauteur des clips vaut 4 points, y varie très peu. Toffset est
égal au Top initial de l'image à l'instant t tandis que Image1.Top est la
position de l'image corrigée à l'instant t+1. A l'instant t+1, le top de
l'image n'est donc pas égal à Toffset. Pour t'en convaincre et constater
la

différence entre Toffset et Image1.Top, sur la feuille la feuille de
calcul,

inscris:
En A1:Toffset
En A2:Yp
En A3:Y
En A4:Top
En A5:Height
Puis modifie la procédure comme suit:

Private Sub AxeY(ByVal X%, ByVal Y%, S As Boolean)
Dim Toffset!
With UserForm1.Image1
Toffset = .Top
Cells(2, 1) = Toffset
Cells(2, 2) = Yp
Cells(2, 3) = Y
If S Then
.Height = .Height - Yp + Y
.Top = .Top - (.Top - Toffset)
Else
.Top = .Top - Yp + Y
.Height = .Height - (.Top - Toffset)
End If
Cells(2, 4) = .Top
Cells(2, 5) = .Height
End With
UserForm1.HandPos
End Sub

Exécute la démo et observe les différences de valeurs en faisant varier
doucement le redimensionnement.
MP

"Emcy" a écrit dans le message de
news:%23HtJV8H%
Bonjours,

je repose ma question differemment vu que personne ne m'a répondu :

dans le classeur de michel pierron sur le redimmensionnment dynamique
d'une

image
http://www.excelabo.net/moteurs/compteclic.php?nom=mp-dynamiccontrol

jene coumprend pas ce bout de code :
Private Sub AxeY(ByVal x%, ByVal y%, S As Boolean)
Dim Toffset!
Toffset = Image1.Top
If S Then
Image1.Height = Image1.Height - Yp + y
Image1.Top = Image1.Top - (Image1.Top - Toffset)
Else
Image1.Top = Image1.Top - Yp + y
Image1.Height = Image1.Height - (Image1.Top - Toffset)
End If
HandPos
End Sub

il est marqué que "Toffset = Image1.Top" et que "Image1.Height > > Image1.Height - (Image1.Top - Toffset)"
si on simplifie la seconde formule à l'aide de la première, on obtient
"Image1.Height = Image1.Height - (Image1.Top - Toffset) Image1.Height -
(Image1.Top - Image1.Top) = Image1.Height - (0) = Image1.Height"

donc normalement on obtient cette ligne de commande "Image1.Height > > Image1.Height"
pourtant lorsqu'on fait fonctionner la macro, on s'aperçois que la
hauteur


de l'image n'est pas constante.

Quelqu'un peut-il m'expliquer pourquoi ?







Avatar
Michel Pierron
Re Emcy;
Oui puisque lorsque l'on redimensionne du bas vers le haut, Top est
constant.
MP

"Emcy" a écrit dans le message de
news:O429dLK%
il me semble que :
If S Then
.Height = .Height - Yp + Y
.Top = .Top - (.Top - Toffset)
Else
.Top = .Top - Yp + Y
.Height = .Height - (.Top - Toffset)
End If

peut être remplacé par :
If S Then
.Height = .Height - Yp + Y
.Else
.Top = .Top - Yp + Y
.Height = .Height - (.Top - Toffset)
End If

en tout cas, ça à l'air de marcher



"Michel Pierron" a écrit dans le message de
news:e5PJ2wJ%
Bonjour Emcy;
Yp est la position y du curseur mémorisée au moment de l'appui sur le
bouton

gauche sur la souris; c'est donc une constante.
y est égal à la position verticale instantanée du curseur sur un clip
image,

lesquels sont repositionnés sur l'image en permanence s'il y a
déplacement;

vu que la hauteur des clips vaut 4 points, y varie très peu. Toffset est
égal au Top initial de l'image à l'instant t tandis que Image1.Top est
la


position de l'image corrigée à l'instant t+1. A l'instant t+1, le top de
l'image n'est donc pas égal à Toffset. Pour t'en convaincre et constater
la

différence entre Toffset et Image1.Top, sur la feuille la feuille de
calcul,

inscris:
En A1:Toffset
En A2:Yp
En A3:Y
En A4:Top
En A5:Height
Puis modifie la procédure comme suit:

Private Sub AxeY(ByVal X%, ByVal Y%, S As Boolean)
Dim Toffset!
With UserForm1.Image1
Toffset = .Top
Cells(2, 1) = Toffset
Cells(2, 2) = Yp
Cells(2, 3) = Y
If S Then
.Height = .Height - Yp + Y
.Top = .Top - (.Top - Toffset)
Else
.Top = .Top - Yp + Y
.Height = .Height - (.Top - Toffset)
End If
Cells(2, 4) = .Top
Cells(2, 5) = .Height
End With
UserForm1.HandPos
End Sub

Exécute la démo et observe les différences de valeurs en faisant varier
doucement le redimensionnement.
MP

"Emcy" a écrit dans le message de
news:%23HtJV8H%
Bonjours,

je repose ma question differemment vu que personne ne m'a répondu :

dans le classeur de michel pierron sur le redimmensionnment dynamique
d'une

image
http://www.excelabo.net/moteurs/compteclic.php?nom=mp-dynamiccontrol

jene coumprend pas ce bout de code :
Private Sub AxeY(ByVal x%, ByVal y%, S As Boolean)
Dim Toffset!
Toffset = Image1.Top
If S Then
Image1.Height = Image1.Height - Yp + y
Image1.Top = Image1.Top - (Image1.Top - Toffset)
Else
Image1.Top = Image1.Top - Yp + y
Image1.Height = Image1.Height - (Image1.Top - Toffset)
End If
HandPos
End Sub

il est marqué que "Toffset = Image1.Top" et que "Image1.Height > > > Image1.Height - (Image1.Top - Toffset)"
si on simplifie la seconde formule à l'aide de la première, on obtient
"Image1.Height = Image1.Height - (Image1.Top - Toffset) > Image1.Height -
(Image1.Top - Image1.Top) = Image1.Height - (0) = Image1.Height"

donc normalement on obtient cette ligne de commande "Image1.Height > > > Image1.Height"
pourtant lorsqu'on fait fonctionner la macro, on s'aperçois que la
hauteur


de l'image n'est pas constante.

Quelqu'un peut-il m'expliquer pourquoi ?











Avatar
Emcy
Merci

tu devrais modifier le code de ton classeur pour éviter que les mecs comme
moi s'embrouille la tête

"Michel Pierron" a écrit dans le message de
news:%23yJi6qL%
Re Emcy;
Oui puisque lorsque l'on redimensionne du bas vers le haut, Top est
constant.
MP

"Emcy" a écrit dans le message de
news:O429dLK%
il me semble que :
If S Then
.Height = .Height - Yp + Y
.Top = .Top - (.Top - Toffset)
Else
.Top = .Top - Yp + Y
.Height = .Height - (.Top - Toffset)
End If

peut être remplacé par :
If S Then
.Height = .Height - Yp + Y
.Else
.Top = .Top - Yp + Y
.Height = .Height - (.Top - Toffset)
End If

en tout cas, ça à l'air de marcher



"Michel Pierron" a écrit dans le message de
news:e5PJ2wJ%
Bonjour Emcy;
Yp est la position y du curseur mémorisée au moment de l'appui sur le
bouton

gauche sur la souris; c'est donc une constante.
y est égal à la position verticale instantanée du curseur sur un clip
image,

lesquels sont repositionnés sur l'image en permanence s'il y a
déplacement;

vu que la hauteur des clips vaut 4 points, y varie très peu. Toffset
est



égal au Top initial de l'image à l'instant t tandis que Image1.Top est
la


position de l'image corrigée à l'instant t+1. A l'instant t+1, le top
de



l'image n'est donc pas égal à Toffset. Pour t'en convaincre et
constater



la
différence entre Toffset et Image1.Top, sur la feuille la feuille de
calcul,

inscris:
En A1:Toffset
En A2:Yp
En A3:Y
En A4:Top
En A5:Height
Puis modifie la procédure comme suit:

Private Sub AxeY(ByVal X%, ByVal Y%, S As Boolean)
Dim Toffset!
With UserForm1.Image1
Toffset = .Top
Cells(2, 1) = Toffset
Cells(2, 2) = Yp
Cells(2, 3) = Y
If S Then
.Height = .Height - Yp + Y
.Top = .Top - (.Top - Toffset)
Else
.Top = .Top - Yp + Y
.Height = .Height - (.Top - Toffset)
End If
Cells(2, 4) = .Top
Cells(2, 5) = .Height
End With
UserForm1.HandPos
End Sub

Exécute la démo et observe les différences de valeurs en faisant
varier



doucement le redimensionnement.
MP

"Emcy" a écrit dans le message de
news:%23HtJV8H%
Bonjours,

je repose ma question differemment vu que personne ne m'a répondu :

dans le classeur de michel pierron sur le redimmensionnment
dynamique




d'une
image
http://www.excelabo.net/moteurs/compteclic.php?nom=mp-dynamiccontrol

jene coumprend pas ce bout de code :
Private Sub AxeY(ByVal x%, ByVal y%, S As Boolean)
Dim Toffset!
Toffset = Image1.Top
If S Then
Image1.Height = Image1.Height - Yp + y
Image1.Top = Image1.Top - (Image1.Top - Toffset)
Else
Image1.Top = Image1.Top - Yp + y
Image1.Height = Image1.Height - (Image1.Top - Toffset)
End If
HandPos
End Sub

il est marqué que "Toffset = Image1.Top" et que "Image1.Height > > > > Image1.Height - (Image1.Top - Toffset)"
si on simplifie la seconde formule à l'aide de la première, on
obtient




"Image1.Height = Image1.Height - (Image1.Top - Toffset) > > Image1.Height -
(Image1.Top - Image1.Top) = Image1.Height - (0) = Image1.Height"

donc normalement on obtient cette ligne de commande "Image1.Height > > > > Image1.Height"
pourtant lorsqu'on fait fonctionner la macro, on s'aperçois que la
hauteur


de l'image n'est pas constante.

Quelqu'un peut-il m'expliquer pourquoi ?