Module incompatible avec 64 bits

Bonjour

j'ai une application que j'ai pu avoir grâce à ce forum, avant je travaillait sur office 2007 et un pc 32 bits (windows xp). Mais une fois changé mon pc avec un autre 64 bits , windows 10 et office 2016, je reçois des messages d'erreurs surtout le module 2 :

  Option Explicit
    'Pour enlever la barre de titre du UF
    Public Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End Type

    Public Const GWL_STYLE = (-16)
    Public Const WS_CAPTION = &HC00000
    Public Const SWP_FRAMECHANGED = &H20

    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

    Sub OteTitleBarre(stCaption As String, pbVisible As Boolean)
    Dim vrWin As RECT
    Dim style As Long
    Dim lHwnd As Long
    '- Recherche du handle de la fenêtre par son Caption
       lHwnd = FindWindowA(vbNullString, stCaption)
        If lHwnd = 0 Then
            MsgBox "Handle de " & stCaption & " Introuvable", vbCritical
            Exit Sub
        End If
        GetWindowRect lHwnd, vrWin
        style = GetWindowLong(lHwnd, GWL_STYLE)
        If pbVisible Then
            SetWindowLong lHwnd, GWL_STYLE, style Or WS_CAPTION
        Else
            SetWindowLong lHwnd, GWL_STYLE, style And Not WS_CAPTION
        End If
        SetWindowPos lHwnd, 0, vrWin.Left, vrWin.Top, vrWin.Right - vrWin.Left, _
        vrWin.Bottom - vrWin.Top, SWP_FRAMECHANGED
    End Sub

Voulez-vous bien me dire ce qui me manque?

Bonjour,

D'abord, ce n'est pas le système 64 bits qui provoque ces problèmes, mais l'installation d'une version Excel 64 bits !

Alors, première chose, si tu n'as pas de raison solide pour une utilisation d'Excel 64 bits, je te conseille de réinstaller Office en version 32 bits. Cela fonctionnera sans difficulté !

Ensuite pour te documenter, tu ouvres l'aide VBA, tu tapes : ptrsafe, et tu te penches sur l'article : Vue d'ensemble Visual Basic pour applications 64 bits.

Tu auras l'ensemble des informations utiles.

Cordialement.

Bonjour,

Hum... Sous réserve n'ayant pas Excel 64, je ne peux pas tester :

Option Explicit
'Pour enlever la barre de titre du UF

Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Public Const GWL_STYLE = (-16)
Public Const WS_CAPTION = &HC00000
Public Const SWP_FRAMECHANGED = &H20

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

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

Public Declare PtrSafe Function GetWindowLongPtr Lib "user32" Alias _
"GetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr

Public Declare PtrSafe Function SetWindowLongPtr Lib "user32" Alias _
"SetWindowLongPtrA" (ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As LongPtr) As LongPtr

Public Declare PtrSafe Function SetWindowPos Lib "user32" _
(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

Sub OteTitleBarre(stCaption As String, pbVisible As Boolean)
Dim vrWin As RECT
Dim style As LongPtr
Dim lHwnd As LongPtr
'- Recherche du handle de la fenêtre par son Caption
lHwnd = FindWindowA(vbNullString, stCaption)
If lHwnd = 0 Then
MsgBox "Handle de " & stCaption & " Introuvable", vbCritical
Exit Sub
End If
GetWindowRect lHwnd, vrWin
style = GetWindowLongPtr(lHwnd, GWL_STYLE)
If pbVisible Then
SetWindowLongPtr lHwnd, GWL_STYLE, style Or WS_CAPTION
Else
SetWindowLongPtr lHwnd, GWL_STYLE, style And Not WS_CAPTION
End If
SetWindowPos lHwnd, 0, vrWin.Left, vrWin.Top, vrWin.Right - vrWin.Left, _
vrWin.Bottom - vrWin.Top, SWP_FRAMECHANGED
End Sub

A+

Merci à vous deux.

Galopin1

ton code me donne un message d'erreur "Erreur de compilation : instruction incorrecte à l'extérieur d'une procédure"

et ça coince après cette instruction :

Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Le passage par les boites de code du forum génère parfois chez moi des caractères parasites :

Supprimes toutes les lignes vides entre les différentes lignes de code. (et en particulier l'espèce de caractère invisible qui y est contenu)

Jusqu'à ce que tu n'aies plus d'erreur de compilation.

Si ça résiste la version Excel se lit comme sur l'image dans le menu Fichier > Aide : Confirmer que tu es bien en mode 64 SVP

verexc

Re

je te remercie pour ton passage, mais ça bug encore et cette fois avec l'instruction" Declare".

Moi je n'ai pas d'autres erreurs de compil que ces caractères invisibles...

Vérifier que tu n'a pas de référence déclarée manquante (VBA > Outils > Référence)

Fournir l'imprim écran de ta version Excel comme ci-dessus

et l'imprim Ecran du bug (code + message)

j'ai bien la version 64 bits.

capture

y a t-il un avantage de 64 sur 32 ou bien c'est jute l'architecture du système ?

Bah je ne suis pas suffisamment qualifié pour te dire...

Il se dit que au niveau utilisateur final c'est inutile. Sauf que certaines administrations commencent à s'équiper de la sorte donc si tu entends exporter ou importer des fichiers communs, il faudra coder en conséquence.

Il se dit également que certains contrôle par exemple ne seront jamais codés en mode 64...

Ça veut dire que dans ce cas il faudra un double codage pour les API (ça se fait très simplement : (un genre de Select case Config...)

Bon ton Imprim écran ne montre pas la plage sélectionnée au moment du Bug : Tu n'aurais pas encore un caractère invisible accolé à ton Declare... Si tu en as encore tu le sélectionnes et tu fais un remplacement "caractère invisible" remplacer par "espace" > Remplacer tout...

Tu n'as pas répondu non plus pour les Références...

Merci Galopin1

Je vais carrément supprimer ce module 2 pour ne pas sacrifier la totalité de l'application. je te remercie pour ton temps toi et Ferrand.


Juste pour te répondre concernant les références.

j'avais des réf manquantes mais je les ai installées comme mscomct.ocx et mscal.ocx ainsi que windate picker.

Oui surtout que pour inhiber la Croix de fermeture YA des moyens plus light !

Sortir une page d'API pour ça, moi j'appelle ça prendre un marteau-pilon pour écraser une mouche !

une bombe hydrogène pour tuer une moustique.

Bonjour,

tu ferais bien de tenir compte de la remarque de MFerrand.

On installe office 64 bits que si on est obligé, pas parce que le système est 64 bits.

Il y a bien d'autres incompatibilités qui te gêneront tôt ou tard.

j'avais des réf manquantes mais je les ai installées comme mscomct.ocx et mscal.ocx ainsi que windate picker.

Ca par exemple.

Tu peux installer toutes les dll 32 bits manquantes, elles ne fonctionneront jamais sur la version 64 bits. Il suffit de les décocher et de supprimer toute utilisation (ça en fait des contrôles qui risquent de te manquer )

eric

eriic

Merci de ta contribution. à vrai dire, je vais installer la version 32 pour ne pas me casser la tête par la suite.

Rechercher des sujets similaires à "module incompatible bits"