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 :

Récupération des valeurs d'une zone de liste choix multiples pour un recordset


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2012
    Messages : 26
    Par défaut Récupération des valeurs d'une zone de liste choix multiples pour un recordset
    Bonjour,

    Je reviens vers vous parce que je suis bloqué avec un problème depuis longtemps. D'habitude, je le contourne, mais dans le projet qui m'occupe, il faut vraiment que je trouve la solution.
    Pour rappel, je suis une sorte d'autodidacte et encore fort amateur, même si j'ai fait pas mal de chemin. Voici mon problème :

    J'ai un formulaire indépendant où j'encode des données qui seront injectés automatiquement dans une table.
    J'utilise la procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dim rst as DAO.Recordset
    Set rst = CurrentDb.OpenRecordset("LATable", dbOpenDynaset)
     
    Rst.addnew
    rst("Champ1") = Me.controle1
    rst("Champ2") = Me.controle2
    rst.update
    rst.close
    Set rst = Nothing
    Mon problème vient du fait q'un des contrôles est une zone de liste multiple choix. J'ai vu un tutoriel sur l'application, mais j'ais pas trop compris. J'ai l'impression que je doit passer par un .Value avec un sous recordset, mais je n'arrive pas à l'intégrer dans mon code.

    Y aurai t'il une bonne âme pour m'expliquer ou insérer les lignes de code ? Pour info, l'erreur obtenue est 64224 La méthode value de l'objet field2 à échoué.

    D'avance un grand merci.

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 849
    Par défaut
    Bonsoir,

    Pour récupérer les valeurs d'une zone de liste à choix multiple, il faut parcourir les valeurs de sa propriété ItemsSelected et les séparer par un caractère exotique (qu'on n'utilise pas souvent), exemple "|".
    Si par exemple, tu as la zdlEncours comme contrôle du formulaire et champZdl comme source dans la table, tu aurais un code du genre :
    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
     
    Dim VarSol AS Variant, strZdl As String
    dim rst as DAO.Recordset
     
    Set rst = CurrentDb.OpenRecordset("LATable", dbOpenDynaset)
    strZdl="" 
    'Parcourir les éléments sélectionnés et construire l'expression résultat
    FOR Each VarSol IN Me.zdlEncours.ItemsSelected
      strZdl = strZdl & Me.zdlEncours.ItemData(VarSol) & "|"
    Next VarSol
    'Enlever le dernier caractère "|"
    strZdl = left(strZdl,len(strZdl)-1)
     
    rst.addnew
    rst("Champ1") = Me.controle1
    rst("Champ2") = Me.controle2
    'Assigner la valeur de la zone de liste
    rst("champZdl") = strZdl
     
    rst.update
    rst.close
    Set rst = Nothing
    Cordialement,

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2012
    Messages : 26
    Par défaut
    Bonjour et merci,

    Après plusieurs essais et erreurs, j'y suis presque. Voici mon code

    Pour la reprise de la valeur de la zone de liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim itm As Variant
    Dim Lstval As String
    Dim IntNbrCar As Integer
    IntNbrCar = Me.ZnCar.ItemsSelected.Count
     
    For Each itm In Me.ZnCar.ItemsSelected
    Lstval = Lstval & Me.ZnCar.ItemData(itm) & ","
    Next
    Lstval = Left(Lstval, Len(Lstval) - 1)
    MsgBox Lstval
    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
    Dim oDb As DAO.Database
    Dim rst As DAO.Recordset 
    Dim oRst As DAO.Recordset
     
     
    Pour l'ajout dans la table :
    Set oDb = CurrentDb
    Set rst = oDb.OpenRecordset("T_ContratCli")
     
     
        rst.AddNew
        rst("TypeConCli") = Me.ZnType
        rst("RefConCli") = Me.NumeroCon
        rst("NomConCli") = Me.ZnNom
        rst("NatureConCli") = Me.Nature
        rst("DateDebutCon") = Me.Du
        rst("DateFinCon") = Me.Au
        rst("FacturableCon") = Me.CocherFacturable
        rst("MontantCon") = Me.Montant
        rst("RealiseCon") = Me.CocherReal
        rst("FactureCon") = Me.CocherFacturable
        rst("ArchiveCon") = Me.CocherArchive
        rst("RemarqueCon") = Me.Remarque
        rst("AnneeConCli") = Me.Annee
        Set oRst = rst.Fields("CarCaptationCon").Value
            oRst.AddNew
            oRst.Fields(0) = Lstval
            oRst.Update
     
     
     
        rst.Update
     
     rst.Close
     Set rst = Nothing
    Il me reste donc un problème :
    lorsque LstVal ne contient qu'une valeur, le code fonctionne.
    Lorsque que j'utilise "," pour séparer les éléments sélectionnés, il ne reprend que la première valeur sélectionnée.
    Lorsque je mets ";" ou "|", j'ai l'erreur 3421 erreur de conversion de type de données
    Avez-vous une idée ?

    Merci d'avance.

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2012
    Messages : 26
    Par défaut
    Résolu, il fallait intercaler un for each pour chaque valeur

    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
    Dim oDb As DAO.Database
         Dim rst As DAO.Recordset ' variable pour ajout dans la table
         Dim oRst As DAO.Recordset
     
        Set oDb = CurrentDb
        Set rst = oDb.OpenRecordset("T_ContratCli")
     
     
        rst.AddNew
        rst("TypeConCli") = Me.ZnType
        rst("RefConCli") = Me.NumeroCon
        rst("NomConCli") = Me.ZnNom
        rst("NatureConCli") = Me.Nature
        rst("DateDebutCon") = Me.Du
        rst("DateFinCon") = Me.Au
        rst("FacturableCon") = Me.CocherFacturable
        rst("MontantCon") = Me.Montant
        rst("RealiseCon") = Me.CocherReal
        rst("FactureCon") = Me.CocherFacturable
        rst("ArchiveCon") = Me.CocherArchive
        rst("RemarqueCon") = Me.Remarque
        rst("AnneeConCli") = Me.Annee
     
        For Each itm In Me.ZnCar.ItemsSelected
        Lstval = Me.ZnCar.ItemData(itm)
         Set oRst = rst.Fields("CarCaptationCon").Value
             oRst.AddNew
             oRst.Fields(0) = Lstval
             oRst.Update
        Next
     
        rst.Update
     
     rst.Close
     Set rst = Nothing

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

Discussions similaires

  1. [XL-2007] Somme des valeurs d'une zone de liste
    Par leyjah dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 19/04/2013, 22h51
  2. Réponses: 5
    Dernier message: 05/04/2013, 17h17
  3. [AC-2007] récupération de valeur dans une zone de liste
    Par Kawabaumga dans le forum IHM
    Réponses: 0
    Dernier message: 31/05/2010, 14h25
  4. Récupération des données d'une zone de liste
    Par Focheur dans le forum VBA Access
    Réponses: 5
    Dernier message: 10/11/2007, 01h27
  5. Réponses: 2
    Dernier message: 12/04/2006, 10h00

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