Utiliser un fichier 32 bits ou 64 bits

Bonjour à tous,

J'ai quelques fichier qui on été conçus avec l'aide de bon nombres d'entres vous. Initialement ils devaient être utilisés sous Windows 32 bits - Excel 2010. Maintenant j'aurais besoin de les ouvrir également sur un Mac avec Excel 64 bits Excel 2016.

En regardant sur internet, j'ai cru comprendre qu'il fallait ajouter "PtrSafe" entre Declare et Function.

Mais cela ne semble pas fonctionner. Pourriez-vous me dire où est mon erreur?

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
Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long

Sub CACHER_BANDE_BLEUE(USF As UserForm)
    Dim hWnd&
    hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D") & "Frame", USF.Caption)
    SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And Not &HC00000: DrawMenuBar hWnd
End Sub

Merci par avance,

(Edit] Effacé par erreur

pour résumer... PtrSafe ne suffit pas : il faut également modifier certaines variables de chacune des déclarations :

Si nécessaire, reposer la question je referai la recherche !

A+

Bonsoir Galopin01,

Je vous remercie pour toutes ces informations, je vais recopier vos codes et vous informe au plus tôt du résultat

Merci beaucoup,

Bonjour,

tu y as sans doute pensé mais ça va mieux en le disant :

tu peux utiliser des directives de compilation pour faire une déclaration ou l'autre selon l'OS (voire sa version)

Ca permet d'avoir une seule version à mettre à jour pour les 2 OS.

directives : https://msdn.microsoft.com/fr-fr/library/office/gg264731.aspx

constantes : https://msdn.microsoft.com/fr-fr/library/office/gg264614.aspx

eric

Bonjour Eric,

Oui bien sur. Je n'ai pas cru devoir en parler dans ce contexte.

Je voulais juste mettre le doigt sur le fait que ce problème dépasse le simple ajout de "PtrSafe" et qu'il faut aussi identifier quelles sont les variables à transformer en LongPtr et celles qui doivent rester en Long...

Je ne suis pas programmeur, moi les histoires de pointeurs, handle TOUSSA c'est du chinois... et je n'ai pas encore trouvé de références en français pour potasser les fondamentaux...

Les rares articles existants sur ce sujets commence à dater et n'apportent guère de précision. Faiblesse de la documentation en français.

Entendons nous bien je ne critique pas ici les trop rares auteurs qui ont fait un travail souvent remarquable...

A+

Bonjour à tous,

Merci Galopin01 ta modification fonctionne parfaitement sur mon Mac. Pour les derniers Post, malheureusement c'est du petit nègre pour moi.

Je vous remercie pour votre travail.

Merci

C'est un peux du p'tit nèg' pour moi aussi je te rassure...

Bonjour,

Pourtant je t'assure que tout est en français

Ce n'est pas qq chose que je pratique n'ayant qu'une version d'excel, mais en regardant l'exemple du 1er lien je vois ça comme ça :

#If Mac Then
 'ici tes Declare pour Mac
#ElseIf Win64 Then
 'ici tes Declare pour excel 64 bits windows
#ElseIf Win32 Then
 'ici tes Declare pour excel 32 bits windows
#End If

Ce qui te fait une seule et unique version du fichier xl quelque soit l'OS, et donc une seule version à modifier lors d'évolutions.

eric

Oui, merci mais ça j'avais compris...

Ce qui me dérange beaucoup plus c'est la notion de pointeur, handle et tout les salamalecs qui tournent autour !

Ainsi pour toutes les autres variables de type Long on ne peut pas savoir s'il faut ou non les passer en LongPtr...

C'était pour djodjo qui disait

Pour les derniers Post, malheureusement c'est du petit nègre pour moi.

Mais comme il ne précise pas quelle partie j'ai développé mon ajout.

Pour le reste il y a des notions où je suis resté étanche aussi

Un outil qui peut aider, Guide d’utilisation de l’Inspecteur de compatibilité du code Microsoft Office :

https://technet.microsoft.com/fr-fr/library/ee833946(office.14).aspx

eric

Ton lien ne fonctionne pas.

bonjour,

Comme je le supposais et près vérification il convient de modifier cette ligne de la manière suivante :

Declare PtrSafe Function SetWindowLongA Lib "user32" (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPTr

A+

Bonsoir eriiic,

Pourrais-tu m'indiquer ou placer ce code?

eriiic a écrit :

Bonjour,

Pourtant je t'assure que tout est en français

Ce n'est pas qq chose que je pratique n'ayant qu'une version d'excel, mais en regardant l'exemple du 1er lien je vois ça comme ça :

#If Mac Then
 'ici tes Declare pour Mac
#ElseIf Win64 Then
 'ici tes Declare pour excel 64 bits windows
#ElseIf Win32 Then
 'ici tes Declare pour excel 32 bits windows
#End If

Ce qui te fait une seule et unique version du fichier xl quelque soit l'OS, et donc une seule version à modifier lors d'évolutions.

eric

Bonjour,

au début d'un module standard, hors procédure.

Pareil que ce que tu avais fait, sauf que tu contrôles avec des #IF les différentes déclarations à faire selon l'environnement.

Si le critère n'est pas rempli les lignes ne sont pas exécutées, donc pas d'erreur selon l'OS qui ne recevra que les siennes

eric

bonsoir,

Ça "peut" donner quelque chose comme ça (à vérifier...) :

#If Win64 Then
Declare PtrSafe Function GetWindowLongPtr Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
Sub CACHER_BANDE_BLEUE(USF As UserForm)
Dim hwnd As LongPtr
hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D") & "Frame", USF.Caption)
SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And Not &HC00000: DrawMenuBar hwnd
End Sub

#ElseIf Win32 Then
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
Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Sub CACHER_BANDE_BLEUE(USF As UserForm)
Dim hwnd&
hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D") & "Frame", USF.Caption)
SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And Not &HC00000: DrawMenuBar hwnd
End Sub
#End If

Ce que je ne sais pas : Est-ce qu'on peut inclure Sub CACHER_BANDE_BLEUE dans ces balises ?

Dans cette Sub le :

USF As UserForm

provoque chez moi une erreur de compilation...

A+

Galopin, il n'y avait pas un Mac dans l'histoire ?

Cependant il n'ont pas l'air de distinguer 32 et 64 bits pour les Mac. Normal ou pas, je n'en sais rien vu que je ne connais pas ces machines.

Pour MAC, moi je ne connais pas non plus.

Rechercher des sujets similaires à "utiliser fichier bits"