Code VBA

Bonjour,

Je commence à utiliser Excel 2016 alors que je travaillais avec 2007. J'ai un message d'erreur qui me demande la mise à jour du code pour une utilisation en 64 bits....et je ne sais quoi faire car je ne sais pas utiliser VBA

Je vous remercie de m'indiquer ce qu'il y a lieu de faire..

vous trouverez ci joint un fichier

cordialement

mibri

message erreur vb

Bonjour,

 #if Win64 Then 
Declare PtrSafe Sub Sleep Lib "Kernel32" (Byval dwMilliseconds As LongPtr)
 #Else 
Declare  Sub Sleep Lib "Kernel32" (Byval dwMilliseconds As Long)
 #EndIf

Merci pour ta réponse rapide , comme je l'ai dit je ne connais rien en VBA. Veux tu me dire ce qu'il faut que je fasse avec tes indications

merci

Bonsoir mibri, Xmenpl,

tu as juste à copier / coller le code VBA de Xmenpl au début de Module1 :

Option Explicit

#If Win64 Then 
  Declare PtrSafe Sub Sleep Lib "Kernel32" (Byval dwMilliseconds As LongPtr)
#Else 
  Declare Sub Sleep Lib "Kernel32" (Byval dwMilliseconds As Long)
#EndIf

'mets ici la suite de ton code VBA

même si la ligne avec PtrSafe reste en rouge, ne t'en préoccupe pas : c'est normal ; ça compile quand même sans bloquer sur une erreur de compilation, et ça marchera en 64 bits et en 32 bits ; perso, je préfère utiliser :

Option Explicit

#If VBA7 Then 
  Declare PtrSafe Sub Sleep Lib "Kernel32" (Byval dwMilliseconds As LongPtr)
#Else 
  Declare Sub Sleep Lib "Kernel32" (Byval dwMilliseconds As Long)
#EndIf

'mets ici la suite de ton code VBA

VBA7 pour Office 2010 (ou version supérieure) ; et ça marche pour Windows 7 (ou ultérieur).


pour info, une ligne de code VBA qui commence par le caractère # est une directive de compilation : ça précise au compilaleur VBA comment il doit réagir ; cette directive de compilation peut être conditionnelle ou non.

dans le 2ème exemple, si la version de VBA utilisée est la 7 (cas des applications Office 64 bits, 2010 et ultérieur) alors le compilateur exécutera la 1ère ligne Declare (avec PtrSafe) ; sinon, il exécutera la 2ème ligne Declare (sans PtrSafe), pour VBA de version < 7 (cas des applications Office 32 bits, 2007 et antérieur).

dhany

merci pour ta réponse dhany, j'ai toujours le message d'erreur, voir fichier

cordialement

capture2

oh, là ! il fallait comprendre : la suite de ton code VBA classique !

toutes les lignes avec Declare doivent être groupées les unes sous les autres, celles avec SafePtr avant #Else ; les autres après, entre #Else et #EndIf.

exemple pour 2 lignes de part et d'autre, avec Sleep et keybd_event :

Option Explicit

#If VBA7 Then 
  Declare PtrSafe Sub Sleep Lib "Kernel32" (Byval dwMilliseconds As LongPtr)
  Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As LongLong, ByVal dwExtraInfo As LongPtr)
#Else 
  Declare Sub Sleep Lib "Kernel32" (Byval dwMilliseconds As Long)
  Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
#EndIf

'mets ici la suite de ton code VBA

Sub Essai()
  'instructions de la sub Essai(), dont les instructions qui appellent Sleep et keybd_event ; exemple
  Sleep 500 'fait une pause de 500 millisecondes
End Sub

et surtout, pas de double déclaration comme tu essayes de le faire en mettant une autre ligne Declare pour Sleep : c'est déjà déclaré au-dessus !

dhany

bonsoir Dhanny,

Je te remercie pour ton aide, je crois que j'ai compris l'essentiel de tes explications car mon fichier ne me déclare plus d'erreur......

merci encore

cordialement

mibri

Bonsoir mibri,

merci pour ton retour, et pour avoir passé le sujet en résolu !

bonne continuation !

dhany

Rechercher des sujets similaires à "code vba"