IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

appeler un module en VBA


Sujet :

VBA Access

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 42
    Par défaut appeler un module en VBA
    bonjour,
    j'aimerais savoir comment appeler un module en VBA
    en effet j'ai demandé sur le forum conception si c'était possible et comment créer un bouton pour joindre un fichier, type parcourir...

    on m'a proposé la fonction getOpenFileName (et je remercie encore la personne), j'ai trouvé cette fonction sur le net, et l'ai mise dans un module comme expliqué sur la procédure.
    maintenant comment de mon formulaire appeler la fonction ?

    merci beaucoup
    A bientôt
    Orlane

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    bonjour,
    qu'entends-tu par appeler un module ?
    tu souhaites ajouter le fichier à tes références de projet ?
    http://access.developpez.com/faq/?page=ref#ListRef
    tu souhaites appeler une fonction qui est dans un module ?
    http://access.developpez.com/faq/?page=Macros#macro

    peux-tu nous expliquer un peu mieux ce que tu cherches à faire stp ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 42
    Par défaut
    j'ai une base donnée, enfin presque, pour gérer des candidats.
    j'ai créé un formulaire avec des onglets qui me permet d'avoir le dossier du candidat, chaque onglet correspondant à une rubrique du dossier.
    il y a notamment un onglet entretien dans lequel on peut visualiser les entretien de chaque condidat, et j'y ai ajouté un bouton pour ouvrir un autre formulaire que permet d'enregistrer un nouvel entretien

    Sur ce formulaire j'aimerais y ajouter :
    un choix du type: voulez-vous attacher un fichier CV
    ou insérer un contenu.

    A coter du "rond" (je ne trouve pas le nom) qui me servira pour sélectionner le choix j'aimerais un bouton qui s'appelerais comme pour les messageries: "parcourir", et qui permettrais d'avoir l'arborescence du disque, donc de selectionner et de joindre le fichier en question
    pour l'enregistrer où ça je ne sais pas bien comment ça fonctionne si c'est des liens ou un stockage qq part.

    Sur le net j'ai trouvé ça suite à votre réponse, et il disait de l'enregistrer dans module, j'ai donc créer un module que j'ai appeler "ouvrir_un_fichier", et fait un copié- collé , mais maintenant je bloc.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    Option Compare Database
    Option Explicit
    Public Enum Selection
        Mono_Sélection = 1
        Multi_Sélection = 2
    End Enum
    Public Enum acOpenFileType
        allfiles
        Image
        MSAccess
        MSExcel
        MSOffice
        MSWord
        MultiMedia
        Sound
    End Enum
    Public Const OFN_AllowMultiSelect = &H200
    Public Const OFN_CreatePrompt = &H2000
    Public Const OFN_EnableHook = &H20
    Public Const OFN_EnableTemplate = &H40
    Public Const OFN_EnableTemplateHandle = &H80
    Public Const OFN_EXPLORER = &H80000
    Public Const OFN_ExtensionDifferent = &H400
    Public Const OFN_FileMustExist = &H1000
    Public Const OFN_HideReadOnly = &H4
    Public Const OFN_LongNames = &H200000
    Public Const OFN_NoChangeDir = &H8
    Public Const OFN_NoDeReferenceLinks = &H100000
    Public Const OFN_NoLongNames = &H40000
    Public Const OFN_NoNetWorkButton = &H20000
    Public Const OFN_NoReadOnlyReturn = &H8000
    Public Const OFN_NoTestFileCreate = &H10000
    Public Const OFN_NoValiDate = &H100
    Public Const OFN_OverWritePrompt = &H2
    Public Const OFN_PathMustExist = &H800
    Public Const OFN_ReadOnly = &H1
    Public Const OFN_ShareAware = &H4000
    Public Const OFN_ShareFallThrough = 2
    Public Const OFN_ShareNoWarn = 1
    Public Const OFN_ShareWarn = 0
    Public Const OFN_ShowHelp = &H10
    Public Dialogue As OpenFileName
    Public strFiltre As String
    Public strFile As String
    Public strNomFile As String
    Public RetVal As Long
    Public tOpenFile As Variant
    Public nOpenFile As Long
    Public FileType As acOpenFileType
    Public Type OpenFileName
        lStructSize As Long
        hwndOwner As Long
        Instance As Long
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustomFilter As Long
        nFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpInitialFolder 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" (pOpenfilename As OpenFileName) As Long
    Public Declare Function GetSaveFileName Lib "comdlg32.dll" _
        Alias "GetSaveFileNameA" (pOpenfilename As OpenFileName) As Long
    Private Sub ExtendChoose(FileType As acOpenFileType)
        Select Case FileType
            Case allfiles
                strFiltre = "Tous les fichiers" & Chr$(0) & "*.*"
            Case Image
                strFiltre = _
                    "Fichiers Jpg" & Chr$(0) & "*.jpg;*.jpeg" & Chr$(0) & _
                    "Fichiers Bmp" & Chr$(0) & "*.bmp" & Chr$(0) & _
                    "Fichiers Wmf" & Chr$(0) & "*.wmf" & Chr$(0) & _
                    "Fichiers Tif" & Chr$(0) & "*.tif" & Chr$(0) & _
                    "Tous les fichiers" & Chr$(0) & "*.*"
            Case MSAccess
                strFiltre = _
                    "Fichiers Access" & Chr$(0) & "*.mdb;*.mde;*.accdb;*.accde" & Chr$(0) & _
                    "Tous les fichiers" & Chr$(0) & "*.*"
            Case MSExcel
                strFiltre = _
                    "Fichiers Excel" & Chr$(0) & "*.xls;*.xlsx" & Chr$(0) & _
                    "Tous les fichiers" & Chr$(0) & "*.*"
            Case MSOffice
                strFiltre = _
                    "Fichiers Access" & Chr$(0) & "*.mdb;*.mde;*.accdb;*.accde" & Chr$(0) & _
                    "Fichiers Word" & Chr$(0) & "*.doc;*.docx;*.txt" & Chr$(0) & _
                    "Fichiers Excel" & Chr$(0) & "*.xls;*.xlsx" & Chr$(0) & _
                    "Tous les fichiers" & Chr$(0) & "*.*"
            Case MSWord
                strFiltre = _
                    "Fichiers Word" & Chr$(0) & "*.doc;*.docx;*.txt" & Chr$(0) & _
                    "Tous les fichiers" & Chr$(0) & "*.*"
            Case MultiMedia
                strFiltre = _
                    "Fichiers Mpg" & Chr$(0) & "*.mpg;*.mpeg" & Chr$(0) & _
                    "Fichiers Avi" & Chr$(0) & "*.avi" & Chr$(0) & _
                    "Fichiers Wmv" & Chr$(0) & "*.wmv" & Chr$(0) & _
                    "Fichiers Asx" & Chr$(0) & "*.asx" & Chr$(0) & _
                    "Tous les fichiers" & Chr$(0) & "*.*"
            Case Sound
                strFiltre = _
                    "Fichiers Mp3" & Chr$(0) & "*.mp3;*.mpc" & Chr$(0) & _
                    "Fichiers Wav" & Chr$(0) & "*.wav" & Chr$(0) & _
                    "Tous les fichiers" & Chr$(0) & "*.*"
        End Select
    End Sub
     
    Private Sub openFileSort(Tableau As Variant, Optional SortAscending As Boolean = True)
        Dim Changement As Boolean
        Dim Indice As Long
        Dim strTmp As Variant
        Dim Début As Long
        Dim Fin As Long
        Début = LBound(Tableau) + 1
        Fin = UBound(Tableau) - 2
        Do
            Changement = False
            For Indice = Début To Fin
                If (Tableau(Indice) > Tableau(Indice + 1) And SortAscending) _
                   Or (Tableau(Indice) < Tableau(Indice + 1) And Not SortAscending) Then
                    strTmp = Tableau(Indice)
                    Tableau(Indice) = Tableau(Indice + 1)
                    Tableau(Indice + 1) = strTmp
                    Changement = True
                End If
            Next Indice
        Loop Until Not Changement
    End Sub
     
    Public Function OpenFile(Optional InitialFolder As String = "", _
        Optional MultiSelect As Selection = Mono_Sélection, _
        Optional ModalWindow As Boolean = True, _
        Optional FileType As acOpenFileType = MSOffice, _
        Optional KbBufferLength As Long = 4, _
        Optional WithPath As Boolean = True, _
        Optional FileName As String = "", _
        Optional SortAsc As Boolean = True _
        ) As String
        OpenFile = ""
        If InitialFolder = "" Then InitialFolder = CurrentProject.Path
        If KbBufferLength < 4 Or KbBufferLength > 63 Then
            KbBufferLength = 4
        End If
        ExtendChoose FileType
        With Dialogue
            If ModalWindow Then
                .hwndOwner = Access.hWndAccessApp
            Else
                .hwndOwner = 0
            End If
            .lStructSize = Len(Dialogue)
            .lpstrFilter = strFiltre
            .lpInitialFolder = InitialFolder
            .lpstrTitle = "Recherche d'un fichier"
            If MultiSelect = Mono_Sélection Then
                .lpstrFile = FileName & (Space(254 - Len(FileName)))
                .nMaxFile = 255
                .lpstrFileTitle = Space(254)
                .nMaxFileTitle = 255
                .Flags = 6148
            Else
                .lpstrFile = FileName & Space((KbBufferLength * 4096) - 2 - Len(FileName))
                .nMaxFile = ((KbBufferLength * 4096) - 1)
                .lpstrFileTitle = Space((KbBufferLength * 4096) - 2)
                .nMaxFileTitle = ((KbBufferLength * 4096) - 1)
                .Flags = 6148 Or OFN_FileMustExist _
                    Or OFN_EXPLORER _
                    Or OFN_AllowMultiSelect
            End If
        End With
        RetVal = GetOpenFileName(Dialogue)
        If RetVal = 0 Then
            OpenFile = ""
            nOpenFile = 0
            Exit Function
        End If
        OpenFile = Trim(Dialogue.lpstrFile)
        OpenFile = Left(OpenFile, Len(OpenFile) - 1)
        OpenFile = Replace(OpenFile, Chr(0), ";")
        tOpenFile = Split(OpenFile, ";")
        If UBound(tOpenFile) = 0 Then
            nOpenFile = 1
        ElseIf UBound(tOpenFile) = 1 Then
            OpenFile = Replace(OpenFile, ";", "")
            nOpenFile = 1
        Else
            nOpenFile = UBound(tOpenFile) - 1
            openFileSort tOpenFile, SortAsc
            OpenFile = Join(tOpenFile, ";")
        End If
        If Not WithPath Then
            If InStr(1, OpenFile, ";") > 0 Then
                OpenFile = Mid(OpenFile, InStr(1, OpenFile, ";") + 1)
            Else
                OpenFile = Mid(OpenFile, InStrRev(OpenFile, "\") + 1)
            End If
        End If
    End Function
     
    Public Function SaveFile(Optional InitialFolder As String = "", _
        Optional FileType As acOpenFileType = allfiles, _
        Optional FileName As String = "" _
        ) As String
        SaveFile = ""
        If InitialFolder = "" Then InitialFolder = CurrentProject.Path
        ExtendChoose FileType
        With Dialogue
            .hwndOwner = Access.hWndAccessApp
            .lStructSize = Len(Dialogue)
            .lpstrFilter = strFiltre
            .lpstrFile = FileName & (Space(254 - Len(FileName)))
            .nMaxFile = 255
            .lpstrFileTitle = Space(254)
            .nMaxFileTitle = 255
            .lpInitialFolder = InitialFolder
            .lpstrTitle = "Sauvegarde d'un fichier"
            .Flags = 6148
        End With
        RetVal = GetSaveFileName(Dialogue)
        If RetVal >= 1 Then
            SaveFile = Trim(Dialogue.lpstrFile)
            SaveFile = Replace(SaveFile, Chr(0), "")
        Else
            SaveFile = ""
            Exit Function
        End If
    End Function
    J'espère que j'ai été suffisamment claire,sinon n'hésitez pas à me poser des questions, merci.

  4. #4
    Membre émérite Avatar de stigma
    Homme Profil pro
    Créateur jeux vidéo
    Inscrit en
    Octobre 2003
    Messages
    1 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Créateur jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 130
    Par défaut
    Je ne sais pas si j'ai compris ton problème, mais si je veux "appeler" un module de puis mon code, il faut que le module commence par "Function" et non "Sub".
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function AfficherTruc()
    '
    'code
    '
    End Function
    Puis de n'importe où, par exemple sur l'évènement click d'un bouton :
    C'est ce que tu voulais ?

  5. #5
    rjl
    rjl est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Par défaut
    Bonjour,
    Ca rejoint un peu mon problème posé hier (Appel d'un module à partir d'un formulaire ?) : depuis un formulaire, de manière automatique (bouton ou autre), on n'a accès qu'aux macros mais pas aux modules dont la liste n'est pas même présentée !!
    Parallèlement, je constate qu'on aucun sujet de FAQ pour appeler une macro depuis VBA mais l'inverse n'étant pas un sujet pris en compte, semble-t'il, explique ces interrogations.
    Bonne chance RJL9720

  6. #6
    Membre émérite Avatar de stigma
    Homme Profil pro
    Créateur jeux vidéo
    Inscrit en
    Octobre 2003
    Messages
    1 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Créateur jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 130
    Par défaut
    Je reviens de congés.
    Laisse tomber les macros. On peut très bien appeler une fonction de n'importe où, à partir du moment où tu la nommes :
    et non pas

  7. #7
    rjl
    rjl est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Par défaut
    Bonjour,

    La, j'ai besoin de revoir ma culture personnelle.
    Qu'on laisse tomber les macros, je veux bien, encore est-ce, souvent, un bon point de départ.
    Par ailleurs, si on convertit en VBA, une macro déclenchée par un événement (bouton ou autre), ça donne tout simplement une fonction.

    Pour autant, une fonction a pour possibilité de donner une réponse dont on n'a pas nécessairement l'emploi mais qui s'impose dans l'appel :
    Rep = Function mafonction (param [,param2, ...])

    Où je comprend moins c'est que tu dis
    Laisse tomber les macros
    mais tu dis de ne pas appeler une procédure (Sub) laquelle n'a rien à voir avec une Macro !

    D'une manière générale, la procédure offre plus de possibilités que les fonctions ne serait-ce que leur imbrication et parallèlement, Fonctions et Procédures viennent se stocker dans des modules VBA !

    Alors, merci de me corriger si je me trompe ? RJL9803

  8. #8
    Membre émérite Avatar de stigma
    Homme Profil pro
    Créateur jeux vidéo
    Inscrit en
    Octobre 2003
    Messages
    1 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Créateur jeux vidéo
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 130
    Par défaut
    une fonction peut recevoir plusieurs paramètres et te retourner un résultat. Elles peuvent facilement s'imbriquer aussi. ça donne d'énormes possibilités.
    Si tu as besoin d'un calcul simple à l'intérieur d'un form, état ou module, un Sub suffit bien sûr.
    En règle générale, on évite d'utiliser des macros avec Access. Ainsi c'est plus facilement "portable". DAO => ADO => SQL par exemple. Au plus, tu peux t'autoriser une macro de démarrage et une pour appeler des menus déroulants faits main.

  9. #9
    rjl
    rjl est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    301
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 301
    Par défaut
    Bonjour Stigma,

    On est d'accord sur les Macros, encore que j'en utilise parfois pour lancer le menu principal (AutoExec), voire parfois un état simple.

    Pour les différences Fonctions / Procédures, on reste d'accord sur le fait qu'on peut passer des paramètres multiples pour chaque et de ce fait, le code retour d'une fonction n'est qu'un paramètre spécifique !
    Le fait qu'il existe des fonctions standard accessibles dans Access mais bien sûr non modifiables me font affecter en logique les fonctions comme des briques des procédures !
    C'est une vue personnelle puisque l'une et l'autre peuvent même être récursives !
    Dans mon esprit, une fonction doit être réutilisable qu'elle que soit le projet d'où une envergure plus mesurée.
    Inversement la procédure est complètement attachée à un projet.
    Tout ceci n'est que verbiage au même titre que la différence entre le "." et le "!" dans l'adressage des champs...

    Allez je pense qu'on est d'accord sur l'essentiel et par fonction ou par procédure on fera le même travail !
    Sur ce bonne journée. RJL9804

Discussions similaires

  1. [AC-2007] Appeler un module Vba dans le projet
    Par Gauthier33 dans le forum VBA Access
    Réponses: 3
    Dernier message: 23/04/2015, 14h30
  2. [forms 9i] appel de module
    Par sofian001 dans le forum Oracle
    Réponses: 8
    Dernier message: 21/11/2005, 20h16
  3. Supression de macro Excel et module en VBA
    Par Sammy dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/10/2005, 10h25
  4. appel module dans vba
    Par scully2501 dans le forum Access
    Réponses: 3
    Dernier message: 14/09/2005, 16h37
  5. Problème d'appel de module.
    Par TomPad dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo