Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Modélisation
Modélisation Le forum qui vous aide à résoudre vos questions relatives à la modélisation (tables et relations) de votre base de données sous Access. Pour les états et les formulaires, postez dans le forum IHM.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/12/2010, 17h52   #1
Invité régulier
 
Homme
Étudiant
Inscription : décembre 2010
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2010
Messages : 45
Points : 9
Points : 9
Par défaut entrer des données automatiquement dans table

Bonjour à tous,
je suis en première année de cycle préparatoire intégré en école d'informatique et nous voilà enfin confrontés à nous même, à savoir un projet personnel.
Celui-ci consiste pour ma part à créer un logiciel pour gérer les notes des élèves dans un collège (plusieurs classes, niveaux, matières, élèves..)
Modèle Conceptel de Données et Modèle Logique de Données étant fait, je m'attaque à la création de tables, des requêtes et des formulaires.
J'ai donc :
T_ELEVE -> R_ELEVE -> F_ELEVE
T_MATIERE -> R_MATIERE -> F_MATIERE
T_CLASSE -> R_CLASSE -> F_CLASSE
T_INFO_CONTROLE -> R_INFO_CONTROLE -> F_INFO_CONTROLE
et
T_ETUDIER -> R_ETUDIER - F_ETUDIER
Celle-ci est une relation ternaire qui regroupe l'élève (nom, prenom), la matière (nom) et les infos controle (date, coef)
Dans la cette table, je dois donc rentrer 700notes (j'ai 10matières, 70 élèves répartis en différentes classes et differents niveaux)
J'ai donc mis les 3 ID eleve,info,matiere dans T_etudier pour les mettre en Clé primaire.
Je cherche donc un moyen de rentrer mes données plus facilement par le biais de copier-coller...
Le problème est que je ne peux coller des données que sur des lignes déjà modifiables (le reste étant grisé et attendant que je clic dessus et que je remplisse a la main les cases)
Comment faire?

Pour l'instant je suis obligé de me tapper toutes les lignes une par une à la main pour completer les cases des differents ID (et en faisant attention à ce que ce soit correct vis a vis de la table en question car le numero que je met pour un élève doit exister dans la table T_eleve bref un casse-tête)

Je ne sais pas si je me fais comprendre, si besoin je peux réexpliquer ou vous éclaircir, voir vous envoyer mon projet si besoin.

D'avance merci car là je suis vraiment bloqué :/
Et joyeux noël !
JAG747 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2010, 18h33   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 458
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 458
Points : 7 534
Points : 7 534
Tu entres des données réelles ou fictives ?

Si c'est 'fictives' pourquoi ne pas faire un petit bout de VBA avec 3 boucles imbriquées qui va compléter tes tables d'associations en fonction des éléments des tables de bases ?

Un truc du genre (attention ce code est incomplet et non fonctionnel, c'est juste pour donner une idée) :

Code :
1
2
3
4
5
6
7
8
do while not rListeEleve.eof()
   do while not rMatiere.eof()
      do while not rClasse.eof()
         'ici assigner la note pour l'élève, la matière et la classe par exemple 
         note=int(rnd()*20) :'assigne un nombre entier entre 0 et 19.
      loop
   loop
loop
Autre méthode que j'utilise parfois c'est de changer l'affichage des champs de mes tables de TextBox à ComboBox. Ainsi je peux choisir dans une liste tout en état directement dans la table.

Je te conseille le format 2 colonnes : Id;Libelle sans masquer le ID ce qui fait que tu vois ce qu'il y a réellement dans ta ton champ. C'est plus pratique pour le débuggage.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2010, 12h26   #3
Invité régulier
 
Homme
Étudiant
Inscription : décembre 2010
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2010
Messages : 45
Points : 9
Points : 9
Oula ! euh je dois t'avouer que je suis un tout nouvel utilisateur d'Access et je vois pas du tout comment faire ce que tu m'annonce ici :S
(Mes données sont effectivement fictives)
JAG747 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2010, 16h09   #4
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Vivre
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 644
Points : 3 895
Points : 3 895
salut marot_r et bienvenu JAG747,

ex: remplissage de 700 lignes dans la table tableNote(id_eleve:num, note:num)
à partir d'access:
alt+f11 => editeur vb
ctrl+g => fenêtre exécution
code:
Code :
docmd.setwarnings false:for i=1 to 700:docmd.RunSQL "insert into tableNote ([id_eleve],[note]) values (int(rnd()*70),int(rnd()*20))":next
à toi d'adapter à ta situation.
joyeux noël !

vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2010, 19h06   #5
Invité régulier
 
Homme
Étudiant
Inscription : décembre 2010
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2010
Messages : 45
Points : 9
Points : 9
bonjour à toi vodiem !
premiere fois que j'utilise l'editeur VB je sais pas trop comment m'y retrouver..
ALT F11 -> ctrl+g fait.
Je marque ce code où ?
Code :
docmd.setwarnings false:for i=1 to 700:docmd.RunSQL "insert into tableNote ([ID_ELEVE],[ID_MATIERE],[ID_INFO_CONTROLE],[NOTES_ETUDIER]) values (int(rnd()*70),int(rnd()*20))":next
dans la fenêtre "exécution"? si oui, après je suppose que je fais exécuter la macro, je lui donne un nom "test", execution :
il me met alors dans la fenetre générale :
Je marque quoi entre les 2?

D'avance merci, et désolé je suis vraiment novice :S
JAG747 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2010, 19h17   #6
Expert Confirmé Sénior
 
Avatar de jacques_jean
 
Homme Jacques THERY
CBPDI(Congés Bien Payés/Durée Indéterminée)
Inscription : janvier 2006
Messages : 3 111
Détails du profil
Informations personnelles :
Nom : Homme Jacques THERY
Âge : 67
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : CBPDI(Congés Bien Payés/Durée Indéterminée)

Informations forums :
Inscription : janvier 2006
Messages : 3 111
Points : 5 395
Points : 5 395
Bonsoir,

Entre "Sub Test" et "End Sub" vous collez le code qui vous a été communiqué.
jacques_jean est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2010, 20h09   #7
Invité régulier
 
Homme
Étudiant
Inscription : décembre 2010
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2010
Messages : 45
Points : 9
Points : 9
Oh, autant pour moi.
En exécutant, j'obtiens :
"Erreur d'exécution '3346':
Le nombre de valeurs de la requête doit coïncider avec le nombre de champs destination."

PS: le déboguer me souligne en jaune :
Code :
docmd.setwarnings false:for i=1 to 700:docmd.RunSQL "insert into tableNOTES_ETUDIER ([ID_ELEVE],[ID_MATIERE],[ID_INFO_CONTROLE],[NOTES_ETUDIER]) values (int(rnd()*70),int(rnd()*20))":next 
Pourriez-vous m'expliquer plus en détail ce que chaque terme de la commande que vous m'avez donnée signifie, j'ai sûrement dû faire une erreur par rapport à mes tables :/
JAG747 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2010, 01h15   #8
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Vivre
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 644
Points : 3 895
Points : 3 895
salut jacques_jean,

JAG747 tu peux aussi taper le code directement dans la fenêtre d'exécution et valider pour ne pas avoir à stocker dans un module.
en principe on vérifie que l'exemple fonctionne avant de modifier le code qd on maitrise pas. ;P
ensuite, apprend à connaitre ta meilleure amie et compagne de tes prochaines nuits : <F1>

pour info:
setwarnings : évite le message d'alerte d'insertion à chaque ajout
for ... next : boucle
runsql : exécute une sql
insert into : ajout enregistrement
rnd() valeur décimale aléatoire compris entre 0 et 1, rnd()*20 valeur entre 0 et 20, int() renvoie la valeur entière

ton pb c'est de faire correspondre le nombre de champs avec le nombre de valeur à insérer (en tenant compte de leur type respectif).
cf <F1> "INSERT INTO"

vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2010, 15h34   #9
Invité régulier
 
Homme
Étudiant
Inscription : décembre 2010
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2010
Messages : 45
Points : 9
Points : 9
Merci beaucoup pour ces précisions vodiem !
et effectivement, je n'y avais même pas pensé à <F1> :S
Je vous joint une image de ma table avec les differentes caractéristiques.
1. lorsque je met ce code :
Code :
DoCmd.SetWarnings False: For i = 1 To 700: DoCmd.RunSQL "insert into tableT_ETUDIER ([ID_ELEVE],[ID_MATIERE],[ID_INFO_CONTROLE],[NOTES_ETUDIER]) values (int(rnd()*70),int(rnd()*20))": Next
J'ai toujours un probleme '3346'...

2. il y a une ou deux choses dans le code que je ne comprends pas (désolé d'être lourd). le i = 1 To 700 me permets de créer 700 nouveaux enregistrements. mais les int(rnd()*70) et int(rnd()*20) je vois pas.. le 70 et 20 correspondent à quoi? à une valeur à ne pas dépasser? du style pas plus de 20/20 ? Je vois pas du tout.. c'est peut-être cela qui bloque..

Merci !

Voilà ma table en questions et les caractéristiques peut-être à prendre en compte :
JAG747 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2010, 16h55   #10
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Vivre
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 644
Points : 3 895
Points : 3 895
Code SQL :
INSERT INTO tableNote ([id_eleve],[note]) VALUES (int(rnd()*70),int(rnd()*20))
littéralement:
insert dans la table tableNote pour les champs [id_eleve] et [note] les valeurs respectives pour ces champs : un nombre entier aléatoire compris entre 0 et 70 (pour id_eleve) et 0-20 (pour note).

arrives tu à comprendre ce qui te manque dans :
Code SQL :
INSERT INTO tableT_ETUDIER ([ID_ELEVE],[ID_MATIERE],[ID_INFO_CONTROLE],[NOTES_ETUDIER]) VALUES (int(rnd()*70),int(rnd()*20))
??

ps:
> pour id_eleve vu que tu as des restrictions et que c'est occasionnel, le plus simple c'est d'ajouter plus d'enregistrement et de supprimer ensuite les enregistrements faisant parti de la plage d'exception.
> pour les notes à 0.5 près tu peux prendre une nombre aléatoire sur 40 divisé par 2.

es ce plus clair ?
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2010, 17h14   #11
Invité régulier
 
Homme
Étudiant
Inscription : décembre 2010
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2010
Messages : 45
Points : 9
Points : 9
D'accord !!
Je comprends mieux, il me manquait des valeurs de champs !
Je devrais donc avoir :
Code :
INSERT INTO tableT_ETUDIER ([ID_ELEVE],[ID_MATIERE],[ID_INFO_CONTROLE],[NOTES_ETUDIER]) VALUES (int(rnd()*95),int(rnd()*10),int(rnd()*30),int(rnd()*40):2)

Pour le 40/2 je suis pas sûr sûr d'avoir bien positionné ma division

Pour ce qui est des élèves, Comment puis-je modifier un ID? Je pense pas que cela soit possible :/
Si je fais "ajouter un nouvel enregistrement" je ne peux choisir l'ID 16 (ou 51,52,53...) Comment puis-je les rajouter puisqu'à present il ne me propose que le 96è puis 97è etc.



EDIT : Bon j'ai testé avec ce code :
Code :
DoCmd.SetWarnings False: For i = 1 To 700: DoCmd.RunSQL "insert into T_ETUDIER ([ID_ELEVE],[ID_MATIERE],[ID_INFO_CONTROLE],[NOTES_ETUDIER]) VALUES (int(rnd()*95),int(rnd()*10),int(rnd()*30),int(rnd()*20))": Next
Donc sans 40/2 pour un premier essai. Et ca fonctionne
Le seul truc bizarre c'est qu'il ne m'en met que 519 et non 700 comme voulu
JAG747 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2010, 18h08   #12
Expert Confirmé
 
Avatar de vodiem
 
Homme Diem VO
Vivre
Inscription : avril 2006
Messages : 2 644
Détails du profil
Informations personnelles :
Nom : Homme Diem VO
Âge : 40
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Vivre
Secteur : Conseil

Informations forums :
Inscription : avril 2006
Messages : 2 644
Points : 3 895
Points : 3 895
Citation:
Envoyé par JAG747
Je comprends mieux, il me manquait des valeurs de champs !
Citation:
Envoyé par JAG747
"Erreur d'exécution '3346':
Le nombre de valeurs de la requête doit coïncider avec le nombre de champs destination."
c'était pourtant explicite non?

tu as "SetWarnings False" ce qui empêche les messages d'alertes et d'erreurs.
si les id_eleve sont lié à une liste restreinte où une contrainte dans la saisie effectivement tu n'auras pas de message d'erreur et donc moins d'enregistrement que prévu.

pour les notes: int(rnd()*40)/2

bravo, bon courage pour la suite.
vodiem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2010, 18h27   #13
Invité régulier
 
Homme
Étudiant
Inscription : décembre 2010
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2010
Messages : 45
Points : 9
Points : 9
Merci beaucoup pour ta patience et toutes tes explications vodiem, me voilà débarrassé d'un sacré fardeau qui finalement n'était pas si difficile que cela
JAG747 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h20.


 
 
 
 
Partenaires

Hébergement Web