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 :

liste de valeurs en rowsource, récupérer les données d'une requete


Sujet :

VBA Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Points : 127
    Points
    127
    Par défaut liste de valeurs en rowsource, récupérer les données d'une requete
    Hop, c'est encore moi,

    Ayant trouvé solution à mon problème précédent, testé le formulaire avec, je viens de reconceptualiser celui-ci. J'ai remplacé un label et une liste déroulante par une zone de liste seule.
    Lors de l'ajout d'un document, la source de la zone de liste est vierge et je n'ai donc pas de soucis. Par contre, pour modifier un document... la source aurait une première origine table/requête, et je souhaite pouvoir l'enrichir par des choix dans une autre liste déroulante, donc plutôt en mode "liste valeurs".
    Je peux contourner ce problème en ajoutant des enregistrements dans une nouvelle table, et en basant la source de la liste sur cette table. Par contre, ce n'est que repousser mon problème...

    En fait, celui-ci est double :
    * en partant d'une requête séléctionnant un champ, j'aimerai enregistrer un string du genre : valeur1, valeur2, valeur3,...
    * en partant de cette chaine, je dois ensuite remplir une table sur le même modèle que la requête. (un seul champ, plusieurs enregistrements)

    Pour le second aspect de la question, j'ai une idée, qui me semble encore optimisable, mais je lutte toujours contre les signes autour des valeurs, des noms de controls, etc. (il doit être possible de se passer de la string "enregistrer")

    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
    Private Sub testtable()
    Dim TabString() As String
    Dim strChaine As String
    Dim machaine As String
    Dim enregistrer As String
    Dim i As Integer
    machaine = "enregistrement1, enregistrement2, enregistrement3, enregistrement4, enregistrement5"
    TabString() = Split(machaine, ",")
    For i = 0 To UBound(TabString())
    enregistrer = TabString(i)
    strChaine = "INSERT INTO [SPETEMP] VALUES ('" & enregistrer & "')"
    DoCmd.RunSQL strChaine
    Next i
     
    End Sub
    Par contre dans l'autre sens, pour passer de la table à la phrase, je bloque. Ce n'est pas faute d'avoir lu le cours de warin à ce sujet, ainsi que deux trois trucs sur les recordset, dont l'aide d'access, mais je crois que je n'ai pas su en tirer quoi que ce soit d'utile.

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pourquoi ne mets tu pas directement l'instruction SQL de ta requête comme source de ta liste déroulante ?

    Starec

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Points : 127
    Points
    127
    Par défaut
    Parce qu'ensuite je ne peux pas ajouter de valeurs à celle-ci sans les ajouter directement à la table/requête. (en gros, je ne peux pas agir comme sur une liste de valeurs)
    Et il me faudra de toute façon, dans un prochain temps, accéder aux valeurs des enregistrements. Je préfère donc résoudre dès maintenant cet épineux soucis...

    La chaine "enregistrements" (^^) sera utilisée pour remplir un champ.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re

    Voici un petit code rapide pour exemple, je récupéres les données d'un champ strTest dans la table Table1, je crée un chaine (strRowSource).

    Il suffit de l'affecter à ta liste déroulante.

    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
    Public Sub test()
     
        '  déclaration
        Dim rst As DAO.Recordset
        Dim strRowSource As String
     
        ' affectation
        Set rst = CurrentDb.OpenRecordset("SELECT strTest FROM Table1")
     
        ' on fait une boucle pour parcourir les enregistrements
        While Not rst.EOF ' on parcours tant que l'on n'est pas arrivé à la fin
            strRowSource = rst("strTest") & ";" & strRowSource
            rst.MoveNext ' on passe à l'enregistrement suivant
        Wend
     
        MsgBox strRowSource
     
        ' libération
        rst.Close
        Set rst = Nothing
    End Sub
    Ne pas oublier de référencer Microsoft DAO 3.6

    J'ai mis quelques commentaires, mais le tuto sur DAO est incontournable.


    Starec

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Points : 127
    Points
    127
    Par défaut
    J'ai lu le tuto, ce qui me permet de comprendre ce que tu fais, mais je n'y serai pas arrivé moi-même...
    Après ton code, je me sert du code que j'ai sus-donné pour remplir ma table, je fais mes modifs, et c'est tout bon alors, à première vue !

    Merci encore

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 206
    Points : 127
    Points
    127
    Par défaut
    J'avais essayé ton code vendredi, réussi à l'utiliser et à en tirer quelque chose de concret. (à savoir, afficher ma chaine issue d'une table dans une msgbox)
    Ce matin, en essayant de l'appliquer à une requête, Access me demande un paramètre.
    Je fonce ici, cherche un peu, et je vois qu'il faut déclarer le paramètre dans le cas d'une requête.
    J'essaye, sans succès : j'ai maintenant une utilisation incorrecte de la propriété. (.Parameters sélectionné au débbogage)
    La procédure "test" est lancée lors de l'activation d'un bouton par l'utilisateur.
    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
    Public Sub test()
     
     
      Dim rst As DAO.Recordset
      Dim strRowSource As String
      Dim RqtRéf as QueryDef
     
     
      Set rst = CurrentDb.OpenRecordset("SELECT Spécialité.RqtRéf")
    ' la ligne ci-dessus était en jaune avant mes problèmes de déclaration de paramètres
    RqtRéf.Parameters[no1] = Me.txtDocRéf.Value
     
     
      While Not rst.EOF 
          strRowSource = rst("Spécialité") & ";" & strRowSource
          rst.MoveNext 
      Wend
     
      MsgBox strRowSource
     
     
      rst.Close
      Set rst = Nothing
    End Sub
    Le code de la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT SPEDOC.Spécialité, SPEDOC.DocRéf
    FROM SPEDOC
    WHERE SPEDOC.DocRéf = Forms.FrmModifDoc.txtDocRéf.Value;
    C'est pas super cool tout ça, surtout que je m'en rend compte en même temps que je remarque que je n'arrive pas à actualiser le rowsource d'une liste, en fonction d'une valeur en controlsource, sur le Form_Load.²

    [edit :
    J'ai vite fait contourné le problème en passant le code la requête directement à l'ouverture de l'Openrecordset.
    Et c'est pas plus mal, en lançant la sub depuis Form_load, j'arrive maintenantt à avoir une liste à jour...
    /edit]

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

Discussions similaires

  1. [MySQL] Récupérer les données d'une liste déroulante
    Par RootsRagga dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 03/12/2008, 01h04
  2. Récupérer les données d'une liste dans une autre liste
    Par benoit knk dans le forum SharePoint
    Réponses: 2
    Dernier message: 23/05/2008, 16h10
  3. Réponses: 10
    Dernier message: 05/02/2008, 14h37
  4. Réponses: 7
    Dernier message: 28/06/2007, 11h08
  5. Récupérer les données d'une liste dans un $_POST
    Par Sangdrax1604 dans le forum Langage
    Réponses: 4
    Dernier message: 19/10/2006, 10h55

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