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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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