[PPT 2010/2013] Rotation 3D progressive d'un objet
Bonjour,
Je débute en VBA sous powerpoint et j'aimerais faire pivoter un objet 3D (disons "objet1") sur son axe. Mon but serait que ce mouvement, amorcé par un bouton, soit progressif. Je partais sur cette idée :
Private Sub CommandButton1_Click()
Set myDocument = ActivePresentation.Slides(1)
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -5
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -5
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -10
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -15
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -20
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -15
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -10
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -5
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -5
End Sub
Mon objet pivote donc de 90° au total vers l'arrière lorsque je clique sur mon bouton, mais évidemment avec un tel code, la modification a lieu d'un seul coup et non progressivement comme je le voudrais (d'abord 5°, puis 5 de plus, puis encore 10 de plus...).
Comment, donc, "saccader" le déroulement de ce code pour qu'on voie véritablement mon objet pivoter progressivement ?
Sachant que j'ai déjà essayé la fonction "sleep" via un code de ce type :
Private Declare Sub Sleep Lib "kernel32.dll" ( _
ByVal dwMilliseconds As Long)
Private Sub CommandButton1_Click()
Set myDocument = ActivePresentation.Slides(1)
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -5
Sleep 100
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -5
Sleep 100
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -10
Sleep 100
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -15
Sleep 100
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -20
Sleep 100
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -15
Sleep 100
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -10
Sleep 100
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -5
Sleep 100
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -5
End Sub
...Mais cela n'applique un délai qu'au début de la réalisation du code, pas entre chaque ligne. J'imagine donc que "Sleep" ne peut s'appliquer qu'à une macro entière avant sa réalisation et ne sert pas à "sectionner" son déroulement.
Autre souci : "Sleep" gèle powerpoint entièrement pendant la durée demandée dans le code (c'est son principe j'en ai conscience) ; or, j'aurai des animations ("classiques", hors VBA) qui tourneront en même temps et ne devant pas être elle-mêmes,gelées, ceci dans un souci d'esthétique.
Auriez-vous une solution ?
Merci d'avance !
Bonsoir
Je n'y connais rien en VBA sous powerpoint, mais je ferais une boucle
Private Sub CommandButton1_Click()
Dim I As Integer, Depart As Double
Set myDocument = ActivePresentation.Slides(1)
For I = 1 To 90
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -1
' 1 petite tempo
Depart = Timer
Do While Timer - Depart < 0.1
DoEvents
Loop
Next I
End Sub
Pour la tempo bien sur je n'en suis pas sur (mais c'est valable pour le VBA Excel)
Bonsoir et merci pour ta réponse !
Eh bien écoute ne sois pas si sévère avec toi même : c'est un bon début : l'objet pivote effectivement de 90° comme je le voulais. Simplement, j'ai du mal à obtenir quelque chose de fluide. J'ai tenté de changer la valeur x de "Timer - Depart < x" mais ça reste saccadé.
...Bon oui, c'est vrai, j'ai bien parlé de mouvement saccadé dans ma question à la base, mais c'était pour l'exemple en rapport avec la macro que je proposais.
Je crains cependant que ce soit une histoire de puissance/ressources de l'ordi... non ?
Bonjour
Pour avoir un peu plus de "fluidité"
Diminues l'incrémentation tout en ajustant la valeur max de la boucle pour avoir 90
Diminue la tempo
Private Sub CommandButton1_Click()
Dim I As Integer, Depart As Double
Set myDocument = ActivePresentation.Slides(1)
For I = 1 To 180
myDocument.Shapes("objet 1").ThreeD.IncrementRotationY -0.5
' 1 petite tempo
Depart = Timer
Do While Timer - Depart < 0.02
DoEvents
Loop
Next I
End Sub
Malheureusement rien n'y fait. Powerpoint a du mal à gérer ce mouvement.
J'ai peur de ne pas trouver la fluidité nécessaire à ce que je veux réaliser, ça demande sans doute trop de ressources. Merci tout de même pour ton aide !
Et si toutefois quelqu'un a une autre idée...