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 :

Un code VBA 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 Un code VBA pour récupérer un type de donnée ?
    Bonjour à tous,

    J'ai encore une question de débutant pour vous !

    Voila, je suis en prise avec un excellent tutoriel publié sur ce même site permettant de créer un formulaire de recherche multi-critères (merci à son auteur, Fabrice CONSTANS).

    J'en suis à la partie où il s'agit de rentrer du code VB dans un module pour déterminer le type de données entrées dans une table.

    J'ai donc insérer le code suivant dans un module :

    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
    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 Database             ' Objet de la base
        Dim tbl As TableDef             ' Objet de définition de table
     
        Set dbs = CurrentDb             ' ouvre la base courante
        Set tbl = dbs.TableDefs(lfNameTbl)  ' ouvre la définition table
     
        lf_GetTypeField = tbl.Fields(lfNameFld).Type  ' renvoie le type de champ
     
        Set tbl = Nothing               ' libération des objets
        Set dbs = Nothing
     
    End Function
    ... puis dans la fenêtre d'exécution VB j'ai placé l'instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ? If_GetTypeField("Matable", "Monchamp")
    J'ai bien entendu pensé à remplacer dans le code et l'instruction les termes Matable et Monchamp par les données appropriées. Malgré tout, voici le message d'erreur produit :

    "Erreur de compilation : Sub ou Function non définie"

    Quelqu'un(e) voit-il quelque chose dans le code ou l'instruction qui puisse générer cette erreur ?

    Merci pour vos réponses !

    [Modération, cafeine : Pensez à utiliser la balise [CODE] qui améliore la lisibilité, merci]
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 555
    Points
    24 555
    Par défaut
    Bonjour et merci d'utiliser mon tuto.

    Attention il s'agit de la fonction nommé LF_get... et non iF_get... comme l'appel que tu fais.

    Les majuscules ne sont pas significative mais c'est pour t'indiquer l'erreur.

    Cordialement,

    PS : n'oublie pas les balises Code lorsque tu postes du code c'est plus lisible.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    tu as ajouté la ref dao à ton projet ?
    Elle est pas belle la vie ?

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 555
    Points
    24 555
    Par défaut
    Citation Envoyé par random
    tu as ajouté la ref dao à ton projet ?
    A ce stade du tuto le DAO est depuis longtemps obligatoire.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    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 pour ta réponse loufab !

    J'ai apporté les corrections mais VB m'indique une autre erreur :
    "Erreur 3265 / Elé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
    Peux-tu m'aider ?
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Citation Envoyé par loufab
    A ce stade du tuto le DAO est depuis longtemps obligatoire. :wink:
    pardonje ne pouvais pas savoir
    (ici smiley avec sourire)
    Elle est pas belle la vie ?

  7. #7
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Citation Envoyé par KEROZEN
    Merci pour ta réponse loufab !

    J'ai apporté les corrections mais VB m'indique une autre erreur :
    "Erreur 3265 / Elé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
    Peux-tu m'aider ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        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
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  8. #8
    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 caféine pour tes précisions, mais VB m'affiche toujours le même message d'erreur ...
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  9. #9
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Oui, certes, mais que donne le debug.print ?
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  10. #10
    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
    le debug.print me renvoie le nom de la table dans la fenêtre d'exécution
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    ajoute cette boucle
    dim parcourt as variant
    for each parcourt in tbl
    debug.print parcourt.name, parcourt.name=lfNameTb
    next parcourt
    tu devrais trouver ton erreur
    Elle est pas belle la vie ?

  12. #12
    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
    Dans la fenêtre d'exécution ou dans le code ?
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    dans le code après la définition de la collection tbl
    Elle est pas belle la vie ?

  14. #14
    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
    Désolé, mais VB m'indique "Attendu : fin d'instruction" et semble pointer sur la fenêtre d'exécution.
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  15. #15
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Montre nous le code, il y a peut être une erreur de frappe ou autre coquille ...
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  16. #16
    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
    Voici le 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
    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 = lfNameTb
        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 les lignes insérées dans la fenêtre d'exécution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ? lf_GetTypeField("Saisie_des_operations", "Nom_titulaire")
    la table est : Saisie_des_operations
    Merci à tous pour votre aide.
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  17. #17
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 555
    Points
    24 555
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim parcourt As Variant 
        For Each parcourt In tbl 
             Debug.Print parcourt.Name, parcourt.Name = lfNameTb  'il manque le L de la fin
        Next parcourt
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  18. #18
    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
    Oups !

    J'ai apporté la correstion mais le message reste le même : "Attendu : fin d'instruction"...
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  19. #19
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 015
    Points : 24 555
    Points
    24 555
    Par défaut
    Je ne comprend pas pourquoi après

    Tu fais l'affectation suivante ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parcourt.Name = lfNameTbl
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  20. #20
    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
    J'ai utilisé la partie du code que l'on m'a conseillé :

    Citation Envoyé par random
    ajoute cette boucle
    dim parcourt as variant
    for each parcourt in tbl
    debug.print parcourt.name, parcourt.name=lfNameTb
    next parcourt
    tu devrais trouver ton erreur
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/07/2013, 14h53
  2. Réponses: 1
    Dernier message: 09/11/2010, 15h50
  3. Code vba pour récupérer nom du PC
    Par majudis dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/10/2010, 19h53
  4. Réponses: 1
    Dernier message: 15/11/2007, 07h04
  5. [VBA-A]Un code pour récupérer un type de donnée
    Par KEROZEN dans le forum VBA Access
    Réponses: 5
    Dernier message: 14/04/2006, 16h56

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