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 :

[VBA-A]Un code pour récupérer un type de donnée


Sujet :

VBA Access

  1. #1
    Membre du Club Avatar de KEROZEN
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Points : 46
    Points
    46
    Par défaut [VBA-A]Un code pour récupérer un type de donnée
    Bonjour,

    Je tente actuellement de développer une application Access pour mon boulot (je ne suis pas développeurs). Afin d'y insérer un outil de recherche réellement puissant, j'ai suivi un tutoriel très didactique et plutôt clair ( loufab). Seulement voila, j'en suis à la partie où il s'agit de rentrer du code VB pour déterminer un type de donnée dans une des tables du projet.

    Et là ... patatra ! VB m'indique systématiquement la même erreur et ce malgré plusieurs modification du code sur les conseils de plusieurs autres membres du forum Access. Le message est : "élément non trouvé dans cette collection" et pointe sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set tbl = dbs.TableDefs(lfNameTbl)             ' ouvre la définition table
    Je me permets donc de vous soumettre le code en question pour que vous puissiez me dire ce qui semble clocher

    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
    Option Compare Database
    Function lf_GetTypeField(lfNameTbl As String, lfNameFld As String)
    ' Renvoie le numéro du type du champ
    'lfNameTbl = nom de la table
    'lfNameFld = nom du champ
     
        Dim dbs As DAO.Database                            ' Objet de la base
        Dim tbl As DAO.TableDef                            ' Objet de définition de table
     
        Debug.Print "la table est : " & lfNameTbl
        Set dbs = CurrentDb                                 ' ouvre la base courante
        Set tbl = dbs.TableDefs(lfNameTbl)             ' ouvre la définition table
        Dim parcourt As Variant
        For Each parcourt In tbl
            Debug.Print parcourt.Name; parcourt.Name = lfNameTbl
        Next parcourt
     
     
        lf_GetTypeField = tbl.Fields(lfNameFld).Type   ' renvoie le type de champ
     
        Set tbl = Nothing                              ' libération des objets
        Set dbs = Nothing
     
    End Function
    et voici l'instruction qui est placé dans la fenêtre d'exécution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lf_GetTypeField("Saisie_des_operations", "Nom_titulaire")
    Quelqu'un peut-il me venir en aide ? J'aurais besoin d'avancer assez rapidement sur cette application.
    Merci par avance.
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Désolé, il y a longtemps que je n'ai pas fait d'Access et ma dernière utilisation était en Access 97.

    Je n'y utilisais donc pas ADO.

    Voici comment j'ouvrais mes tables, à l'époque.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim WS As Workspace
    Dim DBIsa As Database, DBHead As Database
    Dim TIsa As Recordset, THead As Recordset, TTci As Recordset
    Dim TTemp As Recordset
    Set WS = DBEngine(0)
    Set DBIsa = WS.OpenDatabase(IsaPath)
    Set DBHead = WS.OpenDatabase(HeadPath)
    Set TIsa = DBIsa.OpenRecordset("Isabel")
    Set TTemp = DBIsa.OpenRecordset("Temp")
    Set THead = DBHead.OpenRecordset("Head_Off")
    Set TTci = DBHead.OpenRecordset("Tci")
    On ne sait jamais que ça te donne une piste...
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    Membre du Club Avatar de KEROZEN
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Points : 46
    Points
    46
    Par défaut
    Merci quand même.

    Mais cela ne semble pas fonctionner.
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  4. #4
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Elle est bizarre, ta fonction : elle ne retourne rien !?!??
    Quand tu écris une fonction, tu dois bien mettre:
    Function Blabla(param1 As ???, param2 As ???) As String
    Enfin, String, par exemple...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 41
    Points : 37
    Points
    37
    Par défaut
    Dans ce cas-là, la fonction renvoie un Variant.

  6. #6
    Membre du Club Avatar de KEROZEN
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Points : 46
    Points
    46
    Par défaut
    Pour être tout à fait honnête, je suis (très) novice en programmation ... mais je me soigne ! 3 pages de code matin, midi et soir pendant 3 mois

    Plus sérieusement, je ne peux ni confirmer ni contre argumenter ce que tu dis Megaxel ... En fait, si j'ai bien compris la structure ou plutôt le cheminement de ce code, il s'agit, dans un premier temps de déclarer les variables (Dim) puis "d'ouvrir" l'objet table pour enfin en lire le type de donnée au niveau du champ prédéterminé.

    Malheureusement, mes connaissances très limitées ne me permettent pas d'en comprendre davantage ... et donc encore moins de débuguer ce code.
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

Discussions similaires

  1. Un code VBA pour récupérer un type de donnée ?
    Par KEROZEN dans le forum VBA Access
    Réponses: 22
    Dernier message: 26/09/2019, 11h12
  2. code pour récupérer valeur du formulaire fck
    Par ideal23 dans le forum Langage
    Réponses: 6
    Dernier message: 17/02/2011, 18h38
  3. Fonction perso pour récupérer mime-type
    Par raffa dans le forum Langage
    Réponses: 3
    Dernier message: 09/10/2008, 14h46
  4. Code pour récupérer un fichier
    Par Senki dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/07/2007, 00h44
  5. Réponses: 3
    Dernier message: 07/02/2006, 13h26

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