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 :
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".
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
J'ai donc fouillé un peu sur Google et j'ai essayé ça sur la première partie :
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.
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
*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
Partager