Acess - vba comment remplir un champ de table avec le résultat du choix multiple

Résolu
karloi28 Messages postés 4 Date d'inscription mercredi 28 juillet 2010 Statut Membre Dernière intervention 4 mai 2011 - 3 mai 2011 à 16:31
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 - 4 mai 2011 à 15:36
Bonjour,
Je travaille avec Access 2010.
J'ai une base de donnée avec une table dont un champ est défini comme numérique mais le controle de l'affichage est une zone de liste déroulante avec la propriété "autoriser plusieurs valeurs" à oui. En effet, je dois pouvoir sélectionner plusieurs clients pour une seule tache.
Dans un formulaire, j'ai un objet simple. Je voudrais rentrer la valeur de cet objet dans le champ de ma table, mais cela ne fonctionne pas.
Voici mon code en vba :
    Dim tblSuivi As String
    Dim rsSuivi As DAO.Recordset
    
    tblSuivi = "SELECT * FROM [suivi]"
    Set rsSuivi = CurrentDb.OpenRecordset(tblSuivi)
    rsSuivi.AddNew
    rsSuivi![client] = zldClient.Value
    rsSuivi.Update
    rsSuivi.Close


Mon champ "client" est celui qui a la possibilité d'avoir plusieurs valeurs.
Mon objet zldClient est une zone de liste déroulante où je ne peux faire qu'une seule sélection, et je veux rentrer la valeur choisie (qui est unique) dans ma table où le champ peut avoir plusieurs valeurs.
Lorsque j'effectue ce code, j'ai l'erreur suivante :
Erreur d'exécution'64224'
La méthode 'Collect' de l'objet 'Recordset2' a échoué


Je ne comprends pas pourquoi.
Cela vient-il du fait que le champ de la table soit à sélection multiple ?
Je ne trouve pas comment faire ...
Merci de m'aider.

7 réponses

karloi28 Messages postés 4 Date d'inscription mercredi 28 juillet 2010 Statut Membre Dernière intervention 4 mai 2011
4 mai 2011 à 14:12
Ce que je veux c'est justement créer une nouvelle ligne.
Merci de t'être interessé à mon problème.
Pendant ce temps là, j'ai continué à essayé de trouver quelque chose sur internet.
Et j'ai trouvé quelque chose !!
Mon champ à plusieurs valeurs est nouveau depuis Access 2007 et s'appelle champ multi-varié (ce que je ne savais pas !!!).
J'ai trouvé tout ce qu'il faut savoir sur le traitement de ce champ à cette adresse :
http://warin.developpez.com/access/multivalue/

J'ai donc résolu mon problème.
Merci encore à toi de m'avoir aidé.
3
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
4 mai 2011 à 09:55
Tu dis que ton champs et numérique. à la place de rsSuivi![client] = zldClient.Value met rsSuivi![client] = 5 et dis moi si cela fonctionne.
0
karloi28 Messages postés 4 Date d'inscription mercredi 28 juillet 2010 Statut Membre Dernière intervention 4 mai 2011
4 mai 2011 à 10:13
J'ai essayé et cela provoque la meme erreur ...
J'ai essayé de définir un nouveau champ dans ma table avec les memes caractéristiques (controle de l'affichage en zone de liste déroulante) mais sans autoriser plusieurs valeurs. Dans ce cas cela fonctionne.
C'est pour cela que je me demande si le "problème" ne vient pas du fait que j'autorise plusieurs valeurs. Mais dans ce cas, comment faire ...?
je n'arrive d'ailleurs pas non plus en vba à récupérer toutes les valeurs de ce champ.
Si je fais :
    Dim tblSuivi As String
    Dim rsSuivi As DAO.Recordset
    tblSuivi = "SELECT * FROM [suivi]"
    Set rsSuivi = CurrentDb.OpenRecordset(tblSuivi)
 

La valeur que me retourne rsSuibi.fields(9) (qui correspond à mon fameux champ) est seulement la première valeur de la liste et non la liste entière ...
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
4 mai 2011 à 10:37
Tu dis "la première valeur de la liste et non la liste entière" sais-tu que si tu faire rsSuibi.movenext tu aura le rsSuibi.fields(9) suivant et ansi de suite ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
karloi28 Messages postés 4 Date d'inscription mercredi 28 juillet 2010 Statut Membre Dernière intervention 4 mai 2011
4 mai 2011 à 11:00
oui je sais. Mais cela fait passer à la ligne suivant.
Ce n'est pas ce que je veux faire. Mon champ contient une liste de plusieurs valeurs sur une seule ligne.
Par exemple la valeur d'une ligne pour ce champ est "1;2;3" et la ligne suivante "4;5;6" puisque j'autorise plusieurs valeurs pour ce champ pour une seule ligne.
Quand j'execute le code précédent, cela ne me donne que la valeur "1", puis le movenext ne me donne que la valeur "4"
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
4 mai 2011 à 11:13
Apparemment le problème vient du fait que tu veuille autorise plusieurs valeurs. Peut-être que le mieux pour toi et de : 1)supprimer cette option.
2)Changer le type de ton champ en texte.

Autre chose ton code
¨ Dim tblSuivi As String
    Dim rsSuivi As DAO.Recordset
    
    tblSuivi = "SELECT * FROM [suivi]"
    Set rsSuivi = CurrentDb.OpenRecordset(tblSuivi)
    rsSuivi.AddNew
    rsSuivi![client] = zldClient.Value
    rsSuivi.Update
    rsSuivi.Close


N'est pas cohérent avec ce que tu voudrais faire. Si tu met rsSuivi.AddNew il va créer une nouvelle ligne ou client est vide. Si tu veux modifier une valeur tu dois utiliser rsSuivi.edit et faire rsSuivi![client] = rsSuivi![client] & zldClient.Value.
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
4 mai 2011 à 15:36
Ton mieux!! Bon code!
0
Rejoignez-nous