Remplir une table par un recordset en utilisant une boucle en VBA-Access

Résolu
omsylv Messages postés 69 Date d'inscription lundi 3 janvier 2005 Statut Membre Dernière intervention 15 septembre 2005 - 15 sept. 2005 à 11:27
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 - 16 sept. 2005 à 10:25
Bonjour,

Je n'ai pas trouvé de réponse dans les autres posts donc voilà !



Présentation de l'environnement : j'ai deux tables qui ressemblent à ça

_______________________________________________
_____________________

Idindicateur ­­|IdContrat |
Valeur00 | Valeur01 | … |
Valeur12
et IdContrat | Montant | mois

_______________________________________________
_____________________



Chaque valeur pour chaque mois de la table 2 correspond à une Valeur0x
de la table 1. Il faut que je remplisse chaque ligne de la table 1 en
divisant chaque valeur par la somme des montant de la table 2 (qui
correspondent au même IdContrat).

cad : Valeur00 = montant pour le mois(0) / somme (montant)



Pour ça, j'utilise des recordset mais je n'arrive pas à automatiser le
processus. J'aimerais bien pouvoir faire quelque chose du genre



set recordset =
currentdb.openrecordset("Table1")


for i = 0 to 12



rs!Valeur0
& i = mon résultat



next i



Je n'arrive à rien et je suis obligé d'écrire pour chaque Valeur :

rs![Valeur00] = mon résultat

rs![Valeur01] = mon résultat



Sachant que j'ai plusieurs conditions possibles à l'ajout dans table1
j'en suis à 320 lignes de code pour remplir 1 ligne du tableau 1

et je dois en tout remplir 30 lignes !!!!!!!



Donc si vous avez une petite idée, même infime, je suis preneur. Si je ne suis pas assez clair, demandez moi et je réexplique.
A voir également:

5 réponses

aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 2
15 sept. 2005 à 11:45
oui, j'ai bien une petite idee, mais je ne suis pas sur qu'elle te plaise !

le mieux serait de remodeliser ta BDD car la c'est quand meme pas le top

je me demande a quoi correspondent tes valeurs Valeur01, valeur02,...
mais je pense qu'il serait mieux de modifier ta table 1 poru qu'elle soit comme ca :

Idindicateur ­­|IdContrat | indiceValeur|Valeur |

où indiceValeur prendrait les valeur 00 à 12

apres, ton probleme devrait se resoudre de lui meme, avec juste quelques requetes habiles :)
3
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 2
15 sept. 2005 à 12:08
alors j'ai peu etre une autre idee a explorer :

en fait, deux idees meme.


je pense que si ton prog tel qu'il est ne fonctionne pas, c'est parce que ta chaine d'identification de tes champs n'est pas correcte :


de 10 à 12, tu n'a pas "valeur12", mais "valeur012", donc il ne trouve pas ton champs.


pour corrgier ce problème, je mettrai :



for i = 0 to 12
if i<10 then
rs!["Valeur0" & cstr(i)] = mon résultat
else
rs!["Valeur" & cstr(i)] = mon résultat
end if



next i

voila pour la premiere solution

sinon la deuxieme que je préfère a la rigueur si tu ne veux pas modifier ta base, ca serait d'utiliser le rang des champs :

Le champ Indicateur a le rang 0... donc le champ Valeur00 a le rang 2





tu dois donc pouvoir faire un truc du genre :



for i = 2 to 14


rs![i] = mon résultat


next i
3
omsylv Messages postés 69 Date d'inscription lundi 3 janvier 2005 Statut Membre Dernière intervention 15 septembre 2005
15 sept. 2005 à 11:50
Je voulais éviter de retoucher la bd mais si personne ne m'apporte d'autre solution je serai bien obligé

de le faire !

Merci
0
omsylv Messages postés 69 Date d'inscription lundi 3 janvier 2005 Statut Membre Dernière intervention 15 septembre 2005
15 sept. 2005 à 12:44
Pour ta première idée : quand j'essaye de faire un rs!["Valeur0" &
cstr(i)] = .... Il me dit que le champ n'est pas trouvé
dans la collection.


Comme si il cherchait un champ [Valeur0&cstr(i)]





Pour ta deuxième solution : je n'y avais pas pensé. Effectivement,
l'emploi des index (ou indicateurs je ne sais plus) règle mon problème.
Le seul soucis qui pourrait survenir : si des champs sont ajoutés dans
la table.





Je vais donc réfléchir à quelle solution je privilégie entre ton premier message et la deuxième idée du deuxième message.








Je te remercie beaucoup !
0

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

Posez votre question
aieeeuuuuu Messages postés 698 Date d'inscription jeudi 16 janvier 2003 Statut Membre Dernière intervention 20 mai 2011 2
16 sept. 2005 à 10:25
De rien.

oui effectivement, la deuxieme solution impose que tu ne modifie plus la BDD par la suite.

ou alors si tu veux etre sur sur, tu peux faire une recheche du champs qui s'appelle "valeur00" en verifiant les noms un a un. mais c pas super.

c'est pour ca que si tu veux quelque chose de propre, le mieux c'est encore de remodeliser la base. surtout que je pense que par la suite si tu as d'autre traitements a faire, ca sera plus pratique...

bon courage pour la suite
0
Rejoignez-nous