Problème déclaration fonction VBA 64bits
Bonjour à tous,
je suis en train de réaliser le tutorial qui se trouve à cette page ( ici )
Au chapitre "III-C-3-d Propriétés : Événements" il est fourni du code VBA pour déclarer la fonction de choix de couleur ; ce code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| Private Declare Function CHOOSECOLOR Lib "comdlg32.dll" Alias _
"ChooseColorA" (pChoosecolor As CHOOSECOLOR) As Long
Private Type CHOOSECOLOR
lStructSize As Long
hwndOwner As Long
hInstance As Long
rgbResult As Long
lpCustColors As String
flags As Long
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Public Function ShowColor(Handle As Long) As Long
Dim cc As CHOOSECOLOR
Dim Custcolor(16) As Long
Dim lReturn As Long
Dim CustomColors
'set the structure size
cc.lStructSize = Len(cc)
'Set the owner
cc.hwndOwner = Handle
'set the custom colors (converted to Unicode)
cc.lpCustColors = StrConv(CustomColors, vbUnicode)
'no extra flags
cc.flags = 0
'Show the 'Select Color'-dialog
If CHOOSECOLOR(cc) <> 0 Then
ShowColor = cc.rgbResult
CustomColors = StrConv(cc.lpCustColors, vbFromUnicode)
Else
ShowColor = -1
End If
End Function |
Malheureusement pour moi je suis sous office2010 64bits et la déclaration de la fonction ne fonctionne pas ; il me dit : "Erreur de compilation: Le code contenu dans ce projet doit être mis à jour pour pouvoir être utilisé sur les systèmes 64 bits. Vérifiez et mettes à jour les instructions Declare, puis marquez-les avec l'attribut PtrSafe".
J'ai donc fouillé un peu sur Google et j'ai essayé ça sur la première partie :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
Private Declare PtrSafe Function CHOOSECOLOR Lib "comdlg32.dll" Alias _
"ChooseColorA" (pChoosecolor As CHOOSECOLOR) As LongPtr
Private Type CHOOSECOLOR
lStructSize As LongPtr
hwndOwner As LongPtr
hInstance As LongPtr
rgbResult As LongPtr
lpCustColors As String
flags As LongPtr
lCustData As LongPtr
lpfnHook As LongPtr
lpTemplateName As String
End Type
End Function |
Du coup j'obtiens le message d'erreur access : "L'expression Avant MAJ entrée comme paramètre de la propriété de type événement est l'origine d'une erreur. Seuls des commentaires peuvent apparaitre après End SUb, End Function, ou End Property.
*Le résultat de l'expression n'est pas le nom d'une macro, le nom d'une fonction définie par l'utilisateur ou [Event Procedure].
*Une erreur a peut-être été commise lors de l'évaluation d'une fonction, d'une évènement ou d'une macro."
J'ai bien mis des LongPtr pour toutes les fonctions systèmes qui ont un rapport à la mémoire comme indiqué dans l'aide MS.
Et j'ai bien ajouté le PtrSafe à la suite de "Declare".
Est-ce que cela pourrait venir de la librairie comdlg32.dll qui n'est pas lue par un système 64bits ?
En vous remerciant par avance
Thomas