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

karloi28 4 Messages postés mercredi 28 juillet 2010Date d'inscription 4 mai 2011 Dernière intervention - 3 mai 2011 à 16:31 - Dernière réponse : 4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention
- 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.
Afficher la suite 

7 réponses

Répondre au sujet
karloi28 4 Messages postés mercredi 28 juillet 2010Date d'inscription 4 mai 2011 Dernière intervention - 4 mai 2011 à 14:12
+3
Utile
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é.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de karloi28
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 4 mai 2011 à 09:55
0
Utile
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.
Commenter la réponse de 4u4me4us
karloi28 4 Messages postés mercredi 28 juillet 2010Date d'inscription 4 mai 2011 Dernière intervention - 4 mai 2011 à 10:13
0
Utile
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 ...
Commenter la réponse de karloi28
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 4 mai 2011 à 10:37
0
Utile
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 ?
Commenter la réponse de 4u4me4us
karloi28 4 Messages postés mercredi 28 juillet 2010Date d'inscription 4 mai 2011 Dernière intervention - 4 mai 2011 à 11:00
0
Utile
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"
Commenter la réponse de karloi28
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 4 mai 2011 à 11:13
0
Utile
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.
Commenter la réponse de 4u4me4us
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 4 mai 2011 à 15:36
0
Utile
Ton mieux!! Bon code!
Commenter la réponse de 4u4me4us

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.