Rotation d'une forme ou d'un groupe de forme sur excel 2010 via VBA

Y compris Power BI, Power Query et toute autre question en lien avec Excel
L
L_Watt
Nouveau venu
Nouveau venu
Messages : 1
Inscrit le : 28 août 2018
Version d'Excel : 2010 et 2016

Message par L_Watt » 28 août 2018, 14:30

Bonjour à tous,

Je souhaiterais pour les besoins de ma licence, faire tourner une forme via VBA, c'est chose faite cependant je ne parviens pas à faire tourner la forme dans le sens souhaité

J'ai copié ce programme (trouvé sur un site) :

Sub Rotation()
Dim i%

With ActiveSheet.Shapes("Groupe 4")
For i = 360 To 0 Step -10
Application.Wait Time:=Now() + 0.000001
.Rotation = i
'Top = i + 50
'.Left = i + 50
Next
End With
End Sub

Je m'explique : si la forme serait dans un plan à 3 axes (X Y et Z) elle tournerait donc sur l'axe Y

Or je souhaiterais qu'elle tourne sur l'axe Z

Avez vous une solution ? Merci de votre aide

Je précise que je suis sur Excel 2010.
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 3'310
Appréciations reçues : 210
Inscrit le : 26 janvier 2011
Version d'Excel : 2007

Message par Theze » 28 août 2018, 17:31

Bonjour,

Ici j'utilise "GetTickCount" pour avoir un pivotement plus rapide que OnTime. Pose un rectangle sur ta feuille nommé "Rectangle 1" et testes les deux Sub, une fait pivoter sur l'axe et l'autre sur le bord. Si tu as des connaissances en trigonométrie, adapte les valeurs si tu veux autre chose :
Declare Function GetTickCount Lib "Kernel32" () As Long

Sub Minuterie(Milliseconde As Long)

    Dim Arret As Long

    Arret = GetTickCount() + Milliseconde
    Do While GetTickCount() < Arret: DoEvents: Loop

End Sub

Sub PivotBord()

    Dim S As Shape
    Dim Marge_Gauche As Single
    Dim Marge_Haut As Single
    Dim Y_S As Single
    Dim X_S As Single
    Dim Angle As Single
    Dim I As Integer
    
    Set S = ActiveSheet.Shapes("Rectangle 1")
    
    Marge_Haut = 100
    Marge_Gauche = 100
    
    For I = 1 To 360

        Angle = Application.Radians(I + 90)
            
        X_S = Marge_Gauche - Marge_Gauche / 2 + Marge_Gauche
        Y_S = Marge_Haut - Marge_Haut / 2 + Marge_Haut
        
        With S
            
            .Left = X_S + (Marge_Haut / 2 - 1) * Cos(-Angle)
            .Top = Y_S + (Marge_Haut / 2 - 1) * Sin(Angle)
            .Rotation = I
            
        End With
        
        'temporisation
        Minuterie 50

    Next I
    
    
End Sub

Sub PivotAxe()

    Dim S As Shape
    Dim I As Integer

    Set S = ActiveSheet.Shapes("Rectangle 1")

    For I = 1 To 360

        S.Rotation = I

        'temporisation
        Minuterie 50

    Next I

End Sub
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message