OVH Cloud OVH Cloud

macro rotation d'1 "shapes"

7 réponses
Avatar
j-pascal
Bonjour,

Que faudrait-il ajouter à ce code pour que la rotation se termine comme elle
a commencé (rotation = 0) soit horizontale ?

Merci d'avance pour vos (éventuelles) réponses ;-)

JP

J'ai fait l'essai avec une image. Pb, quand je relance la macro, l'image
tourne bcp plus vite que la première fois ! Par ailleurs, j'imagine que la
vitesse de rotation dépend de "increment rotation" mais peut-être aussi du
CPU ??

Option Explicit

Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 500
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub

7 réponses

Avatar
MichDenis
Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 500
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
'---------------- 'Ajouter-------------------
If ActiveSheet.Shapes("WordArt 3").Rotation = 0 Then
Exit For
End If
'--------------------------------------------
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub






"j-pascal" a écrit dans le message de news:
%
Bonjour,

Que faudrait-il ajouter à ce code pour que la rotation se termine comme elle
a commencé (rotation = 0) soit horizontale ?

Merci d'avance pour vos (éventuelles) réponses ;-)

JP

J'ai fait l'essai avec une image. Pb, quand je relance la macro, l'image
tourne bcp plus vite que la première fois ! Par ailleurs, j'imagine que la
vitesse de rotation dépend de "increment rotation" mais peut-être aussi du
CPU ??

Option Explicit

Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 500
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub
Avatar
j-pascal
Bonjour MichDenis,

PARFAIT !

(merci)

JP

wrote:
Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 500
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
'---------------- 'Ajouter-------------------
If ActiveSheet.Shapes("WordArt 3").Rotation = 0 Then
Exit For
End If
'--------------------------------------------
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub






"j-pascal" a écrit dans le message de news:
%
Bonjour,

Que faudrait-il ajouter à ce code pour que la rotation se termine
comme elle a commencé (rotation = 0) soit horizontale ?

Merci d'avance pour vos (éventuelles) réponses ;-)

JP

J'ai fait l'essai avec une image. Pb, quand je relance la macro,
l'image tourne bcp plus vite que la première fois ! Par ailleurs,
j'imagine que la vitesse de rotation dépend de "increment rotation"
mais peut-être aussi du CPU ??

Option Explicit

Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 500
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub


Avatar
j-pascal
Re,

Evidemment cela fonctionne pour 1 seul tour ! J'imagine donc que si les
valeurs du compteur sont sous-dimensionnées, le WordArt se fige (?) et si
les valeurs sont trop importantes, elles ne sont pas prises en considération
(?)
Exact ?

JP

MichDenis wrote:
Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 500
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
'---------------- 'Ajouter-------------------
If ActiveSheet.Shapes("WordArt 3").Rotation = 0 Then
Exit For
End If
'--------------------------------------------
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub






"j-pascal" a écrit dans le message de news:
%
Bonjour,

Que faudrait-il ajouter à ce code pour que la rotation se termine
comme elle a commencé (rotation = 0) soit horizontale ?

Merci d'avance pour vos (éventuelles) réponses ;-)

JP

J'ai fait l'essai avec une image. Pb, quand je relance la macro,
l'image tourne bcp plus vite que la première fois ! Par ailleurs,
j'imagine que la vitesse de rotation dépend de "increment rotation"
mais peut-être aussi du CPU ??

Option Explicit

Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 500
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub


Avatar
MichDenis
Je n'ai pas tout compris le sens de ta question...

autour d'un point, il y a 360 degrés,
IncrementRotation 1 donc 360 fois
IncrementRotation 3 donc 120 fois, tourne plus vite.

Pas de problème, si tu choisis des multiples de 360, la shape
va toujours passer à IncrementRotation 0, la condition
que j'ai mise pour arrêter de tourner...mais si ce n'est pas un
multiple... Gros problème... tu vas être dans une boucle sans fin
parce que IncrementRotation ne sera jamais égale à 0 !!!

Ta question était autre ?


"j-pascal" a écrit dans le message de news:

Re,

Evidemment cela fonctionne pour 1 seul tour ! J'imagine donc que si les
valeurs du compteur sont sous-dimensionnées, le WordArt se fige (?) et si
les valeurs sont trop importantes, elles ne sont pas prises en considération
(?)
Exact ?

JP

MichDenis wrote:
Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 500
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
'---------------- 'Ajouter-------------------
If ActiveSheet.Shapes("WordArt 3").Rotation = 0 Then
Exit For
End If
'--------------------------------------------
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub






"j-pascal" a écrit dans le message de news:
%
Bonjour,

Que faudrait-il ajouter à ce code pour que la rotation se termine
comme elle a commencé (rotation = 0) soit horizontale ?

Merci d'avance pour vos (éventuelles) réponses ;-)

JP

J'ai fait l'essai avec une image. Pb, quand je relance la macro,
l'image tourne bcp plus vite que la première fois ! Par ailleurs,
j'imagine que la vitesse de rotation dépend de "increment rotation"
mais peut-être aussi du CPU ??

Option Explicit

Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 500
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub


Avatar
j-pascal
MichDenis wrote:
Je n'ai pas tout compris le sens de ta question...

autour d'un point, il y a 360 degrés,
IncrementRotation 1 donc 360 fois
IncrementRotation 3 donc 120 fois, tourne plus vite.

Pas de problème, si tu choisis des multiples de 360, la shape
va toujours passer à IncrementRotation 0, la condition
que j'ai mise pour arrêter de tourner...mais si ce n'est pas un
multiple... Gros problème... tu vas être dans une boucle sans fin
parce que IncrementRotation ne sera jamais égale à 0 !!!

Ta question était autre ?


Outre l'incrémentation, c'est la valeur donnée au compteur qui détermine la
durée pendant laquelle va tourner la shape, non ? Donc, pour moi, si cette
valeur est trop petite de sorte que le shape n'ait pas eu le temps de faire
un tour complet, on ne remplira pas la condition " If
ActiveSheet.Shapes("WordArt 3").Rotation = 0 Then Exit For" (?) et la
shape s'arrêtera dans une autre position qu'horizontale (?). Inversement, si
la valeur du compteur est très importante et qu'elle permettrait a priori de
faire plusieurs tours, avec ton code (me semble-t-il) la shape ne ferait
qu'un seul tour ! En conclusion, je comprends la notion d'increment par
rapport à 360 degrés mais pas la notion de multiple dont tu parles (j'ai
fait un test avec increment = 7 et ta macro s'arrête bien sur 0).

Cdlt

JP



"j-pascal" a écrit dans le message de news:

Re,

Evidemment cela fonctionne pour 1 seul tour ! J'imagine donc que si
les valeurs du compteur sont sous-dimensionnées, le WordArt se fige
(?) et si les valeurs sont trop importantes, elles ne sont pas prises
en considération (?)
Exact ?

JP

MichDenis wrote:
Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 500
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
'---------------- 'Ajouter-------------------
If ActiveSheet.Shapes("WordArt 3").Rotation = 0 Then
Exit For
End If
'--------------------------------------------
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub






"j-pascal" a écrit dans le message de news:
%
Bonjour,

Que faudrait-il ajouter à ce code pour que la rotation se termine
comme elle a commencé (rotation = 0) soit horizontale ?

Merci d'avance pour vos (éventuelles) réponses ;-)

JP

J'ai fait l'essai avec une image. Pb, quand je relance la macro,
l'image tourne bcp plus vite que la première fois ! Par ailleurs,
j'imagine que la vitesse de rotation dépend de "increment rotation"
mais peut-être aussi du CPU ??

Option Explicit

Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 500
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub




Avatar
JLuc
*Bonjour j-pascal*,
Peut être comme ceci:
For compteur = 1 To 360
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
For x = 1 To 1000 : Next 'Rallentira la procédure d'autant
Next compteur





MichDenis wrote:
Je n'ai pas tout compris le sens de ta question...

autour d'un point, il y a 360 degrés,
IncrementRotation 1 donc 360 fois
IncrementRotation 3 donc 120 fois, tourne plus vite.

Pas de problème, si tu choisis des multiples de 360, la shape
va toujours passer à IncrementRotation 0, la condition
que j'ai mise pour arrêter de tourner...mais si ce n'est pas un
multiple... Gros problème... tu vas être dans une boucle sans fin
parce que IncrementRotation ne sera jamais égale à 0 !!!

Ta question était autre ?


Outre l'incrémentation, c'est la valeur donnée au compteur qui détermine la
durée pendant laquelle va tourner la shape, non ? Donc, pour moi, si cette
valeur est trop petite de sorte que le shape n'ait pas eu le temps de faire
un tour complet, on ne remplira pas la condition " If
ActiveSheet.Shapes("WordArt 3").Rotation = 0 Then Exit For" (?) et la
shape s'arrêtera dans une autre position qu'horizontale (?). Inversement, si
la valeur du compteur est très importante et qu'elle permettrait a priori de
faire plusieurs tours, avec ton code (me semble-t-il) la shape ne ferait
qu'un seul tour ! En conclusion, je comprends la notion d'increment par
rapport à 360 degrés mais pas la notion de multiple dont tu parles (j'ai fait
un test avec increment = 7 et ta macro s'arrête bien sur 0).

Cdlt

JP



"j-pascal" a écrit dans le message de news:

Re,

Evidemment cela fonctionne pour 1 seul tour ! J'imagine donc que si
les valeurs du compteur sont sous-dimensionnées, le WordArt se fige
(?) et si les valeurs sont trop importantes, elles ne sont pas prises
en considération (?)
Exact ?

JP

MichDenis wrote:
Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 500
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
'---------------- 'Ajouter-------------------
If ActiveSheet.Shapes("WordArt 3").Rotation = 0 Then
Exit For
End If
'--------------------------------------------
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub






"j-pascal" a écrit dans le message de news:
%
Bonjour,

Que faudrait-il ajouter à ce code pour que la rotation se termine
comme elle a commencé (rotation = 0) soit horizontale ?

Merci d'avance pour vos (éventuelles) réponses ;-)

JP

J'ai fait l'essai avec une image. Pb, quand je relance la macro,
l'image tourne bcp plus vite que la première fois ! Par ailleurs,
j'imagine que la vitesse de rotation dépend de "increment rotation"
mais peut-être aussi du CPU ??

Option Explicit

Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 500
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub




--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O



Avatar
MichDenis
Un principe simple : pour déterminer le compteur de la boucle :

Combien de tours le WordArt devrait faire ? Supposons 3
et si nous choisissons IncrementRotation = 10

Pour faire une rotation de 360 degrées, cela va prendre 36 incrémentations
au tour ... si tu veux 3 tours .... 36 * 3 = 108

La "IncrementRotation " est de type Single (voir l'aide d'excel)

Voilà pour le princiipe ... et tu n'as pas besoin des lignes de code que j'ai ajoutées
========================================== Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 108
.Shapes("WordArt 3").IncrementRotation 10
DoEvents
'---------------- 'Ajouter-------------------
' If ActiveSheet.Shapes("WordArt 3").Rotation = 0 Then
' Exit For
' End If
'--------------------------------------------
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub
==========================================





"j-pascal" a écrit dans le message de news:





MichDenis wrote:
Je n'ai pas tout compris le sens de ta question...

autour d'un point, il y a 360 degrés,
IncrementRotation 1 donc 360 fois
IncrementRotation 3 donc 120 fois, tourne plus vite.

Pas de problème, si tu choisis des multiples de 360, la shape
va toujours passer à IncrementRotation 0, la condition
que j'ai mise pour arrêter de tourner...mais si ce n'est pas un
multiple... Gros problème... tu vas être dans une boucle sans fin
parce que IncrementRotation ne sera jamais égale à 0 !!!

Ta question était autre ?


Outre l'incrémentation, c'est la valeur donnée au compteur qui détermine la
durée pendant laquelle va tourner la shape, non ? Donc, pour moi, si cette
valeur est trop petite de sorte que le shape n'ait pas eu le temps de faire
un tour complet, on ne remplira pas la condition " If
ActiveSheet.Shapes("WordArt 3").Rotation = 0 Then Exit For" (?) et la
shape s'arrêtera dans une autre position qu'horizontale (?). Inversement, si
la valeur du compteur est très importante et qu'elle permettrait a priori de
faire plusieurs tours, avec ton code (me semble-t-il) la shape ne ferait
qu'un seul tour ! En conclusion, je comprends la notion d'increment par
rapport à 360 degrés mais pas la notion de multiple dont tu parles (j'ai
fait un test avec increment = 7 et ta macro s'arrête bien sur 0).

Cdlt

JP



"j-pascal" a écrit dans le message de news:

Re,

Evidemment cela fonctionne pour 1 seul tour ! J'imagine donc que si
les valeurs du compteur sont sous-dimensionnées, le WordArt se fige
(?) et si les valeurs sont trop importantes, elles ne sont pas prises
en considération (?)
Exact ?

JP

MichDenis wrote:
Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 500
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
'---------------- 'Ajouter-------------------
If ActiveSheet.Shapes("WordArt 3").Rotation = 0 Then
Exit For
End If
'--------------------------------------------
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub






"j-pascal" a écrit dans le message de news:
%
Bonjour,

Que faudrait-il ajouter à ce code pour que la rotation se termine
comme elle a commencé (rotation = 0) soit horizontale ?

Merci d'avance pour vos (éventuelles) réponses ;-)

JP

J'ai fait l'essai avec une image. Pb, quand je relance la macro,
l'image tourne bcp plus vite que la première fois ! Par ailleurs,
j'imagine que la vitesse de rotation dépend de "increment rotation"
mais peut-être aussi du CPU ??

Option Explicit

Sub RotationWordArt()

Dim compteur As Integer

With ActiveSheet
.Shapes("WordArt 3").Visible = True
.Shapes("WordArt 3").Rotation = 0

For compteur = 1 To 500
.Shapes("WordArt 3").IncrementRotation 1
DoEvents
Next compteur
.Shapes("WordArt 3").Visible = False
End With
End Sub