EXCEL - VBA - Temporisation de la macro le temps de l'extraction SQL

airsage

XLDnaute Junior
Bonjour à tous,

Voici le code que j'utilisais et qui fonctionnait sur les postes en Windows 32 Bits (code que je n'ai pas créé, mais trouvé sur internet :p). Ce code a pour but de stopper momentanément ma macro le temps de traiter mon batch SQL.

Ma macro a été déplacée par sur un serveur 64 Bits et j'ai ce message d'erreur :
Microsoft Visual Basic for Applications : Compile error in hidden Module. This error commonly occurs when code is incompatible with the version, platform, or architecture of this application.

J'ai cherché sur internet pour contourner ce problème mais rien de concluant pour le moment.

Macro fonctionnant sur un poste en Windows 32 Bits :
Declare Function WaitForSingleObject Lib "kernel32" _
(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long

Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long

Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long


Const INFINITE = -1&
Const SYNCHRONIZE = &H100000

Sub Lancement_Batch()
Dim iTask As Long, ret As Long, pHandle As Long
iTask = Shell(Chemin_Script_DPI, vbNormalFocus)
pHandle = OpenProcess(SYNCHRONIZE, False, iTask)
ret = WaitForSingleObject(pHandle, INFINITE)
ret = CloseHandle(pHandle)
End Sub


Est ce que quelqu'un peut m'aider a faire fonctionner la temporisation sur un Windows 7 en 64 bits ?
 

Dranreb

XLDnaute Barbatruc
Re : EXCEL - VBA - Temporisation de la macro le temps de l'extraction SQL

Bonjour.
Le mot clé PtrSafe inséré juste derrière le mot Declare peut régler le problème.
Remarque : Peut être soumis à un test de la constante de compilation conditionnelle VBA7. Exemple :
VB:
  #If VBA7 Then ' Si votre ordinateur a une architecture à 64 bits :
Private Declare PtrSafe Sub MoveMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
   (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
   #Else ' Dans le cas contraire, l'instruction qui précède est quand même signalée en erreur car le mot clé PtrSafe donnerait lieu
         ' à "Erreur de compilation :  Attendu : Sub ou Fonction". Mais çe n'est pas gênant, car lors de la compilation effective,
         ' c'est l'instruction ci dessous qui est appliquée et non celle en erreur :
Private Declare Sub MoveMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
   (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
      #End If
 
Dernière édition:

airsage

XLDnaute Junior
[ RESOLU ] : EXCEL - VBA - Temporisation de la macro le temps de l'extraction SQL

bonjour Dranreb,

Merci pour cette réponse rapide et qui fonctionne. effectivement en ajoutant l'élément "PtrSafe" après chaque "Declare" me permet de faire tourner ma macro avec une temporisation lors de mon extraction SQL.

ça fonctionne même en WIN32.

Je te remercie encore.

Cordialement
 

Statistiques des forums

Discussions
314 626
Messages
2 111 297
Membres
111 093
dernier inscrit
Yvounet