Dominique1200
Messages postés5Date d'inscriptionsamedi 31 juillet 2004StatutMembreDernière intervention 6 août 2004
-
4 août 2004 à 14:37
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
6 août 2004 à 23:13
Bonjour à tous,
Je voudrais utiliser une librairie : comdlg32.dll
Mais lors de la déclaration de ma fonction :
Public Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" (pOpenfilename As openfilename) As Long
Le compilateur me dit : « Type défini par l’utilisateur non défini ».
Je pense qu’une des causes d’erreur est la suivante : c‘est parce que le compilateur ne trouve pas «GetOpenFileName ». Je pense que pour déclarer une fonction qui se trouve dans une librairie externe, il faut mettre la librairie dans les références (Outils > Références). Mais quand j’essaye d’ajouter la librairie « comdlg32.dll », le VBA refuse de le faire. La rubrique d’aide correspondante dit que c’est peut-être parce que cette DLL n’est pas lisible par Visual Basic.
Pourtant cette librairie comdlg32.dll se trouve bien sur mon ordinateur (même à plusieurs endroits), et j’ai aussi bien fait le :
Public Type openfilename
…
End Type
J’ai le même problème avec la librairie kernel32.dll et advapi32.dll
Dans mon programme, j’utilise une autre déclaration de fonction, utilisant une autre librairie : shell32.dll. J’ai pu ajouter cette librairie dans mes références, je l’ai trouvée sous le nom de « Microsoft Shell Controls and Automation » (dans la liste de librairies que Visual Basic propose). Donc pour cette librairie-là, tout fonctionne bien.
Pensez-vous que, comme le dit l’Assistant Aide, la librairie comdlg32.dll n’est que lisible par Vb et pas par VBA (Access) ?
Un grand merci !!
Dominique1200
PS : je dispose pour le VBA d’Access 10.0 et aussi Visual Basic 6.0
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 4 août 2004 à 14:51
tu utilises un parametre definit en tant qu'OPENFILENAME
c'est ca qui pos probleme :
Public Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (ByRef pOpenfilename As OPENFILENAME) As Long
Dominique1200
Messages postés5Date d'inscriptionsamedi 31 juillet 2004StatutMembreDernière intervention 6 août 2004 6 août 2004 à 10:42
Un grand merci.
J'avais bien fait le
Public Type nom_type
...
End Type
Mais c'est parce que justement j'avais mis cette
déclaration de type après le "Public Declare Function".
L'erreur était simple.
Mais par contre, j'ai été étonné qu'il ne faille pas ajouter
les librairies API à la liste des librairies utilisées dans
notre projet par OUTIL > REFERENCES.
Je vous dis cela, parce que j'ai perdu pas mal de temps à essayer
d'ajouter ces librairies à mon projet, mais Visual Basic refuse.
et je trouve dommage que dans tout ce que j'ai lu (livres ou sites web), je n'ai rien vu à ce propos.
Juste mentionner le nom de la librairie qui nous intéresse (par exemple comdlg32.dll,
kernel32.dll, advapi32.dll) suffit. Personnellement, je trouverais plus logique de
mentionner le path complet de la librairie, j'ai essayé, cela fonctionne
aussi.