VBA access boucle sur une table

Résolu/Fermé
bema93 Messages postés 9 Date d'inscription mercredi 9 juillet 2008 Statut Membre Dernière intervention 4 août 2008 - 22 juil. 2008 à 11:26
 macgiver - 17 févr. 2010 à 20:05
Bonjour,
tout le monde je souhaiterais parcourir les champs d'un table (ex: ma_table) un par un, et mettre un nombre aléatoire (completement aléatoire !) généré par une fonction publique irand() qui marche, dans une colonne qui s'appelle "aleat" c'est la colonne 30.
J'ai écrit ça mais ca ne me fait rien du tout au fait je ne sais pas du tout parcourir une table en écriture, à noter que je suis un rookie en vba.

'initialisation de mes champs
Dim db As DAO.Database
Dim myrst As DAO.Recordset
Set db = CurrentDb

Dim req As String
req = "SELECT * FROM [ma_table] "
Set myrst = db.OpenRecordset(req)

'je me place qu début
DoCmd.GoToRecord , , acFirst

'boucle
Do While Not myrst.EOF

myrst.Edit
'myrst.Fields("aleat").Value = irand() <= marche pas
'myrst.Fields(29).Value = irand() <= marche pas
'myrst![aleat] = irand() <= marche pas
'myrst.Fields("aleat") = irand() <= marche pas
myrst.MoveNext

Loop

Pourriez-vous SVP m'aider ça fait depuis 2 jour que je cogite la-dessus, je suis à cours d'idée, en plus je ne sais pas ce qui ne vas pas
Merci d'avance

8 réponses

j'en ai mis du temps mais j'ai fini par trouver, c'etait plus simple que je ne pensait:

Max = CurrentDb.TableDefs(tbl).RecordCount -- le nombre d'enregistrement de ma table

--je rajoute temporairement un index (ordre) pour la mis à jour de ma table
DoCmd.RunSQL "ALTER TABLE [ma_table] ADD ordre COUNTER"

--boucle
Do While I <= Max
DoCmd.RunSQL "update [ma_table] set [aleat] = " & irand & " WHERE [ordre] = " & I & ";"
I = I + 1
Loop

--je supprime l'index
DoCmd.RunSQL "ALTER TABLE [ma_table] DROP COLUMN ordre"

et voilou ca donne exactement ce que je veux

Merci Archi-dessin pour ton aide
8
ton Max est déclaré de quelle maniere (dim Max as ???)


merci
0
bema93 Messages postés 9 Date d'inscription mercredi 9 juillet 2008 Statut Membre Dernière intervention 4 août 2008 10
22 juil. 2008 à 18:39
irand() est une fonction publique qui renvoie un nombre aléatoire entre i et j (ex 1 et 70000)
je veux récupérer dans la table pour chaque enregistrment un nombre aléatoire dans le champs "aleat" (30 ème colonne)

illustration (pardon pour la présentation sommaire)

ma_table
---------------------------------------------------------------------------------
ID | NOM | PRENOM | AGE | ............... | ALEAT |
------|---------- |--------------|----------|--------------------|--------------|
1 | TOTO | TATA | 21 | .............. | 20085 |
2 | TUTU | TITI | ... | ......... | 256 |
3 | ... | ......... | ... | ................ | 4157 |
4 | ... | ......... | ... | ................ | 4 |
5 | ... | ......... | ... | ................ | 1745 |
6 | ... | ......... | ... | ................ | 4157 | possibilité d'avoir le même nombre(mais je preferai pas !)
7 | ... | ......... | ... | ................ | 215 |
8 | ... | ......... | ... | ................ | 58743 |
0
Archi-dessin Messages postés 270 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 28 décembre 2009 25
23 juil. 2008 à 19:45
ce que je vois, un tableau constituait par un en têt ID, NOM, Prénom,.....
et pou chaque ligne contient un enregistrement alors
je crée des tableaux d'un seule dimension qui répond au nombre de colonne

n = 'nombre de ligne saisie dan le tableau
Do While i<n

myrst.addnew
myrst.Fields.item("aleat").Value = Tab_ID[i]
myrst.Fields.item("29").Value = Tab_NOM[i]
myrst.Field.item.("aleat") = Tab_Pren[i]
myrst.Fields.item ........
......
....
myrst.update
i=i+1
Loop
0
Frappe Misere Messages postés 2677 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 10 août 2011 568
22 juil. 2008 à 11:29
je ne sais pas si tu es obligé de passer par du VBA, mais tu peux faire ta requete avec l'assistant d'access.
tu crées une requete mise à jour avec ton champs, mise à jour -- ta fonction.
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bema93 Messages postés 9 Date d'inscription mercredi 9 juillet 2008 Statut Membre Dernière intervention 4 août 2008 10
22 juil. 2008 à 11:54
C'est bien là le soucis, je suis obligé de le faire via VBA, je suis persuadé que ta methode fonctionne même si je ne sai s pas trop comment faire, masi c'est surtout la methode qui m'interresse, au fait je souhaiterais copier cette methode pour l'appliquer à d'autres sujet après.

Mais merci je cogiterai sur celle-là aussi
-1
Frappe Misere Messages postés 2677 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 10 août 2011 568
22 juil. 2008 à 12:01
la mienne est visuelle, tant que les jointures ne sont pas complexes ça marche tout seul.
je regarde ton code des que j ai dutemps.
-1
Archi-dessin Messages postés 270 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 28 décembre 2009 25
22 juil. 2008 à 17:19
salutvous faite erreur explique c'est quoi irand()
tous les champs de la table reçoi irand() ???????????????????
-1
Archi-dessin Messages postés 270 Date d'inscription samedi 19 avril 2008 Statut Membre Dernière intervention 28 décembre 2009 25
23 juil. 2008 à 19:33
salut,
votre raisonnemant d'affecter un esemble de donnée d'un fonction pour les différents champs de la table, c'est impossible il faut revoir ce que vous rechechez et d'affecter pour chaque champ un donnée voulu
-1