VBA faire pivoter un objet (MAJ du code vers 64 bits)

Bonjour,

Je me suis arrêté sur ce sujet : https://forum.excel-pratique.com/viewtopic.php?f=2&t=15887 car je cherchais un moyen de faire pivoter un objet.

Je souhaite utiliser le code proposé dans le sujet, à savoir :

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

Je rencontre toutefois un problème "erreur de compilation", on m'indique que le contenu doit être mise à jour pour pouvoir être utilisé sur les systèmes 64 bits.

On m'indique qu'il faut ajouter l'attribut PtrSafe après avoir mis à jour les instructions Declare.

Pourriez-vous m'aider à résoudre cette difficulté ?

Bien cordialement,

Baptiste

Bonjour,

Remplacez donc la déclaration :

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

par :

Option Explicit

'https://www.jkp-ads.com/articles/apideclarations.asp
#If VBA7 Then
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
    Public Declare Sub Sleep Lib "kernel32" Alias "sleep" (ByVal dwMilliseconds As Long)
#End If

A lire, le lien mis en commentaire : https://www.jkp-ads.com/articles/apideclarations.asp

Bonjour Franck,

Merci de ton aide !

Il me reste un petit soucis lors de l'exécution du code : j'ai une erreur de compilation qui m'indique :

Des constantes, chaînes de longues fixe, tableaux, types définis par l'utilisateur et instructions Declare ne sont pas autorisés comme membre Public de modules d'objet.

Pour info j'ai mis ton code tout du module de ma feuil1 :

Option Explicit 'https://www.jkp-ads.com/articles/apideclarations.asp
#If VBA7 Then
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
    Public Declare Sub Sleep Lib "kernel32" Alias "sleep" (ByVal dwMilliseconds As Long)
#End If

Puis tout en bas le code qui permet de pivoter mon image :

Sub DelayTest()
Dim i As Integer
    With ActiveSheet.Shapes("Image 4")
        For i = 0 To 360 Step 2
            Sleep 0.2 'Délai en millisecondes
            .Rotation = i
            DoEvents
        Next
    End With
End Sub

Baptiste,

Ton code est donc mis dans un module objet (Module de classe, de feuille, d'UserForm).

Remplace alors les termes "Public" par "Private".

Option Explicit 'https://www.jkp-ads.com/articles/apideclarations.asp
#If VBA7 Then
    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
    Private Declare Sub Sleep Lib "kernel32" Alias "sleep" (ByVal dwMilliseconds As Long)
#End If

Bonjour Franck, merci beaucoup !

Tout fonctionne.

Bonnes fêtes de fin d'année,

Bapt"

Rechercher des sujets similaires à "vba pivoter objet maj code bits"