Conversion application 32 bits vers système 64 bits

Bonjour,

j'ai une application excel vba avec userfom, qui fonctionne sur le système 32 bits quand je l'installe sur mon nouvel ordi, j'ai le message suivant :

Le code contenu dans ce projet doit être mis à jour pour pourvoir être utilisé sur les systèmes 64 bits. Vérifiez et mettez à jour les instructions 'Declare puis marquez les avec l'attribut PtrSafe'.

Merci d'avance pour la solution à ce problème

cdlt

Désolé je suis nouveau et ne maîtrise pas encore l'appli. Je vous mets les deux parties qui posent problèmes :

' ***********************************************

'Dans la partie Déclaration de la Form :

Private Const SC_CLOSE = &HF060&

'

Private Const MF_BYCOMMAND = &H0&

Private Declare Function GetSystemMenu Lib "User32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long

Private Declare Function RemoveMenu Lib "User32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long

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&)

Dim change_nom_prenom(1) As String

'********************************************************

'Written: February 14, 2011

'Author: Leith Ross

'

'NOTE: This code should be executed within the UserForm_Activate() event.

Private Declare Function GetForegroundWindow Lib "User32.dll" () As Long

Private Declare Function GetWindowLong _

Lib "User32.dll" Alias "GetWindowLongA" _

(ByVal hWnd As Long, _

ByVal nIndex As Long) _

As Long

Private Declare Function SetWindowLong _

Lib "User32.dll" Alias "SetWindowLongA" _

(ByVal hWnd As Long, _

ByVal nIndex As Long, _

ByVal dwNewLong As Long) _

As Long

Private Const WS_THICKFRAME As Long = &H40000

Private Const GWL_STYLE As Long = -16

Merci pour les solutions que vous pourrez m'apporter

Bonjour,

je suis souvent confronté avec ce genre de problème sur mes applications...

La solution est noté dans le message d'information, je prend en exemple une des déclarations :

Private Declare Function GetSystemMenu Lib "User32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long

doit être "transformée" en :

Private Declare PtrSafe Function GetSystemMenu Lib "User32" (ByVal hWnd As LongPtr, ByVal bRevert As LongPtr) As Long

donc deux modifications principales à faire :

ajouter PtrSafe juste après Declare

et les variables Long doivent être déclarées en LongPtr, mais pas le Long de la function...

Faites une sauvegarde de votre application avant toutes modifications, merci.

Faites les modifications lignes après ligne au cas ou, afin de savoir sur laquelle il pourrait y a voir un problème suite à la modification.

Si cette application devait fonctionner sur un ordinateur moins récent alors vous pouvez faire un test de version et faire les déclarations en fonction, comme ci-dessous (ceci reste un exemple) :

#If VBA7 Then
    Private Declare PtrSafe Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As LongPtr, ByVal wParam As LongPtr, lParam As Any) As Long
    Private Declare PtrSafe Sub ReleaseCapture Lib "user32" ()
#Else
    Private Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Declare Sub ReleaseCapture Lib "user32" ()
#End If

@ bientôt

LouReeD

bonjour et merci.

Seulement je ne peux vérifier car j'ai une nouvelle erreur "GetSystemMenu" qui se présente dans UserForm Initialize "GetSystemMenu" n'est pas reconnu la bibliothèque.

Puisque mon problème vient du fait que j'ai copier une application de mon 32 bits sur mon 64 bits pourrais-je avoir les programmes Declare, Active et Initialize du Userform pour 64 bits ?

Je réécrirai ces bouts de programme sur mon nouvel ordi.

Cdlt

Bonjour,

pose-toi quand même la question de savoir si la version 64 bits est obligatoire pour toi.

On ne la met que si on est obligé.

Sinon, désinstalle pour mettre la 32 bits (même si windows est 64 bits).

eric

Bonjour eriiic,

je suis débutante, et avec un peu d'aide, je suis arrivée à faire un programme de gestion de données avec publipostage sur Vista qui fonctionne très bien.

Vu que les mises à jours ne se font plus j'ai acheté un nouvel ordi. Je réinstalle mes programmes et cette application importante pour moi ne fonctionne pas pour les raisons évoquées ci-dessus. Concernant ton conseil : Comment la mettre en 32 bits ???? Toutefois j'aurais préféré faire tourner le programme sans avoir à toucher à l'ordi.

Bonsoir LouReeD,

Merci du conseil ligne par ligne, je n'ai pas eu de message d'erreur en écrivant, par contre en lançant le programme : le message ligne ambiguë apparaît pour la ligne suivante.

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

Merci de l'aide que vous m'apporterez

Bonjour,

comme je t'ai dit : il faut désinstaller la 64bits pour mettre la 32.

Car il n'y a pas que les pointeurs à changer, tous les contrôles activeX ne fonctionneront pas et là tu ne peux rien faire.

Fais-toi aider par celui qui te l'a installé si tu ne sais pas le faire.

eric

Bonjour,

et oui, de mon coté je vais pas à pas sans trop savoir ce que je fais ! J'y connais rien dans ces trucs...

Une chose est sur c'est quelque fois (voir mes applications), certaine de ces déclarations de fonction servent uniquement d'apparence pour l'application : moi j'en ai mis pour supprimer la barre de titre des USF, ou bien encore arrondir les angles etc.

Donc reste à voir si elles sont toutes indispensables pour le fonctionnement nominale de l'application.

Mes connaissances dans ce domaines n'allant pas plus loin que le tâtonnement, je vais tâcher de ne pas en ajouter une couche

J'aurais eu le mérite de faire un "Up" de votre message et de lancer la conversation !

Bon courage pour la suite de l'adaptation, ou bien de la migration vers l'ancienne version.

@ bientôt

LouReeD

Bonjour,

Merci pour l'aide, je reste en attente d'une probable solution. Je suppose ne pas être la première à avoir ce genre de situation

Bonjour,

avec votre code voici ce que j'aurais fait :

' ***********************************************
'Dans la partie Déclaration de la Form :
Private Const SC_CLOSE = &HF060&
'
Private Const MF_BYCOMMAND = &H0&
Private Declare ptrsafe Function GetSystemMenu Lib "User32" (ByVal hWnd As LongPtr, ByVal bRevert As LongPtr) As Long
Private Declare ptrsafe Function RemoveMenu Lib "User32" (ByVal hMenu As LongPtr, ByVal nPosition As LongPtr, ByVal wFlags As LongPtr) As Long
Private Declare ptrsafe Function FindWindowA& Lib "User32" (ByVal lpClassName$, ByVal lpWindowName$)
Private Declare ptrsafe Function EnableWindow& Lib "User32" (ByVal hWnd&, ByVal bEnable&)
Private Declare ptrsafe Function GetWindowLongA& Lib "User32" (ByVal hWnd&, ByVal nIndex&)
Private Declare ptrsafe Function SetWindowLongA& Lib "User32" (ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)
Dim change_nom_prenom(1) As String

'********************************************************
'Written: February 14, 2011 LongPtr,
'Author: Leith Ross
'
'NOTE: This code should be executed within the UserForm_Activate() event.

Private Declare Function GetForegroundWindow Lib "User32.dll" () As Long

Private Declare ptrsafe Function GetWindowLong Lib "User32.dll" Alias "GetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As LongPtr) As Long

Private Declare ptrsafe Function SetWindowLong Lib "User32.dll" Alias "SetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As LongPtr, ByVal dwNewLong As LongPtr) As Long

Private Const WS_THICKFRAME As Long = &H40000
Private Const GWL_STYLE As Long = -16

A vous de le recoller au bon endroit

@ bientôt

LouReeD

Rebonjour LouReeD,

Bravo, cela a marché, en mettant "PtrSafe" entre "Declare" et "Function" je n'ai pas eu à changer "As Long" en "LongPtr"

Private Declare PtrSafe Function GetSystemMenu Lib "User32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long

Merci, je vais pouvoir lancer et essayer l'appli. Encore une fois merci cela m'enlève une sacrée épine du pied.

en fait de :

il faut cliquer sur le petit "V" et non pas mettre le smiley !

Donc :

@ bientôt

LouReeD

Bonjour,

Le petit "V", ok pour l'instant je ne le vois dans la zone 'Répondre' en ce qui concerne 32 bits / 64 bits problème résolu.

Merci, je cherche le petit 'v'

Et bien voilà !

un sujet de plus résolu grâce à EXCEL-PRATIQUE.COM !!!!

@ bientôt

LouReeD

Rechercher des sujets similaires à "conversion application bits systeme"