Problème de compilation 32-64 bits

la lozere

XLDnaute Occasionnel
Salut,
J'ai fait un fichier avec macro qui marche super bien en 32 bits, mais apparemment il ne fonctionne pas bien en 64.
Je vous joint une image montrant le problème:

http://images.imagehotel.net/?kw358jwfjj.jpg

Avez-vous une idée pour que du coup cela marche pour les deux systèmes?

Merci.

PS: En fait, c'est un peu la suite de ce topic: ICI
 
Dernière édition:

PMO2

XLDnaute Accro
Re : Problème de compilation 32-64 bits

Bonjour,

Peut être une piste en utilisant une compilation conditionnelle comme dans le code suivant

Code:
#If VBA7 Then
  Private Declare PtrSafe 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 LongPtr
  
  Private Declare PtrSafe Function FindWindowA Lib "User32" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
#Else
  Private 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
  
  Private Declare Function FindWindowA Lib "User32" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If

Merci de me dire si cela fonctionne en 32 bits comme en 64 bits.
 

la lozere

XLDnaute Occasionnel
Re : Problème de compilation 32-64 bits

Je te remercie, je n'ai plus l'erreur, mais quand, la macro se lance, sa ne marche pas avec la suite de la macro (texte en jaune).
Pour rappel, cette macro à pour but d'afficher un USERFORM après x minute.

Code:
#If VBA7 Then
  Private Declare PtrSafe 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 LongPtr
 
  Private Declare PtrSafe Function FindWindowA Lib "User32" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
#Else
  Private 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
 
  Private Declare Function FindWindowA Lib "User32" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If

Private Sub UserForm_Initialize()
SetWindowPos FindWindowA("ThunderDFrame", Me.Caption), _
    -1, 0, 0, 0, 0, 3
End Sub

http://images.imagehotel.net/?cqcvho600i.jpg

Merci d'avance
 

PMO2

XLDnaute Accro
Re : Problème de compilation 32-64 bits

Je suis sous 32 bits et ne peux, par conséquent, faire aucun test probant sur 64 bits.

Essayez de remplacer le code précédent par
Code:
#If VBA7 Then
  Declare PtrSafe Function SetWindowPos Lib "user32" Alias "SetWindowPos" _
  (ByVal hwnd As LongPtr, ByVal hWndInsertAfter As LongPtr, _
  ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
  ByVal cy As Long, ByVal wFlags As Long) As Long

  Declare PtrSafe Function FindWindowA Lib "user32" Alias "FindWindowA" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
#Else
  Private 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
  
  Private Declare Function FindWindowA Lib "User32" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If
 

Discussions similaires

Statistiques des forums

Discussions
312 071
Messages
2 085 051
Membres
102 767
dernier inscrit
jmkp