XL 2016 Compabilté code VBA 32bits et 64bits

bibbip35

XLDnaute Occasionnel
Bonjour à tous

Je viens de réaliser une application pour mon travail sous excel 2010 32bits
mais qui doit fonctionner également sur un poste excel 2016 64 bits

J'ai un problème avec le code ci-dessous qui ne fonctionne pas en 64bits

Public Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function GetWindowRect Lib "user32" _
(ByVal hwnd As Long, lpRect As RECT) As Long

Public Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Public Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, _
ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long

Est-ce que vous avez une idée du problème?

Merci par avance et bonne journée a tous

Bibbip
 

bibbip35

XLDnaute Occasionnel
Merci Grisan29

J'ai vu le lien et j'ai regardé mais ca ne fonctionne toujours pas
En faite , je ne sais pas comment remettre a jour mon code 32bits en 64bits

If VBA7 Then
Declare PtrSafe Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As LongLong
Declare PtrSafe Function GetWindowRect Lib "user32" _
(ByVal hwnd As LongLong, lpRect As RECT) As LongLong

Declare PtrSafe Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hwnd As LongLong, ByVal nIndex As LongLong) As LongLong

Declare PtrSafe Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hwnd As LongLong, ByVal nIndex As LongLong, _
ByVal dwNewLong As LongLong) As LongLong

Declare PtrSafe Function SetWindowPos Lib "user32" _
(ByVal hwnd As LongLong, ByVal hWndInsertAfter As LongLong, ByVal X As LongLong, _
ByVal Y As LongLong, ByVal cx As LongLong, ByVal cy As Long, _
ByVal wFlags As LongLong) As LongLong

Else
Public Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowRect Lib "user32" _
(ByVal hwnd As Long, lpRect As RECT) As Long

Public Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Public Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Public Declare Function SetWindowPos Lib "user32" _
(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, _
ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long
End If
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Et si vous joigniez votre classeur, que je voie s'il tourne chez moi ?
Notez que le mot clé PtrSafe ne gêne pas mais n'y est plus nécessaire, mais le type LongLong n'existe toujours pas.
C'est pourtant Excel 2016 et le CPU a une architecture à bus adresse de 64 bits.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Je viens de voir un truc auquel je n'avais pas fait attention dans votre poste #3
VBA7 est une constante de compilation conditionnelle.
Elle ne peut être utilisée que dans des directives de compilation conditionnelle.
Celles ci, qui ne constituent pas du code exécutable, doivent commencer par un # :
VB:
#If VBA7 Then
…
#Else
…
#End If
 

grisan29

XLDnaute Accro
bonsoir dranreb, bipbip35 et le forum
en fait bipbip n'a pas bien lu le lien que je lui ai mis car le grenier présentait bien des #
tu as eu raison de le relever

Code:
' --- DECLARATION API WINDOWS
#If VBA7 Then
  Private Declare PtrSafe Function ShellExecute _
    Lib "shell32.dll" _
    Alias "ShellExecuteA" ( _
      ByVal hwnd As LongPtr, ByVal lpOperation As String, _
      ByVal lpFile As String, ByVal lpParameters As String, _
      ByVal lpDirectory As String, ByVal nShowCmd As Long) _
    As LongPtr
#Else
  Private Declare Function ShellExecute _
    Lib "shell32.dll" _
    Alias "ShellExecuteA" ( _
      ByVal hwnd As Long, ByVal lpOperation As String, _
      ByVal lpFile As String, ByVal lpParameters As String, _
      ByVal lpDirectory As String, ByVal nShowCmd As Long) _
    As Long
#End If
 

Statistiques des forums

Discussions
312 755
Messages
2 091 723
Membres
105 058
dernier inscrit
axcelle