XL 2010 Compatibilité excel 2010 32 bits et 64 bits

DIOUF

XLDnaute Nouveau
Bonjour à toutes et à tous,

Je viens solliciter l'aide d'expert sur un problème de compatibilité 32 et 64 bits. Après plusieurs tests je n'arrive malheureusement pas à faire fonctionner mon fichier dans les 2 versions.

Ci-dessous mes 3 déclarations de fonctions sur 3 modules, je ne sais pas laquelle bloque, je vous remercie sincèrement de votre aide.

1er :
#If Win64 Then
Public Declare PtrSafe Function IsWindowVisible& Lib "user32" (ByVal hwnd As LongPtr)
Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
#Else
Public Declare Function IsWindowVisible& Lib "user32" (ByVal hwnd As Long)
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If

2ème :
#If Win64 Then
Declare PtrSafe Function GetSystemMetrics Lib "user32" _
(ByVal nIndex As Long) As Long
#Else
Declare Function GetSystemMetrics Lib "user32" _
(ByVal nIndex As Long) As Long
#End If

3ème :
Option Explicit
#If Win64 Then
Private Declare PtrSafe Function knlOpen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As LongPtr) As LongPtr
Private Declare PtrSafe Function knlClose Lib "kernel32" Alias "_lclose" (ByVal hFile As LongPtr) As LongPtr
#Else
Private Declare Function knlOpen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
Private Declare Function knlClose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long
#End If
 

Simply

XLDnaute Occasionnel
Bonjour

Vous avez masqué une partie du code
Je ne peux pas garantir le succès
Excel 365 64 Bit

VB:
'1er :
#If Win64 Then
Public Declare PtrSafe Function IsWindowVisible& Lib "user32" (ByVal hwnd As LongPtr)
Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#Else
Public Declare Function IsWindowVisible& Lib "user32" (ByVal hwnd As Long)
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If

Code:
'2 ème:
#If Win64 Then
Declare PtrSafe Function GetSystemMetrics Lib "user32" _
(ByVal nIndex As LongPtr) As Long
#Else
Declare Function GetSystemMetrics Lib "user32" _
(ByVal nIndex As Long) As Long
#End If

Code:
'3 ème:
Option Explicit
#If Win64 Then
Private Declare PtrSafe Function knlOpen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, _
ByVal iReadWrite As LongPtr) As Long
Private Declare PtrSafe Function knlClose Lib "kernel32" Alias "_lclose" (ByVal hFile As LongPtr) As Long
#Else
Private Declare Function knlOpen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
Private Declare Function knlClose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long
#End If
 

DIOUF

XLDnaute Nouveau
Bonjour Simply,

Je te remercie pour ton intervention, ça fonctionne :) :)
Mais j'ai un autre problème, quand j'ouvre mon fichier dans 64 Bit et par la suite dans Excel 365 : j'ai une erreur compilation, pour le débloquer à chaque fois je décoche dans Référence (VBE) "Manquant Microsoft Outlook 16.0 Object Library".
S'aurais-tu s'il est possible d'automatiser cette manip stp ?
 

dysorthographie

XLDnaute Accro
Bonsoir,
Effectivement l'utilisation de VBA sur différentes machines entraînement fréquemment des conflits.

Hormis les directives de complications comme plus haut dans le fils qui demande une connaissance particulière ou un bon moteur de recherche, nous rencontrons deux autres problèmes.

Les libraires manquantes lié aux répertoires où sont sauvegardées les DLL, comme visual Basic for Application par exemple !

Cette librairie est chargé par défaut ! Décocher la librairie à chaques allé retour c'est énervant. Il faut utiliser dans ce cas une déclinaison de la librairie effectivement chargé VBA.trim(variable) par exemple.

Pour les applications comme Word par exemple décocher la librairie, déclarer sa variable en object et utiliser creatobject!

Creatobject ("word.application")
 
Dernière édition:

Discussions similaires