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

Access Discussion :

[VBA] choix valeur liste déroulante (champ texte d'1 table)


Sujet :

Access

  1. #1
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut [VBA] choix valeur liste déroulante (champ texte d'1 table)
    Salut tout le monde...

    J'ai un pb que je n'arrive pas à résoudre...

    Contexte:
    A l'ouverture de l'application, je recherche la dernière année créée. Si elle ne correspond pas à l'année en cours (en l'occurence pour cette année 2006) : je crée l'année dans la table.. année
    Cela implique la création, pour chaque valeur d'une liste déroulante présente dans la table Coefficient, d'un enregistrement.

    Mon problème est le suivant... je n'arrive pas à compter le nombre de valeur de cette liste déroulante, ni à sélectionner la 1ère valeur, ni la seconde etc...
    Le nombre de valeur me sert de critère d'arrêt de ma boucle de création d'enregistrement, et la sélection des valeurs me permet d'affecter la dite valeur à l'enregistrement en cours de création (j'espère être assez clair...)

    J'ai essayé ceci... (ListCount et ListIndex sont les propriétés utilisées pour les listes déroulantes créées dans les formulaires et les états. L'aide Access renvoi ces propriétés pour les listes de choix des champs texte)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim rstCoefficient As DAO.Recordset
    Dim i As Integer
    Set rstCoefficient = Application.CurrentDb.OpenRecordset("Coefficient")
    i = 0
     
    While i < rstCoefficient![Libelle_Champ].ListCount
          rstCoefficient.AddNew
          rstCoefficient![FK_IDAnnee] = IDAnnee
          rstCoefficient![Libelle_Champ] = rstCoefficient![Libelle_Champ].ListIndex(i)
          rstCoefficient.Update
          i = i + 1
    Wend
    [Libelle_Champ] a pour source les noms de certains champs d'une autre table.
    La variable IDAnnee contient la clé primaire correspondante à l'année créée.

    Merci par avance.
    Kikof

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Essaye de rajouter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rstCoefficient![Libelle_Champ].movelast
    rstCoefficient![Libelle_Champ].movefirst
    apres ton "i=0"

  3. #3
    Provisoirement toléré Avatar de charleshbo
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 222
    Points : 125
    Points
    125
    Par défaut
    ce n'est pas RecordCount qu'il faut utiliser au lieu de ListCount???
    Charles Bergeron - Webmaster/Infographe/Photographe

  4. #4
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut les gars...
    Je ne pense pas que vous ayez vu mon problème...
    Les propriétés que vous énoncez s'appliquent aux tables et requetes pour le parcours des enregistrements et non aux listes modifiables.
    Les propriétés que j'ai utilisée dans mon code sont celles des listes déroulantes que l'on utilise dans les formulaires et les états (et ça fonctionne) et quand j'ai chercher dans l'aide access pour les listes déroulantes appliquées à un champ dans une table il m'a renvoyé vers ces propriétés.
    En tout cas merci pour votre participation.

    [Libelle_Champ] est le nom d'un champ de la table Coefficient qui a pour propriétés
    Type : texte
    Type de contrôle : zone de liste déroulante
    Source : Noms de champs d'une autre table

    Peut être que ce que je demande n'est pas faisable....

  5. #5
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    slt,

    c'est possible ça de bidouiller la liste d'un champ d'un recordset?
    j'ai pas l'impression

    à la rigueur d'un objet field d'un objet tabledefs

    mais pourquoi pas tout simplement :
    1- tu mets une table en source de la liste
    2- tu ajoutes l'année dans la table

  6. #6
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut Arkham
    Tout d'abord félicitations pour ta classe...

    Ensuite... pourrais tu expliquer un peu plus ta pensée...
    Citation Envoyé par Arkham46
    mais pourquoi pas tout simplement :
    1- tu mets une table en source de la liste
    2- tu ajoutes l'année dans la table
    Je vais préciser un peu plus la structure de la base
    Table Année
    IDAnnee
    Annee
    AnneeSourceINSEE
    Population_Reference

    Table Coefficient
    IDCoefficient
    FK_IDAnnee
    Libelle_Champ (Source de la liste déroulante voir ci-dessous)
    Coefficient

    Table Donnees
    IDDonnees
    FK_IDAnnee
    Divers champs dont ceux qui sont la source de ma liste dans la précédente table

    En clair :
    J'ai pour chaque année, et pour chaque champ dont les libellés constituent la source de ma liste déroulante un coefficient.
    Pour reprendre mon 1er post : Je crée l'année et ensuite les différents coefficients.

    Merci

  7. #7
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    un petit exemple bidon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        For i = 0 To Modifiable0.ListCount
            Étiquette4.Caption = Étiquette4.Caption & vbCrLf & Modifiable0.ItemData(i)
        Next
    tu dis si c'est ce que tu voulais ?
    Parce que sinon, j'ai pas compris la question

  8. #8
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut Maxence...
    Je redoutais ce moment...
    Je me suis toujours dis "le jour où c'est le boss qui répond à un de mes post c'est que ma question est soit infaisable soit un défi à relever..."

    En fait si je ne me trompe, ItemData s'applique aux listes déroulante...
    (bon ok j'ai bien une liste déroulante..)
    Le problème ici, c'est que cette liste n'est pas dans un formulaire lorsque je crée les enregistrements. Ce code doit s'exécuter au démarrage de l'appli... on agit donc directement dans la table donc je ne peux pas y accéder de cette manière...

    (j'espère que les explications sont claires )

    [mode simplifié]
    Arghhhhh.. je crois que je vais me résigner à un code bidon... avec un tableau contenant la liste des champs et la taille du tableau en critère d'arrêt.
    [/mode simplifié]

  9. #9
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Citation Envoyé par Kikof
    Salut Arkham
    Tout d'abord félicitations pour ta classe...
    Merci!

    Citation Envoyé par Kikof
    Ensuite... pourrais tu expliquer un peu plus ta pensée...
    Je ne crois pas non...
    Parce que là je n'y comprend plus rien.

    Citation Envoyé par Kikof
    En clair :
    J'ai pour chaque année, et pour chaque champ dont les libellés constituent la source de ma liste déroulante un coefficient.
    Ben c'est pas clair...

    Citation Envoyé par Kikof
    Arghhhhh.. je crois que je vais me résigner à un code bidon... avec un tableau contenant la liste des champs et la taille du tableau en critère d'arrêt.
    Et c'est quoi cette histoire de critère d'arrêt??

    Et c'était quoi au fait la question?

  10. #10
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Citation Envoyé par Arkham46
    Citation Envoyé par Kikof
    Ensuite... pourrais tu expliquer un peu plus ta pensée...
    Je ne crois pas non...
    Parce que là je n'y comprend plus rien.
    Aïe
    Citation Envoyé par Kikof
    En clair :
    J'ai pour chaque année, et pour chaque champ dont les libellés constituent la source de ma liste déroulante un coefficient.
    Ben c'est pas clair...
    Effectivement y manque une virgule...
    J'ai pour chaque année, et pour chaque champ dont les libellés constituent la source de ma liste déroulante, un coefficient

    Exemple...
    La liste déroulante contient 3 valeurs 'Truc', 'Machin', 'Bidule'
    Année Libelle Coefficient
    2004 Truc 0
    2004 Machin 0
    2004 Bidule 0

    lors de la création des enregistrements la valeur par défaut de Coefficient est 0
    Citation Envoyé par Kikof
    Arghhhhh.. je crois que je vais me résigner à un code bidon... avec un tableau contenant la liste des champs et la taille du tableau en critère d'arrêt.
    Et c'est quoi cette histoire de critère d'arrêt??
    Le critère d'arrêt de ma boucle...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While i < rstCoefficient![Libelle_Champ].ListCount
    Et c'était quoi au fait la question?
    Et bien pour reprendre... j'ai un champ qui est une liste déroulante. J'ai un code de création d'enregistrements qui doit
    1) prendre le nombre de valeurs de la liste déroulante pour servir de critère d'arret à ma boucle
    2) créer un enregistrement pour chaque valeur de la liste déroulante

    [Edit] Faudrait peut être que je déclare ce champ (qui est une liste déroulante) comme une liste déroulante dans le code pour pouvoir accéder aux propriétés (ListCount et ListItem)....
    Vous en dites quoi ??[/Edit]

  11. #11
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    je commence à comprendre doucement...

    1 - tu as une table1 (jusque là j'ai bon je crois...)
    2 - tu mets les champs de cette table1 dans une liste de choix d'un champ d'une table2
    3 - tu voudrais récupérer cette liste de champ pour remplir dynamiquement la table1

    Donc si j'ai bien compris vu que tu souhaites récupérer une liste de champs d'une table il vaut mieux utiliser un objet tabledef dont tu récupères la collection fields

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Dim db As DAO.Database
        Dim tb As DAO.TableDef
        Dim fd As DAO.Field
        Set db = CurrentDb
        Set tb = db.TableDefs("cultures")
        For Each fd In tb.Fields
            Debug.Print fd.Name
        Next
        Set tb = Nothing
        Set db = Nothing
    Reste la ligne :
    rstCoefficient![Libelle_Champ] = rstCoefficient![Libelle_Champ].ListIndex(i)
    dont je ne comprend le sens.

    Et l'intérêt général du code que je ne comprend pas non plus.

  12. #12
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Euh il serait judicieux de travailler sur les données source de la liste des années.

    Si l'année n'est pas dans la table alors je la crée. Uniquement du DAO.

    EDIT : A lire le post de Arkham apparement je suis à coté de la plaque

  13. #13
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    AYE !
    J'ai compris !!!!!! (enfin ... je crois ! )


    Ton champs est :
    De type TEXTE
    Tu y a fait une liste de choix (comme l'a dit Arkham)
    basée sur des VALEURS et non sur une TABLE/REQUETE
    C'est ça ?

    Si oui, c'est pas bon, déjà !
    Tu devrais te faire une table, contenant tes trois valeurs, et faire ta zone de liste en la basant sur cette table.

    ainsi, tu n'as plus aucun soucis.
    Car, non seulement tu as toute les liste des valeurs de ta zone de liste dans une table, mais qu'en plus, l'ajout de tes données pourras se faire par une simple requête ajout !

    voilà !

  14. #14
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Citation Envoyé par Arkham46
    je commence à comprendre doucement...

    1 - tu as une table1 (jusque là j'ai bon je crois...)
    2 - tu mets les champs de cette table1 dans une liste de choix d'un champ d'une table2
    3 - tu voudrais récupérer cette liste de champ pour remplir dynamiquement la table1
    1- oui
    2- oui
    3- oui

    Donc si j'ai bien compris vu que tu souhaites récupérer une liste de champs d'une table il vaut mieux utiliser un objet tabledef dont tu récupères la collection fields

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Dim db As DAO.Database
        Dim tb As DAO.TableDef
        Dim fd As DAO.Field
        Set db = CurrentDb
        Set tb = db.TableDefs("cultures")
        For Each fd In tb.Fields
            Debug.Print fd.Name
        Next
        Set tb = Nothing
        Set db = Nothing
    C'est ce que j'ai pensé....
    Reste la ligne :
    rstCoefficient![Libelle_Champ] = rstCoefficient![Libelle_Champ].ListIndex(i)
    dont je ne comprend le sens.

    Et l'intérêt général du code que je ne comprend pas non plus.
    La ligne affecte la valeur i de la liste déroulante au champ Libellé_Champ à chaque tour de boucle (donc de création d'enregistrement pour coefficient.

    L'intérêt du code est le suivant : à l'ouverture de l'application, je cherche la dernière année, si elle est différente de l'année en cours alors je crée l'année en cours. Ensuite je crée, pour l'année créée, un enregistrement pour chaque valeur contenue dans la liste déroulante.

    Citation Envoyé par Tofalu
    Si l'année n'est pas dans la table alors je la crée. Uniquement du DAO.
    C'est ce que je fais avant ce code de création de coefficient...
    Depuis que tu m'a donné un coup de pouce, j'use et abuse de DAO au point que je ne veux des requetes dans ma base uniquement si je ne peux pas faire autrement

    Citation Envoyé par Maxence
    AYE !
    J'ai compris !!!!!! (enfin ... je crois ! )


    Ton champs est :
    De type TEXTE
    Tu y a fait une liste de choix (comme l'a dit Arkham)
    basée sur des VALEURS et non sur une TABLE/REQUETE
    C'est ça ?
    1- oui
    2- oui et non... ma liste a bien pour source le nom de certains champs d'une autre table.

    Si oui, c'est pas bon, déjà !
    Tu devrais te faire une table, contenant tes trois valeurs, et faire ta zone de liste en la basant sur cette table.

    ainsi, tu n'as plus aucun soucis.
    Car, non seulement tu as toute les liste des valeurs de ta zone de liste dans une table, mais qu'en plus, l'ajout de tes données pourras se faire par une simple requête ajout !

    voilà !
    Après lecture de vos post je vais étudier la requête ajout.
    Merci et je vous tiens au courant (220 V)

    Kikof

  15. #15
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Bon,
    J'ai pris la solution de Maxence : j'ai créé une table avec la liste des champs et je parcours cette table pour alimenter ma table coefficient.

    Je voulais peut être faire quelque chose de trop compliqué...
    Citation Envoyé par Papy Turbo
    Faire simple, c'est ce qu'il y a de plus compliqué !
    Merci à tous...
    @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. checkbox,liste déroulante,champs texte
    Par james23 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/07/2010, 08h25
  2. Réponses: 4
    Dernier message: 23/07/2009, 13h06
  3. Donner valeurs à liste déroulante en VBA
    Par xeron33 dans le forum IHM
    Réponses: 1
    Dernier message: 01/04/2009, 23h34
  4. Réponses: 2
    Dernier message: 20/03/2008, 10h19
  5. recuperer valeur liste dans champs texte
    Par fredaphp dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/05/2006, 19h17

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