Remplir une table par un recordset en utilisant une boucle en VBA-Access [Résolu]

Messages postés
69
Date d'inscription
lundi 3 janvier 2005
Dernière intervention
15 septembre 2005
- - Dernière réponse : aieeeuuuuu
Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
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.
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
Dernière intervention
20 mai 2011
3
Merci
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 :)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
Dernière intervention
20 mai 2011
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Messages postés
69
Date d'inscription
lundi 3 janvier 2005
Dernière intervention
15 septembre 2005
0
Merci
Je voulais éviter de retoucher la bd mais si personne ne m'apporte d'autre solution je serai bien obligé

de le faire !

Merci
Messages postés
69
Date d'inscription
lundi 3 janvier 2005
Dernière intervention
15 septembre 2005
0
Merci
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 !
Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
Dernière intervention
20 mai 2011
0
Merci
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.