1 membre
Connectés : ( personne )
- La Charte du Forum - Forum - Problèmes Access des débutants
Sujet n° 453 |
Créer des enregistrements dans une table, avec des conditions |
le 04/01/2011 : 00:09 par kolele
visiteur |
Salut Dr.3stones et bonne année 2011.
Je cherche à apprendre les boucles dans VBA, pour créer des enregistrements automatiquement dans une table. J'ai lu tes mémos et j'ai aussi essayé de m'inspirer de la procédure que tu m'avais écrite (pour créer d'un coup 150 lignes dans une table inventoriant des manuels scolaires).
Mais là, mon projet est différent : Je gère des voyages scolaires, avec trois tables : Elèves (CléElève, NomPrénom, Classe), Voyages (CléVoyage, Destination), Tbl_Participation_Elève qui reprend en clé externe les clés primaires des 2 tables précédentes (un voyage peut comporter plusieurs élèves ; un élève peut participer à plusieurs voyages).
Mon besoin consiste à affecter tous les élèves d'une classe dans un voyage, donc créer dans la Tbl ParticipationElève un enregistrement nouveau avec la CléVoyage de mon choix.
1) création d'un formulaire avec deux listes : l'une pour sélectionner le voyage, l'autre pour sélectionner la classe 2) le code : je sais que je devrai déclarer les variables, prévoir des vérif, après je sens qu'il y aura du IF et de la boucle au menu. Je ne vois pas trop la gueule de la procédure pour ajouter un enregistrement pour tous les élèves de la classe x, avec la valeur y en CléVoyage.
Merci de ton aide (passée et présente – d'ailleurs faudra que tu nous dises un jour ce qu'on peut faire en remerciement).
Pierre. |
|
|
Réponse n° 1 -------- le 04/01/2011 : 17:43 par 3Stone
Administrateur
|
Bonjour,
Inutile de faire des boucles en VBA, une requête de mise à jour suffit
Il te manque aussi la table T_Classes avec CleClasse et NomClasse... Ensuite, sur un petit formulaire, tu crées une liste déroulante basée sur T_Voyages et une seconde basée sur T_Classes.
Ensuite un bouton "Attribution" qui aura le code suivant :
Code : Dim sSQL As String sSQL = "INSERT INTO T_Participations ( CleEleve, CleVoyage ) " _ & "SELECT T_Eleves.CleEleves, T_Voyages.CleVoyage " _ & "FROM T_Eleves, T_Voyages " _ & "WHERE (((T_Voyages.CleVoyage)=" & Me.lstDestination & ") " _ & "AND ((T_Eleves.Classe)=" & Me.lstClasse & ")); " CurrentDb.Execute sSQL
Tu adaptes les noms et cela devrait le faire...
Bien sur, il faudra tester si un choix à été fait dans chaque liste, sinon un petit message averti de la chose.
Dans la table T_Participations, il sera interréssant d'ajouter un champ date et de baser l'index sur (ou la clé primaire) sur les trois champs (CleEleve, CleVoyage, DateVoyage). Cela permet à la même classe d'aller deux fois à Paris à des dates différentes
Cordialement, Pierre(3stone)
Citation : d'ailleurs faudra que tu nous dises un jour ce qu'on peut faire en remerciement.
Il y a un livre d'or sur ce site |
|
|
Réponse n° 2 -------- le 12/01/2011 : 17:34 par kolele
visiteur |
ça y est : ça maaaarche 3Stones ! merci beaucoup. J'ai complété la procédure selon tes conseils et en m'inspirant du code que tu avais écrit pour mon appli de gestion des manuels scolaires, au printemps dernier.
Code : xhtml
Dim sSQL As String
'// Vérifications
If Not IsNull(Me!lstClasse) Then
If
IsNull(Me.lstDestination) Then
MsgBox "Saisir une
destination"
Exit Sub
End
If
Else
MsgBox "Sélectionner une classe"
Exit
Sub
End If
'// Requête Ajout
sSQL = " INSERT INTO
[1_Tbl_Participation_Elève] ( CléElève, CléVoyage ) " _
& "SELECT
[0_Tbl_Elèves].CléElève, [0_Tbl_Voyages].CléVoyage " _
& "FROM [0_Tbl_Elèves],
[0_Tbl_Voyages] " _
& "WHERE
((([0_Tbl_Voyages].CléVoyage)=" & Me.lstDestination & ")
" _
& "AND
(([0_Tbl_Elèves].[CléClasse])=" & Me.lstClasse & ")); "
CurrentDb.Execute sSQL
'// Message OK
MsgBox "Les élèves de la
classe" & " " & Me.lstClasse.Column(1) & "
" & "ont été ajoutés."
'// Ràz des contrôles
Me!lstClasse = Null
Me.lstDestination = Null
End Sub |
|
|
sujet actif
sujet clos
Important!
Nouveau message -
Rectifier message
Clôturer sujet
Remonter
|