[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. Et compte tenu que ton code tient la route, j'aimerais maintenant avoir un mouvement tout à fait fluide.

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...

Rechercher des sujets similaires à "ppt 2010 2013 rotation progressive objet"