VBA faire pivoter un objet (animation)

Bonjour à tous,

Je cherche à faire une petite animation,

en faisant pivoter un objet (type rectangle) sur lui-même de 360°suivant un tempo.

Un peu sur le principe suivant qui lui déplace l'objet suivant .Top et .Left

Sub Papillon()
Dim i%
    'le papillon se déplace
    With ActiveSheet.DrawingObjects("Rectangle 3")
        .Visible = True
        For i = 50 To 400 Step 5
        Application.Wait Time:=Now() + 0.000001
            .Top = i
            .Left = i
        Next
    End With
End Sub

Quel serait le bon code ?

Je suis preneur d'autres idées

Amicalement

Claude

Salut le forum

As-tu essayé la proprieté rotation de l'objet...

ActiveSheet.Shapes("MaForme").Rotation = 112

Mytå

Bonjour Mytå,

Super !

On peut même juguler avec le Top, ce qui donne un effet pas mal du tout.

Sub essai()
Dim i%
    'l'objet pivote
    With ActiveSheet.Shapes("Rectangle 2")
        For i = 360 To 0 Step -3
            Application.Wait Time:=Now() + 0.000001
            .Rotation = i
            'Top = i + 50
            '.Left = i + 50
        Next
    End With
End Sub

reste à savoir si tu as une combine ou une règle pour régler la vitesse d'exécution ?

par tâtonnement, je vois que l'on peut jouer sur le Step,

mais le "Application.Wait Time:=Now() + 0.000001" est exprimé en quoi ? et est-ce la bonne méthode ?

C'est un bout de code que j'avais pompé sur une revue.

Suivant les PC, il y a du réglage à faire pour la vitesse,je crois.

En tout cas, merci beaucoup

Amicalement

Claude

Re le forum

Claude un délai programmable en millisecondes

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub DelayTest()
Dim i As Integer

For i = 1 To 5
    Sleep 500 'Délai en millisecondes
    MsgBox "Délai boucle " & i
Next

End Sub

Mytå

45copie-de-2.xlsm (27.54 Ko)
50copie-de-3.xlsm (23.05 Ko)

Bonjour à tous,

Myta, je n'arrive pas à faire fonctionner ton code correctement,

Option Explicit
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub DelayTest()
Dim i As Integer
    With ActiveSheet.Shapes("Rectangle 1")
        For i = 1 To 180
            Sleep 500 'Délai en millisecondes
            .Rotation = i
        Next
    End With
End Sub

Je n'obtiens pas d'animation, qu'est-ce que ce "kernel32" ?

j'ai mis ici For i = 1 To 180, mais je voudrais pivoter de 360°

Pourrais-tu m'écrire le code complet

Merci Mytå

Claude

Bonjour Claude et Myta,

désolé de m'immiscer dans ce post. Ajoute DoEvent après la rotation:

Option Explicit
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub DelayTest()
Dim i As Integer
    With ActiveSheet.Shapes("Rectangle 1")
        For i = 1 To 360
            Sleep 10 'Délai en millisecondes
            .Rotation = i
            DoEvents
        Next
    End With
End Sub

re forum, bonsoir Math,

Merci pour ton intervention, j'arrive à peu près au résultat souhaité en mettant: Sleep 0.2 au lieu de 10

Je me retrouve maintenant avec l'embarras du choix entre ces 2 codes (même résultat)

ce qui me gène dans le 1er, c'est que je ne comprends pas la ligne

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub DelayTest()
Dim i As Integer
    With ActiveSheet.Shapes("Rectangle 1")
        For i = 0 To 360 Step 2
            Sleep 0.2 'Délai en millisecondes
            .Rotation = i
            DoEvents
        Next
    End With
End Sub

et l'autre méthode

Sub essai()
Dim i As Integer
    With ActiveSheet.Shapes("Rectangle 3")
        For i = 0 To 360 Step 10
            Application.Wait Time:=Now() + 0.000001
            .Rotation = i
        Next
    End With
End Sub

Dans les 2 cas, le Step joue pour beaucoup

Votre avis sur la méthode la + fiable ?

sachant que je ne fais pas d'action en arrière plan

Amicalement

Claude

ce qui me gène dans le 1er, c'est que je ne comprends pas la ligne

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

c'est un appel a une API de Windows. Je ne peux pas vraiment t'expliquer en détail, c'est le genre de ligne que tu apprend par coeur parce que c'est un peu plus complexe et que tu n'as pas le temps , mais pour plus de détail: http://jacxl.free.fr/cours_xl/cours_xl_jac.html#api_s

pour ce qui est des deux codes, j'aurais tendance à penser que le premier qui utilise les API est plus stable car c'est windows qui gère la pause et non Excel, mais bon, je crois que dans ton cas précis les deux se valent.

Bonjour à tous,

Merci du tuyau, je viens d'opter provisoirement pour la 2ème méthode,

il s'agit de ce lien, si çà intéresse: (bouton "Continuer")

https://forum.excel-pratique.com/excel/integrer-un-tri-et-un-controle-de-saisie-dans-un-tableau-t15493.html

encore merci Math et Mytå

Amicalement

Claude

Re le forum

Pour une liste complète (Version Anglaise) `: http://allapi.mentalis.org/

Mytå

Bonsoir Mytå,

je note le lien en attendant que je retrouve l'icône de traduction page

merci

Claude

Re le forum

Claude un petit coup de magie

La traduction en simultanée

Mytå

re,

là, je vais pouvoir potasser !

à 1ère vue, je ne retrouve pas l'API qui nous intéresse pour mon cas,

mais je vais surement trouver.

encore merci, je vais dodo

Claude

bonjour,

oops réedité

bon dimanche

Rechercher des sujets similaires à "vba pivoter objet animation"