[Access] Insert Into + boucle

PseudoNana Messages postés 11 Statut Membre -  
 PseudoNana -
Bonjour,
J'ai créé un formulaire avec trois listes déroulantes. La première contient l'identifiant Relevé terrain (LST_id_RELEVE), la seconde les observateurs disponibles (LST_search_OBS) de la T_OBSERVATEUR et la troisième les observateurs sélectionnés (LSTselectOBS) à partir de la liste des observateurs disponibles qui sont eux stockés dans la table Observateurs_Selectionnes.
Sur click d'un bouton de commande je voudrais insérer l'ensemble les identifiants observateurs sélectionner CONobs avec pour chacun l'identifiant relevé dans une table Constater qui est une table de relation entre relevé et observateur.

CONobs CONrel
1 REL-001
4 REL-001
7 REL-001
Je pense qu'il convient d'utiliser une boucle.
Voici une ébauche de mon code qui ne donne aucun enregistrement dans ma table Constater. J'ai copié une partie du code et je ne maitrise pas les ItemsSelected et les itemData.

Dim strSql As String
Dim X As Variant
Dim f As Form

Set f = Forms!F_SAISIE_Observation_Terrain

With LSTselectOBS
For Each X In .ItemsSelected
strSql = "INSERT INTO Constater(CONobs, CONrel) VALUES('" & (.ItemData(X)) & "', '" & f!LST_ID_RELEVE & "');"
Next
.Requery
End With
DoCmd.SetWarnings False
DoCmd.RunSQL strSql
DoCmd.SetWarnings True

Précision, je ne souhaite pas devoir appuyer un à un les observateurs sélectionnés pour que l'insertion se face. C'est bien l'intérêt de la boucle? Sinon, n'est -t-il pas préférable d'utiliser le contenant de la table Observateurs_selectionnés plutôt que les values de la liste LSTselectOBS dans mon Insert into?
Bref, toutes vos suggestions sont bonnes!
Merci

2 réponses

PseudoNana Messages postés 11 Statut Membre
 
Ma requête fonctionne seulement j'ai plusieurs inconvénients:
- il faut cliquer sur chacune des listes (LST_id_RELEVE, LSTselectOBS)
- dans la liste LSTselectOBS seul l'élement sélectionné est enregistré dans la table Constater et pas l'ensemble des observateurs. Donc ma boucle ne fonctionne pas.
Merci de m'éclairer.
0
PseudoNana
 
Bonjour,
Mon problème est résolu, j'avais juste pas pensé mettre selection 'étendu' dans propriété de ma liste.
Par contre, j'ai crée un bouton "Annuler la saisie". Comment faire pour que ma liste devienne vierge. J'ai un programme qui supprime la selection de la liste :
With LSTselectOBS
For Each X In .ItemsSelected
CurrentDb.Execute "DELETE * FROM Observateurs_selectionnes WHERE Observateurs_selectionnes.OBSERVATEUR = " & fCVal(.ItemData(X), "N") & ""
Next
.Requery
End With
LSTsearchOBS.Requery

Mais j'aimerais que la suppression se fasse pour toute la liste sans sélection. Pas un ItemsSelected mais un AllValues par exemple.
Merci
0
PseudoNana
 
Il faut utiliser la fonction RowSource pour viser le contenu de la liste.
mazonedeliste.rowSource = ""
et pour sélectionner toute ma liste automatiquement:
Dim i as long
For i = 0 To Me.mazonedeliste.ListCount - 1
Me.mazonedeliste.Selected(i) = True
Next i
Bonne journée
0