XL 2019 compatibilité système 64 bit

terrier

XLDnaute Junior
Bonjour tout le monde,
J'ai un bout de code qui sert à masquer le bouton fermer, que j'ai trouver dans le forum et j'ai voulu l'exécuter sur mon pc et ça ne marche malheureusement pas, il m'affiche cette erreur:
"Le code contenu dans ce projet doit être mis à jour pour pouvoir être utilisé sur les systèmes 64 bits. Vérifier et mettez à jour les instructions Declare, puis masquez les avec l'attribut PlrSafe."



VB:
Option Private Module
Declare Function GetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'procedure suppression de croix de fermeture windows
Sub Pasdecroix(USF As UserForm)
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
"X", "D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub


Comme je suis débutant, je ne comprend pas grande chose, j'espère bien que quelqu'un sauras adapter ce bout de code.
Merci d'avance.
Terrier.
 
Solution
Bonsoir.
Déjà insérez le mot 'PtrSafe' entre 'Declare' et 'Function' pour enlever cet avertissement.
Parfois certains 'Long' doivent aussi être remplacés par 'LongPtr'.
Ça ne me semble pas être le cas ici, c'est surtout valable pour les variable destinées à recevoir des adresses. Mais aussi certains type de Handle, mais pas tous à ma connaissance, seulement ceux issus d'allocations dynamiques de mémoire, pas les HWnd.

Dranreb

XLDnaute Barbatruc
Bonsoir.
Déjà insérez le mot 'PtrSafe' entre 'Declare' et 'Function' pour enlever cet avertissement.
Parfois certains 'Long' doivent aussi être remplacés par 'LongPtr'.
Ça ne me semble pas être le cas ici, c'est surtout valable pour les variable destinées à recevoir des adresses. Mais aussi certains type de Handle, mais pas tous à ma connaissance, seulement ceux issus d'allocations dynamiques de mémoire, pas les HWnd.
 

terrier

XLDnaute Junior
Bonsoir.
Déjà insérez le mot 'PtrSafe' entre 'Declare' et 'Function' pour enlever cet avertissement.
Parfois certains 'Long' doivent aussi être remplacés par 'LongPtr'.
Ça ne me semble pas être le cas ici, c'est surtout valable pour les variable destinées à recevoir des adresses. Mais aussi certains type de Handle, mais pas tous à ma connaissance, seulement ceux issus d'allocations dynamiques de mémoire, pas les HWnd.
Bonsoir.
Merci infiniment Darneb, ça marche comme sur des roulettes.
 

patricktoulon

XLDnaute Barbatruc
bonsoir
dans celle ci je simplifie les choses et je l'adapte a toute version d'excel 32/64 bits
VB:
'&H94C00080' pas de bouton
'&H94C80080'' juste le bouton fermer
'&H94C90080' bouton fermer et agrandir
'&H94CF0080' bouton reduire ,bouton agrandir, bouton fermer
#If VBA7 Then
    #If Win64 Then
        Declare PtrSafe Function SetWindowLongA Lib "User32" (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As Long
        Declare PtrSafe Function FindWindowA Lib "User32" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    #Else
        Declare PtrSafe Function SetWindowLongA Lib "User32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
        Declare PtrSafe Function FindWindowA Lib "User32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    #End If
#Else
    Declare Function SetWindowLongA Lib "User32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Declare Function FindWindowA Lib "User32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If
'procedure suppression de croix de fermeture windows
Sub Pasdecroix(USF)
    Dim hWnd As Long
    hWnd = FindWindowA(vbNullString, USF.Caption)
    SetWindowLongA hWnd, -16, &H94F80080
End Sub
;)
 

terrier

XLDnaute Junior
bonsoir
dans celle ci je simplifie les choses et je l'adapte a toute version d'excel 32/64 bits
VB:
'&H94C00080' pas de bouton
'&H94C80080'' juste le bouton fermer
'&H94C90080' bouton fermer et agrandir
'&H94CF0080' bouton reduire ,bouton agrandir, bouton fermer
#If VBA7 Then
    #If Win64 Then
        Declare PtrSafe Function SetWindowLongA Lib "User32" (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As Long
        Declare PtrSafe Function FindWindowA Lib "User32" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
    #Else
        Declare PtrSafe Function SetWindowLongA Lib "User32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
        Declare PtrSafe Function FindWindowA Lib "User32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    #End If
#Else
    Declare Function SetWindowLongA Lib "User32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Declare Function FindWindowA Lib "User32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If
'procedure suppression de croix de fermeture windows
Sub Pasdecroix(USF)
    Dim hWnd As Long
    hWnd = FindWindowA(vbNullString, USF.Caption)
    SetWindowLongA hWnd, -16, &H94F80080
End Sub
;)
Bonsoir Patricktoulon
j'ai pas essayé sur mes deux pc 32 et 64 franchement :)
par contre la solution de Darneb ça passe dans les deux cas je résume:

VB:
Option Private Module
Declare PtrSafe Function GetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare PtrSafe Function SetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare PtrSafe Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'procedure suppression de croix de fermeture windows
Sub Pasdecroix(USF As UserForm)
Dim hWnd As Long
hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
"X", "D") & "Frame", USF.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 948
Membres
101 850
dernier inscrit
Danigra