Erreur de compilation : code contenu

Bonjour à tous,

je viens de reprendre un fichier VBA suite au départ d'une collègue. ( je suis totalement néophyte) . j'ai plusieurs messages d'erreur. Le premier en Pop up :

image

Puis :

Private Declare Function FindWindowA& Lib "user32" (ByVal lpClassName$, ByVal lpWindowName$)
Private Declare Function EnableWindow& Lib "user32" (ByVal hwnd&, ByVal bEnable&)
Private Declare Function GetWindowLongA& Lib "user32" (ByVal hwnd&, ByVal nIndex&)
Private Declare Function SetWindowLongA& Lib "user32" (ByVal hwnd&, ByVal nIndex&, ByVal dwNewLong&)

Je vous remercie par avance pour votre aide.

Bonjour et bienvenue,
Pour MS Office 64-bit, modifer comme ci-dessous :

Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Declare PtrSafe Function EnableWindow Lib "user32" _
        (ByVal hwnd As LongPtr, ByVal fEnable As Long) As Long
Declare PtrSafe Function GetWindowLongPtr Lib "user32" Alias "GetWindowLongA" _
        (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
Declare PtrSafe Function SetWindowLongPtr Lib "user32" Alias "SetWindowLongA" _
        (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr

Cdlt.

Bonsoir,

si l'erreur apparaît entre "collègues" alors les différents postes ne sont pas équivalent au niveau des versions d'Excel... Il faut en plus de ce que préconise Jean-Eric mettre en place un "if" afin d'envoyer VBA sur la bonne série de déclaration comme cela l'application sera compatible avec tous les postes.

#If VBA7 Then
Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Declare PtrSafe Function EnableWindow Lib "user32" _
        (ByVal hwnd As LongPtr, ByVal fEnable As Long) As Long
Declare PtrSafe Function GetWindowLongPtr Lib "user32" Alias "GetWindowLongA" _
        (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
Declare PtrSafe Function SetWindowLongPtr Lib "user32" Alias "SetWindowLongA" _
        (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
#Else
Private Declare Function FindWindowA& Lib "user32" (ByVal lpClassName$, ByVal lpWindowName$)
Private Declare Function EnableWindow& Lib "user32" (ByVal hwnd&, ByVal bEnable&)
Private Declare Function GetWindowLongA& Lib "user32" (ByVal hwnd&, ByVal nIndex&)
Private Declare Function SetWindowLongA& Lib "user32" (ByVal hwnd&, ByVal nIndex&, ByVal dwNewLong&)
#End if

Ai-je faux Jean-Eric ?

@ bientôt

LouReeD

Bonjour,
@LouReed,

Pour résumer (information Microsoft) :

#If VBA7 Then
    'Le code exécute VBA7 (2010 ou version ultérieure).
    #If Win64 Then
        'Le code s’exécute dans la version 64 bits de Microsoft Office.
    #Else
        'Le code s’exécute dans la version 32 bits de Microsoft Office.
    #End If
#Else
    'Le code exécute VBA6 (2007 ou version antérieure).
#End If

Une alternative :

#If VBA7 And Win64 Then
    'Excel 2010 et versions ultérieures
#Else
    'Excel 2007 et versions antérieures
#End If

Et pour rappel :
Office 2007 en 32 bits uniquement.
Installation par défaut en 32 bits pour Office 2010, 2013 et 2016.
A partit d'Office 2019 (et les versions ultérieures), l'installation par défaut est en 64 bits.

Jean-Paul à mis en ligne, il y a peu un fichier texte qui traduit les déclarations 32 bits en 64 bits.

17win32api-ptrsafe.zip (141.05 Ko)

Bon weekend.
Cdlt.

Bonsoir,

ne faut-il pas mettre un "OR" ici ?

Une alternative :

#If VBA7 And Win64 Then
    <i>'Excel 2010 et versions ultérieures</i>
#Else
    <i>'Excel 2007 et versions antérieures</i>
#End If

Car si VBA7 avec Win32...

ceci dit cela fait "longtemps" que j'essaie de penser à mettre ce type de test sur mes applications... mais il doit en rester quelques une qui ne l'ont pas... je les corrige au moment des remontées de problème.

@ bientôt

LouReeD

Bonjour,

Merci beaucoup pour vos solutions. J'ai utilisé :

#If VBA7 Then
'Le code exécute VBA7 (2010 ou version ultérieure).
#If Win64 Then
'Le code s’exécute dans la version 64 bits de Microsoft Office.
#Else
'Le code s’exécute dans la version 32 bits de Microsoft Office.
#End If
#Else
'Le code exécute VBA6 (2007 ou version antérieure).
#End If

Ce qui fonctionne parfaitement. Merci Encore !

Bonjour,
Merci de retour.
Cdlt.

Rechercher des sujets similaires à "erreur compilation code contenu"