XL 2019 Convertir Macro 32 bit en 64 bit

rendan2

XLDnaute Nouveau
Bonjour à tous,

Je viens chercher de l'aide ici après avoir tant bien que mal essayé de trouver une solution en lisant les différents postes sur ce sujet.
Voilà, mon service informatique vient de passer mon ordi d'Office 32 à 64 bit, et depuis j'ai une fenêtre qui s'ouvre systématiquement lorsque j'ouvre certains fichiers.

1652341819129.png


Visiblement il s'agirait d'une incompatibilité dans l'exécution de la macro.

J'ai bien essayé de remplacer dans le code VBA des "Long" par "LongPtr" ou ajouté des "PtrSafe" comme lu dans certains forums, mais n'y connaissant pas grand chose en VBA, ça n'a pas l'air de fonctionner.
En gros, j'essaye de comprendre si, quelque soit la macro initialement développée en 32 bit, est-ce qu'il y aurait une solution (ou un texte spécifique à remplacer/modifier) qui permettrait de lire la même macro en 64 bits.


Vous trouverez ci-dessous le code qui semble poser problème (peut être est-ce uniquement la partie en rouge qu'il faut corriger) :

Par avance, merci beaucoup pour votre aide!

'----- routines for registry management

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" ( _
ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _
ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" ( _
ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, _
lpType As Long, lpData As Any, lpcbData As Long) As Long
' Note that if you declare the lpData parameter as String, you must pass it ByVal
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long



Public Function RegistryGet(iSubKeyName As String, _
Optional iValueName As String, _
Optional iHiveLocalMachine As Boolean) As String
Const KEY_QUERY_VALUE = &H1
Dim lHive As Long
Dim lKeyName As String * 60
Dim lValName As String * 60
Dim lRegKey As Long
Dim lItemType As Long
Dim lItemLength As Long
Dim lItemBuffer As String * 255

lKeyName = IIf(iHiveLocalMachine, "Software\", "Software\SAP\") & iSubKeyName & vbNullChar
lHive = IIf(iHiveLocalMachine, &H80000002, &H80000001) ' HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER ?
lValName = iValueName & vbNullChar
If RegOpenKeyEx(lHive, lKeyName, 0, KEY_QUERY_VALUE, lRegKey) = 0 Then
lItemType = 1
lItemLength = 255
Call RegQueryValueEx(lRegKey, lValName, 0, lItemType, ByVal lItemBuffer, lItemLength)
If lItemLength > 0 Then RegistryGet = Left(lItemBuffer, lItemLength - 1)
Call RegCloseKey(lRegKey)
End If

End Function

Sub Adjust()

Sheet2.Shapes("Info").Width = Sheet2.Shapes("InfoA").Width
Sheet2.Shapes("Info").Height = Sheet2.Shapes("InfoA").Height
Sheet2.Shapes("Info").Top = Sheet2.Shapes("InfoA").Top
Sheet2.Shapes("Info").Left = Sheet2.Shapes("InfoA").Left
Sheet2.Shapes("Info").Visible = msoFalse
Sheet2.Shapes("Info").Visible = msoCTrue
Sheet3.Shapes("Info").Width = Sheet3.Shapes("InfoA").Width
Sheet3.Shapes("Info").Height = Sheet3.Shapes("InfoA").Height
Sheet3.Shapes("Info").Top = Sheet3.Shapes("InfoA").Top
Sheet3.Shapes("Info").Left = Sheet3.Shapes("InfoA").Left
Sheet3.Shapes("Info").Visible = msoFalse
Sheet3.Shapes("Info").Visible = msoCTrue
End Sub



Sub save_wb_invisible()
On Error Resume Next
Dim lWIndow As Window

For Each lWIndow In ThisWorkbook.Windows
lWIndow.Caption = ""
lWIndow.Visible = False
Next
ThisWorkbook.Save
End Sub
Sub Test()
Dim lName As Name
For Each lName In ThisWorkbook.Names
If InStr(lName.Name, "BEx") <> 0 Then
Debug.Print lName.Name
lName.Delete
End If
Next
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 897
Membres
101 833
dernier inscrit
sandra25