[VBA / ACCESS] ajouter à une liste multi-valuée

ajouter à une liste multi-valuée [VBA / ACCESS] - VB/VBA/VBS - Programmation

Marsh Posté le 01-09-2008 à 21:10:00    

Bonjour
 
J'essai depuis plusieurs jours de modifier ce code pour l'adapter avec un split
 
"code qui fonctionne"

Code :
  1. Private Sub Participants_NotInList(NewData As String, Response As Integer)
  2.     If MsgBox("Voulez-vous ajouter " & NewData & " à la liste des prénoms ?",  _
  3.                        vbYesNo + vbQuestion + vbDefaultButton2, "Ajout" ) = vbYes Then
  4.         DoCmd.RunSQL "INSERT INTO tblPrenoms ( Prénom ) SELECT """ & NewData & """;"
  5.         Response = acDataErrAdded
  6.     Else
  7.         Response = acDataErrContinue
  8.         Participants.Undo
  9.     End If
  10. End Sub


 
Le code ci-dessus permet d'ajouter à une liste déroulante d'un formulaire la valeur manquante et la copie dans la table source.
 
Voici ou j'en suis avec l'ajout d'un split qui a pour but de découper une valeur (nom, prénom) entrée dans une liste déroulante multi-valuée pour ensuite l'ajouter automatiquement dans les champs correspondants de la table Participants (le séparateur est la virgule
 

Code :
  1. Private Sub Participants_NotInList(NewData As String, Response As Integer)
  2. Dim tp As Variant
  3. If MsgBox("Voulez-vous ajouter " & NewData & " à la liste des Participants ?", _
  4. vbYesNo + vbQuestion + vbDefaultButton2, "Ajout" ) = vbYes Then
  5. tp = Split(NewData, "," )
  6. DoCmd.RunSQL "Insert into Participants ( Nom, Prenom ) Values(" & Nom & ", " & Prenom & """ )"
  7. Response = acDataErrAdded
  8. Else
  9. Response = acDataErrContinue
  10. Particpants.Undo
  11. End If
  12. End Sub


 
à mon niveau CAD au raz des pâquerettes, je ne vois pas pourquoi ca ne marche pas, (ni même pourquoi ca pourrais marcher...)  :D  j'obtiens sans arrêt une erreur sur la ligne DoCmd (erreur qui diffère en fonction des modifs que j'y fais genre 424, objet requis , mais lequel ??!!)
 
pourriez-vous m'aider ??
 
merci

Reply

Marsh Posté le 01-09-2008 à 21:10:00   

Reply

Marsh Posté le 02-09-2008 à 10:28:20    

L'erreur est dû à l'absence d'apostrophe autour des champs de type alphanumérique.
Il faudrait avoir :

DoCmd.RunSQL "Insert into Participants (Nom, Prenom) Values('" & Nom & "', '" & Prenom & "')"

N.B. En SQL il faut des apostrophes et non pas des guillemets.

Reply

Marsh Posté le 02-09-2008 à 16:10:32    

merci pour ton aide olivthill  
 
on se rapproche, Access me demande si je veux ajouter ma nouvelle valeur à la liste " vous allez ajouter une ligne.." et dès que je clique sur oui j'ai le message suivant " le texte entré n'est pas un élément de la liste..." et seul un enregistrement vide est créé

Reply

Marsh Posté le 02-09-2008 à 17:33:41    

J'ai l'impression que les variables Nom et Prenom ne contiennent rien.
Il faudrait peut-être les remplir avec

Prenom = Split(NewData, "," )(0)  
Nom = Split(NewData, "," )(1)

à la place de

tp = Split(NewData, "," )


Message édité par olivthill le 02-09-2008 à 17:34:15
Reply

Marsh Posté le 02-09-2008 à 17:36:27    

ou plutôt  

Code :
  1. tp = Split(NewData, "," )
  2. Prenom = tp(1)
  3. Nom = tp(2)


 
(VB indexe à partir de 1 et c'est mieux de n'appeler Split qu'une fois ;))

Reply

Marsh Posté le 02-09-2008 à 18:09:30    

J'ai essayé ta derniere solution et j'obtiens une erreur 9 (indice hors de la sélection) sur ta ligne 3
J'ai donc essayé ta première solution et on y est presque !!, les valeurs sont bien ajoutées à la table et dans les bons champs, mais access m'affiche toujours le message "stupide" comme quoi, le texte entré ne fait pas parti de la liste et que je dois sélectionner un élément de cette liste
 
voici le code à jour
 

Code :
  1. Private Sub Participants_NotInList(NewData As String, Response As Integer)
  2. Dim tp As Variant
  3. Dim Nom As String
  4. Dim Prenom As String
  5. If MsgBox("Voulez-vous ajouter " & NewData & " à la liste des Participants ?", _
  6. vbYesNo + vbQuestion + vbDefaultButton2, "Ajout" ) = vbYes Then
  7. Nom = Split(NewData, "," )(0)
  8. Prenom = Split(NewData, "," )(1)
  9. DoCmd.RunSQL "Insert into Liste_Participants ( Nom, Prenom ) Values('" & Nom & "', '" & Prenom & "')"
  10. Response = acDataErrAdded
  11. Else
  12. Response = acDataErrContinue
  13. Liste_Participants.Undo
  14. End If
  15. End Sub


 
Merci pour ton aide !!


Message édité par skezi le 02-09-2008 à 18:10:50
Reply

Marsh Posté le 03-09-2008 à 09:33:12    

La liste.
Peut-être qu'elle aurait besoin d'être rechargée à partir de la table. Pour cela je propose de rajouter la ligne suivante après le RunSQL :

Me!Nom_de_la_liste.Requery

Me est un mot clé qui désigne la form en cours. Nom_de_la_liste est l'identifiant qui a été donnée à la liste, que je ne connais pas, et qu'il faut remplacer par son véritable nom.

Reply

Marsh Posté le 03-09-2008 à 13:34:06    

j'obtiens une erreur 2118 avec cette ligne
Je ne vais pas pouvoir suivre tes conseils aujourd'hui, mais dès que je peux je reviens.
 
Merci

Reply

Marsh Posté le 05-09-2008 à 15:10:05    

Bonjour,
 
Je n'arrive toujours pas à faire sauter le message de sélection, mais autre problème, l'auto correction ne marche pas, il faut donc faire défiler la liste pour savoir si un participant est déjà inscrit.
 
merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed